欺骗TCP服务器握手失败

时间:2013-05-09 16:54:26

标签: linux networking tcp netfilter

我希望构建一个简单的服务器来代理我网络网关的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。

有什么东西显而易见我错过了吗?或者有没有人对如何开始调试问题有任何建议?

1 个答案:

答案 0 :(得分:0)

这取决于您更改数据包的方式。您使用iptables NAT来更改IP地址和端口号?

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