2010-11-09 75 views
2

中的保留位,在rfc793的3.1節中,TCP報頭具有6個保留位,其減少到4個保留位,位於rfc3168。 如何訪問和更改Linux或程序中的這些位,甚至可以如何爲此目標編寫程序?訪問並更改TCP報頭中的tcp報頭

回答

2

標準套接字API不提供應用程序直接更改TCP標頭中各個標誌的方法。

我能想到幾個可能的方法可以解決這個的:

  • 編寫可以對通過它的數據包所需要的頭修改一個TUN/TAP網絡設備,在轉發他們之前真正的網絡設備。內核配置爲通過TUN/TAP設備發送所有傳出的數據包。

  • 使用PF_PACKET套接字來構造和發送來自用戶空間的完全自定義的TCP數據包。儘管如此,您將負責實施所有IP和TCP,包括IP片段重組等。我不建議這樣做,除非你只想發射一些數據包而不是建立一個完整的TCP連接。

  • 創建一個實現TCP標誌修改目標的netfilter(iptables)模塊。您可以基於現有的ipt_ECN.c模塊輕鬆完成此操作,該模塊只有146行。

+0

我可以使用RAW SOCKET並實現新的TCP標頭嗎? – Saar 2010-11-11 09:15:16

+0

@Ramin:是的,'SOCK_RAW','PF_INET'套接字應該也可以。 – caf 2010-11-11 10:20:45