2010-12-20 63 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

相关问题