我正在嘗試使用稱爲用戶超時的TCP選項構建數據包。 scapy支持這個嗎?添加像MSS這樣的選項看起來非常簡單。 這裏是RFC的選項:http://tools.ietf.org/html/rfc5482#section-2Python Scapy引入TCP選項
任何指針?
我正在嘗試使用稱爲用戶超時的TCP選項構建數據包。 scapy支持這個嗎?添加像MSS這樣的選項看起來非常簡單。 這裏是RFC的選項:http://tools.ietf.org/html/rfc5482#section-2Python Scapy引入TCP選項
任何指針?
該文檔似乎沒有解釋任何方式設置任意選項的數字。
通過代碼挖掘,看起來像TCPOptionsField.i2m
可以讓您通過傳遞int
而不是str
來完成此操作。因此,請嘗試使用28
與您使用MSS
相同的地方。看起來您需要將選項字段的其餘部分組成字符串 - 長度,然後是UTO +粒度的高位字節,然後是低位字節。
或者只是修改代碼來處理:
我想你想要什麼TCPOptions在Scapy的/層/ inet.py元組:
TCPOptions = (
{ 0 : ("EOL",None),
...
28 : ("UserTimeout",!H)
},
{ "EOL":0,
...
"UserTimeout":28,
})
然後你就可以(希望)設置以與設置MSS相同的方式進行UTO。
無論採用哪種方式,在將結果作爲選項值傳遞之前,您都要負責編寫1位粒度和15位超時,但我認爲這比將其更改爲採用布爾的元組和布爾值更簡單int作爲選項值並在TCP中組成它。
當然,除非你在內核上修補了內核,並且確保中間網絡沒有任何設備保留或去掉未知的TCP選項,否則它不會很有趣。
感謝您挖掘代碼。我希望在不改變scapy源代碼的情況下,有更簡單的方法可以做到這一點。我有一個要求,我的一個設備上的堆棧會在這個選項上偷看。我只是想確保這些作品。我會試試這個,祈禱它能奏效。 – user1295872
另外,當你說我必須將該值作爲字符串傳遞時,你的意思是作爲一個十六進制塊嗎?例如,如果我想要30秒的超時時間,我的選項字段的十六進制值將是9E(長度爲4,然後是粒度位0,然後是30的超時)。那麼將選項值設置爲'0x9E'是否有效? – user1295872
首先,您不必更改scapy源代碼,只需將該選項作爲「int」傳遞即可;它只是改變源代碼會更容易。其次,你從哪裏得到9E?你有8位長度4,1位0和15位30.這是40001E。第三,不,字符串我的意思是一串實際的字節,比如3字節的字符串''\ x40 \ x00 \ x1E'',而不是8字節的字符串''0x40001E'。 – abarnert