2014-01-16 63 views
1

我一直在用Python中的scapy搞亂,但更具體地說,我一直在創建數據包並嘗試設置TCP層的選項。如何在scapy中取消TCP數據包中的EOL選項

我知道我可以創建

>>> a = IP()/TCP() 

包我也知道我可以

>>> a[TCP].options=[('MSS',1200),('NOP',None)] 

或者

>>> a[TCP].options=('MSS',1200),('NOP',None) 

的問題我將在TCP層的選項在我發送數據包並以wireshark觀察它之後,我已經有了。 Wireshark總是顯示列表結束(EOL)選項設置在我的數據包中時,我沒有設置它。我不認爲這個選項總是被設置,不管怎樣,因爲我看過很多沒有顯示該選項的TCP數據包。有沒有辦法在scapy中設置TCP選項,而不包括EOL選項?

謝謝。

回答

2

這是我認爲的一致性問題。 Wireshark無需檢查。從scapy中,您可以使用TCP(str(TCP(options=...)))來強制Scapy生成數據包並解析結果字節,或者使用.show2()數據包方法。

('MSS', 1200)選項需要單獨4個字節,所以不會需要任何額外的選項添加:

>>> TCP(str(TCP(options=[('MSS',1200)]))).options 
WARNING: No IP underlayer to compute checksum. Leaving null. 
[('MSS', 1200)] 

('NOP', None)選擇適合於僅1個字節,因此3個空字節將被添加。第一個將顯示爲('EOL', None),當然,因爲EOL表示End Of List,則不會考慮下兩個字節。

>>> TCP(str(TCP(options=[('NOP', None)]))).options 
WARNING: No IP underlayer to compute checksum. Leaving null. 
[('NOP', None), ('EOL', None)] 

之所以需要4個字節對準的是,數據偏移字段(dataofs)的意思是「從TCP層到數據的開頭的開頭4字節字的數目」。