2010-12-20 27 views
0

我的代碼試圖手動建立一個TCP握手,然後它通過HTTP GET發送一個請求資源的數據段。我可以使用BSD原始套接字向成功接收的SYNACK發送ACK響應嗎?

我使用原始套接字來製作標題併發送數據包,並使用libpcap檢查收到的數據包標題。

SYN已成功發送給接收方,然後接收方以SYNACK回覆我。到目前爲止它工作正常,但是當我收到SYNACK時,我試着ACK它,然後發送HTTP GET接下來,這看起來不行。我可以在wireshark中看到頭文件可以正常使用。

所以我的問題是:我可以通過原始套接字ACKSYNACK就像我收到它使用相同的套接字我用來發送SYN?是否有任何要求OPTIONS與標題一起去完成?

我確認序號是SYNACK,只是在那之後我發送一個段,以便通過HTTP請求資源設置ACKPSH標誌。我可以在wireshark上看到他們,但我沒有收到服務器的迴應。

+0

如Wireshark所示,用'SYN','SYNACK'和'ACK' TCP標頭的內容更新你的問題。 – caf 2010-12-21 01:13:50

+0

有很多事情可能會出錯。我會建議比較客戶端和服務器端的數據包捕獲。可能出錯的事情列表包括錯誤的確認號(它應該是syn-ack seq number +1)tcp段的校驗和,ip包的校驗和,也可能會在您的nic卡上進行校驗和卸載,這可能會改變校驗和。 – 2013-11-16 16:52:35

回答

0

有你不能ACK使用原始套接字沒有理由,但你的操作系統的內核堆棧也將看到接收SYNACK它並不期望和發送RST。你在做什麼來防止這種情況發生?否則,也許你沒有發送正確的SEQ/ACK號碼。

+0

是的,我通過在iptables上設置規則來阻止內核完成此操作。 – kaneda 2010-12-20 19:55:55

相關問題