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. Так что вы идете не в ту сторону.

Надеюсь, поможет.

Другие вопросы по тегам