struct.error: для распаковки требуется буфер в 20 байт - PullRequest
0 голосов
/ 25 июня 2019

В настоящее время я работаю над проектом анализатора пакетов в python 3.6, но во время выполнения я получил ошибку. Распаковка идет хорошо, но после двух или трех операций возникла ошибка, и я получил эту ошибку, как я упоминал в заголовке. Я новичок в Python, и этот проект является своего рода чрезвычайным. Я видел несколько похожих вопросов, но не очень помог. Не могли бы вы помочь мне решить это? Заранее спасибо :) Вот код:

connec = socket.socket(socket.AF_PACKET,socket.SOCK_RAW,socket.ntohs(3))
while True:
    raw_data, addr = connec.recvfrom(65535)
    dest_mac, src_mac, eth_proto,data = ethernet_frame(raw_data)
    print("\n Ethernet Frame:")
    print("Destination:{} Source:{} Protocol:{} ".format(dest_mac, src_mac, eth_proto,data))


        if eth_proto == 8:
        (version,header_lenght,ttl, proto,src,target,data) = ipv4_packet(data)
        print(" IPV4 Packet:")
        print("     Version:{}, Header Lenght:{}, TTL:{}".format(version,header_lenght,ttl))
        print("     Protocol:{}, Source:{}, Target:{}".format(proto,src,target))


def ipv4_packet(data):
version_header_lenght = data[0]
version = version_header_lenght >> 4
header_lenght = (version_header_lenght & 15) * 4
ttl, proto, src, target = struct.unpack('! 8x B B 2x 4s 4s',data[:20])
return version,header_lenght,ttl, proto, ipv4(src),ipv4(target),data[header_lenght:]

Приношу свои извинения, если это так долго:)

...