我正在寻找一个简单的服务器来代理我的网络网关处的 TCP 连接(无恶意),但 TCP 握手失败。
使用 netfilter,我设法更改了传入 TCP 数据包的 IP 和端口,以便将它们转移到我的应用程序,并在返回的途中将它们更改回原始数据以及更新所有校验和。
我的服务器当前正在发回 SYN-ACK,它会到达预期的主机,但永远不会生成 ACK。根据wireshark的说法,数据包格式正确,校验和没有问题,SYN和ACK值似乎匹配。
这是 TCP 转储输出
没有我的代理成功握手
16:21:08.887938 IP 192.168.1.1.37513 > 192.168.2.56.12105: Flags [S], seq 4201716329, win 14000, options [mss 1400,sackOK,TS val 727682 ecr 0,nop,wscale 2], length 0
16:21:08.889870 IP 192.168.2.56.12105 > 192.168.1.1.37513: Flags [S.], seq 34328406, ack 4201716330, win 14480, options [mss 1460,sackOK,TS val 1879286956 ecr 727682,nop,wscale 5], length 0
16:21:08.891751 IP 192.168.1.1.37513 > 192.168.2.56.12105: Flags [.], ack 1, win 3500, options [nop,nop,TS val 727683 ecr 1879286956], length 0
与我的代理握手失败
16:21:49.767611 IP 192.168.1.1.37514 > 192.168.2.56.12105: Flags [S], seq 2057472079, win 14000, options [mss 1400,sackOK,TS val 731770 ecr 0,nop,wscale 2], length 0
16:21:49.768522 IP 192.168.2.56.12105 > 192.168.1.1.37514: Flags [S.], seq 1201001621, ack 2057472080, win 14480, options [mss 1460,sackOK,TS val 7621570 ecr 731770,nop,wscale 4], length 0
在此之后,客户端和服务器只需重新发送 ack/syn-ack。
我有什么明显的遗漏吗?或者有人对我应该如何开始调试问题有任何建议吗?