Tcp 我是否可以使用BSD原始套接字向成功接收的SYNACK发送ACK响应?
我的代码尝试手动建立一个Tcp 我是否可以使用BSD原始套接字向成功接收的SYNACK发送ACK响应?,tcp,raw-sockets,Tcp,Raw Sockets,我的代码尝试手动建立一个TCP握手,然后通过httpget发送一个请求资源的数据段 我使用原始套接字创建报头并发送数据包,使用libpcap检查接收到的数据包报头 SYN成功发送给接收者,然后接收者回复我一个SYNACK。到目前为止,它可以工作,但是当我收到SYNACK时,我尝试ACK它,然后发送httpgetnext,这看起来不起作用。我可以在wireshark中看到标题是正常的 因此,我的问题是:我可以通过原始套接字ACK接收SYNACK,就像我使用发送SYN的相同套接字接收它一样吗?是否有
TCP
握手,然后通过httpget
发送一个请求资源的数据段
我使用原始套接字创建报头并发送数据包,使用libpcap检查接收到的数据包报头
SYN
成功发送给接收者,然后接收者回复我一个SYNACK
。到目前为止,它可以工作,但是当我收到SYNACK
时,我尝试ACK
它,然后发送httpget
next,这看起来不起作用。我可以在wireshark中看到标题是正常的
因此,我的问题是:我可以通过原始套接字ACK
接收SYNACK
,就像我使用发送SYN
的相同套接字接收它一样吗?是否有任何必需的选项
与标题一起使用以实现此目的
我正在确认
SYNACK
,然后我发送一个设置了ACK
和PSH
标志的段,以便通过HTTP
请求资源。我可以在wireshark上看到它们,但是我没有收到服务器的响应 没有理由不能使用原始套接字ACK
,但是操作系统的内核堆栈也会看到收到的SYNACK
,这是它不希望看到的,并发送一个RST
。你在做什么来防止这种情况发生?否则,可能您没有发送正确的SEQ/ACK编号。是的,我通过在iptables上设置规则来阻止内核执行此操作。请使用Wireshark中显示的SYN
、SYNACK
和ACK
TCP头的内容更新您的问题。可能会出现很多问题。我建议比较客户端和服务器端的数据包捕获。可能出错的事项列表包括tcp段的错误ack编号(应为syn ack seq number+1)校验和、ip数据包的校验和,并且nic卡上可能存在校验和卸载,这可能会更改校验和。