Python TCP Sniffer под Windows
Таким образом, я пытаюсь приспособить ретро удивительный анализатор сетевых пакетов, уже установленный, но для Linux. Основной jist - код ниже, работает для socket.IPPROTO_UDP, но не для socket.IPPROTO_TCP.
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, в bind 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 в package = s.recvfrom(65565) socket.error: [Errno 10022] Указан неверный аргумент
Сниффер, который я пытаюсь подогнать под ретро, используя то же форматирование и т. Д., Находится здесь: http://www.binarytides.com/python-packet-sniffer-code-linux/ - crd to dev - если кто-нибудь еще посоветует мне буду признателен
1 ответ
Помимо вашей ошибки (объяснил Геррат), вы не можете перенести этот код в Windows. Вы можете увидеть в этой статье, когда он говорит:
Linux, потому что, хотя python является переносимым, программы не будут работать или давать аналогичные результаты, например, в Windows. Это связано с различием в реализации сокета API.
Анализаторы пакетов в Windows обычно реализуются путем подключения Winsock API или использования драйвера Winpcap. Так что вы идете не в ту сторону.
Надеюсь, поможет.