我尝试从网络捕获数据包并将数据包文件解析为我的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))
答案 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以了解有关解包功能的更多信息。