Python, анализатор пакетов с Mac.Это печатать странный текст - PullRequest
0 голосов
/ 04 декабря 2018

Я делаю некоторый анализатор пакетов с помощью python, который печатает пакетные данные на консоль.
он работает, но показывает какой-то странный текст, подобный этому.

1 : E@�4
j#�q���
2 : E@�R4�#�q���
3 : E@��4$#�q���
4 : E@��4�#�q���
5 : E@е4�3#�q���
6 : E@�K4�#�q���
7 : E@Փ4�U#�q���
8 : E@�r4�v#�q���
...

если моя книга верна, тодолжно быть вот так

1 : b'E\x00\x00(\x18\x19@\x00\x80\x06!\x95\xc0\xa8\x00\x05}\x8d\x82\xe7'
2 : b'E\x00\x00(\x18\x19@\x00\x80\x06!\x95\xc0\xa8\x00\x05}\x8d\x82\xe7'
3 : b'E\x00\x00(\x18\x19@\x00\x80\x06!\x95\xc0\xa8\x00\x05}\x8d\x82\xe7'
4 : b'E\x00\x00(\x18\x19@\x00\x80\x06!\x95\xc0\xa8\x00\x05}\x8d\x82\xe7'
...

и весь код Python здесь.

from socket import *
import os

def recvData(sock):
    data = ''
    try:
        data = sock.recvfrom(65565)
    except timeout:
        data = ''
    return data[0]

def sniffing(host):
    if os.name == 'nt':
        sock_protocol = IPPROTO_IP
    else:
        sock_protocol = IPPROTO_ICMP
    sniffer = socket(AF_INET, SOCK_RAW, sock_protocol)
    sniffer.bind((host, 1))
    sniffer.setsockopt(IPPROTO_IP, IP_HDRINCL, 1)
    if os.name == 'nt':
        sniffer.ioctl(SIO_RCVALL, RCVALL_ON)

    count = 1
    try:
        while True:
            data = recvData(sniffer)
            print(str(count) + ' : ' + data[:20])
            count += 1
    except KeyboardInterrupt:
        if os.name == 'nt':
            sniffer.ioctl(SIO_RCVALL, RCVALL_OFF)

def main():
    host = gethostbyname(gethostname())
    print("sniffing : " + host)
    sniffing(host)

if __name__ == "__main__":
    main()

Я погуглил несколько часов, но не смог найти то же самое.
Возможно, проблема с ascii и unicode, но я не уверен.

Python: v3.7.1
OSX: Mojave v10.14.1

будет действительно полезно, если кто-нибудь найдет что-либо.

1 Ответ

0 голосов
/ 04 декабря 2018

О, боже, пожалуйста.
Я нашел проблему.Я определенно использую python 3.7.1, команду python -V return 3.7.1.Но когда я запускаю этот код, автоматически запускается python2.Я сделал настройку псевдонима, так что я думал, что он будет работать на python3.Я вручную использую python3 с консолью, и он выглядит нормально.
Спасибо за комментарии, я проверю все функции в следующий раз.

...