2

我正在寻找一个简单的服务器来代理我的网络网关处的 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。

我有什么明显的遗漏吗?或者有人对我应该如何开始调试问题有任何建议吗?

4

1 回答 1

0

这取决于您如何更改数据包。你用iptables NAT改变IP地址和端口号?

在您的情况下,客户端丢弃数据包是因为它认为这不是正确的数据包,即使 ip、端口、ACK 是正确的。

于 2014-01-03T02:54:57.870 回答