我安装了一个FreeBSD 10.0服务器(IP:10.1.2.3),并且希望使用假源ip将数据包发送到远程客户端,例如:
socket_sendto($socket $data, $length, 0, $ip, $port)
$ data包含IP标头,其中我指定了我的"假ip"这里。
问题是:
如果我指定IP到C类,一切顺利(低于成功):
10.1.2.4
10.1.3.5
如果我指定IP到B或A类,则没有任何内容发送到目的地(下面失败):
10.2.1.2
11.1.2.3
那么,我该如何解决这个问题呢?
顺便说一句,我已经将sysctl.conf修改为:
net.inet.ip.forwarding=1
net.inet6.ip6.forwarding=1
net.inet.ip.fastforwarding=1
抱歉英语不好。
答案 0 :(得分:0)
可能与路由(netmasks)有关。如果您的服务器IP是10.1.2.3/16,则所有IP地址(如10.1.X.Y)都可以直接访问,但如果您尝试发送到此范围之外的IP地址,则IP数据包将通过路由器传输。正确配置的路由器不应该传递这样的伪包。您应该检查defaultrouter
中的/etc/rc.conf
设置。这个defaultrouter 可以接收这样的假数据包,除非你的FreeBSD机器阻止它们。
答案 1 :(得分:0)
@Kestas是对的,请尝试下面的命令:
1)验证您是否有到目的地的路线;
# netstat -ln
2)测试连接性:
# tracepath 10.2.1.2
3)穿上相同的网络:
# ifconfig re0 10.2.1.1 / 255.0.0.0
GL!