在 Libpcap 写了个简陋的 nat 程序,从 10.101.116 网段转发到 192.168.1 网段,成功转发 SYN 后,服务器 ACK,之后就被 192.168.1 网段 reset 了,导致连接中断,请问有什么方法可以避免或者解决的吗?
抓包如图 http://gkrg1b.qiniudn.com/QQ%E6%88%AA%E5%9B%BE20171209122513.png
1
choury 2017-12-09 13:01:50 +08:00 via Android
checksum 没算对?
|
3
choury 2017-12-09 13:11:54 +08:00 via Android
拦截了正常那这个 rst 的是伪造的吧
|
4
extreme 2017-12-09 13:14:43 +08:00
看了下抓包。
是 SNAT 到 192.168.1.100 对吧? 不知道你的 NAT 程序是如何实现与 125.88.59.149 通讯的?是和 125.88.59.149 之间另外 open 一个 TCP Socket,还是直接用 raw socket 发出去的? |
5
cz5424 OP @extreme 这是在 192.168 网段抓的包,是正确的,nat 主要手动转发所有的 10.101 的包到 192.168 网段,并且改了 ip 和 mac,也重新计算了 checksum
|
6
extreme 2017-12-09 13:24:23 +08:00
照你那样说,你的 NAT 程序和 125.88.59.149 之间没有另外建立 TCP Socket,你只是改了 Source IP 和 Source MAC,用 Raw Socket 发出去对吧。
这样的话,对于你运行 NAT 程序的系统内核来说,并没有对 125.88.59.149 开放一个通讯 TCP 的端口,所以就会给 125.88.59.149 回应 RESET。 你这样实现 NAT,的确要按需 Block 掉 RESET。 |