我收到一个错误:" struct.error:unpack需要一个长度为14&#34的字符串参数;

时间:2017-02-06 06:28:55

标签: python pcap

我尝试从网络捕获数据包并将数据包文件解析为我的python代码。代码在捕获的数据包列表中的前几个数据包运行完美,然后显示上述

  

错误:" l2data = unpack("!6s6sH",l2hdr)"

如何更改'解包'的价值?适合我的包长度?

我的代码:

#!usr/bin/python

import pcapy

from struct import*

pcap_file=pcapy.open_offline("single.pcap")

count=1

while count:
    print("Packet #:",count)

    count=count+1
    (header,payload)=pcap_file.next()

    l2hdr=payload[:14]
    l2data=unpack("!6s6sH",l2hdr)

    srcmac="%.2x:%.2x:%.2x:%.2x:%.2x:%.2x:" %(ord(l2hdr[0]),ord(l2hdr[1]),ord(l2hdr[2]),ord(l2hdr[3]),ord(l2hdr[4]),ord(l2hdr[5]))
    dstmac="%.2x:%.2x:%.2x:%.2x:%.2x:%.2x:" %(ord(l2hdr[6]),ord(l2hdr[7]),ord(l2hdr[8]),ord(l2hdr[9]),ord(l2hdr[10]),ord(l2hdr[11]))

    print("source MAC:",srcmac,"Destination MAC:",dstmac)

    ipheader=unpack('!BBHHHBBH4s4s',payload[14:34])
    timetolive=ipheader[5]
    protocol=ipheader[6]

    print("Protocol:",str(protocol)],"Time to live:",str(timetolive))

1 个答案:

答案 0 :(得分:0)

#!/usr/bin/python

import pcapy
from struct import *

cap = pcapy.open_live("en0", 65536, 1, 0)

while 1:
    (header,payload) = cap.next()
    l2hdr = payload[:14]
    l2data = unpack("!6s6sH", l2hdr)
    srcmac = "{0:02x}:{1:02x}:{2:02x}:{3:02x}:{4:02x}:{5:02x}".format(l2hdr[0],l2hdr[1],l2hdr[2],l2hdr[3],l2hdr[4],l2hdr[5])
    dstmac = "{0:02x}:{1:02x}:{2:02x}:{3:02x}:{4:02x}:{5:02x}".format(l2hdr[6], l2hdr[7], l2hdr[8], l2hdr[9], l2hdr[10],l2hdr[11])
    print("Source MAC: ", srcmac, " Destination MAC: ", dstmac)

    ipheader = unpack('!BBHHHBBH4s4s' , payload[14:34])
    timetolive = ipheader[5]
    protocol = ipheader[6]
    print("Protocol ", str(protocol), " Time To Live: ", str(timetolive))

我很确定您的问题与您的文件有关。 但是,我建议您查看https://docs.micropython.org/en/latest/pyboard/library/struct.html以了解有关解包功能的更多信息。