簡體   English   中英

讀取TCP標頭並使用RAW_SOCKET管理TCP連接

[英]Reading a TCP header and managing a TCP connection with RAW_SOCKET

我正在嘗試在C ++ 11中獲取TCP連接的TCP頭。 閱讀已經存在的StackOverflow問題( 這里這里這里這里 ),似乎我必須打開RAW_SOCKET或編寫Linux內核模塊(LKM)才能訪問它。

根據我的理解,打開原始套接字意味着處理整個TCP協議(握手,窗口大小等......)。 有沒有辦法獲取TCP頭並讓內核管理TCP協議(“手動”或某些框架)?

我知道我可以使用libpcap來捕獲數據包,但這意味着我的應用程序會以某種方式從TCP套接字中的傳入數據包和來自libpcap的捕獲數據包進行匹配。 雖然這是一個可能的解決方案,但它是一個麻煩的(我不想這樣做)。

任何幫助表示贊賞,謝謝!

“快速而骯臟”的方法可能是使用兩個連接,一個到遠程主機的外部連接和一個純內部連接。 當然,這不是最有效的方法,但實施簡單(快速)(QAD“解決方案”的核心特征......):

socket ext_raw  ------- socket remote, TCP (likely, at least)
socket int_raw  ---
                   |    (loop back connection)
socket int_tcp  ---

ext_rawint_raw中的任何傳入消息都只是從一個轉發到另一個(雖然可以檢查ext_raw上的傳入消息是否有TCP頭),而所有正常的TCP處理都是由內部TCP套接字完成的。 所以在某種程度上,你將通過兩個原始套接字隧道連接TCP連接......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM