Итак, я пытаюсь установить ретро-приложение, которое уже установлено, но для Linux. Основной jist - это код ниже работает для socket.IPPROTO_UDP, но не socket.IPPROTO_TCP.Python TCP Sniffer под Windows
import socket
#create an INET, STREAMing socket
HOST = socket.gethostbyname(socket.gethostname())
# create a raw socket and bind it to the public interface
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
s.bind((HOST, 0))
# Include IP headers
s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
# receive all packages
s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
# receive a packet
packet = s.recvfrom(65565)
print packet
Я получаю ошибку при запуске выше: «строка 12, в s.bind ((HOST, 0)) Файл "", строка 1, в socket.error связывания: [Errno 10022] недопустимый аргумент был поставлен Если я суетиться вокруг с выше, и лишить ее, чтобы обнажить мин:.
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
# receive a packet
packet = s.recvfrom(65565)
print packet
я получаю подобную ошибку, но чуть различий линии 7, в пакете = s.recvfrom (65565) socket.error : [Errno 10022] Был указан недопустимый аргумент
Сниффер, который я пытаюсь установить в ретро, используя то же форматирование и c находится здесь: http://www.binarytides.com/python-packet-sniffer-code-linux/ - crd to dev - если кто-нибудь еще посоветует, я был бы признателен.
65535 (2 ** 16) - 1 будет самым большим числом, которое вы могли бы использовать. а не 65565 – Gerrat
Ничего не изменилось с tcp, а 65565 отлично работает для udp –
А, я видел номер (это действительно странное число) и предположил, что он был просто опечатан. В документе [python docs] (https://docs.python.org/2/library/socket.html#socket.socket.recv) упоминается, что вы должны сделать это в 2 раза, но это не почему ваш код терпит неудачу. – Gerrat