2012-07-12 620 views
3

我想使用Scapy解析数据包有效负载的前两个字节。什么是实现这一目标的最佳方式?是否需要偏移计算?使用Scapy解析数据包字节

首先有效负载需要解析,但下面将解析整个PCAP文件,是否有更有效的方法来获得每个有效负载的前两个字节? link

>>> fp = open("payloads.dat","wb") 
>>> def handler(packet): 
...  fp.write(str(packet.payload.payload.payload)) 
... 
>>> sniff(offline="capture1.dump",prn=handler,filter="tcp or udp") 
+0

数据包及其有效负载是什么协议? – tbroberg 2012-07-12 10:05:03

+0

安全套接字层。 – Astron 2012-07-12 10:22:31

回答

2

我明白了。从这里看起来非常高效。

您可以尝试fp.write(str(packet.payload.payload.payload)[:2])以获取前2个字节。

你也可以做fp.write(str(packet[TCP].payload)[:2])跳过所有这些有效载荷。或者,您可以定义SSL数据包对象,将其绑定到适当的端口,然后打印SSL层。

class SSL(Packet): 
    name = "SSL" fields_desc = [ ShortField("firstBytes", None) ] 

bind_layers(TCP, SSL, sport=443) 
bind_layers(TCP, SSL, dport=443) 

def handler(packet): 
... fp.write(str(packet[SSL])) 

...但这似乎是矫枉过正。

+0

指定偏移量时收到以下内容: 'raise IndexError(“Layer [%s] not found”%lname) IndexError:Layer [None] not found' – Astron 2012-07-13 20:25:46

+0

糟糕。我有一个战略上缺少亲密的人。编辑上面来解决它。道歉,但它还没有经过测试。 – tbroberg 2012-07-13 21:17:48