2012-07-12 95 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