引用C++ iptables redirection forming separate packets ,我现在面临着一个极其奇特的问题。我试图将 UDP 端口 5060 上的所有传入流量重定向到端口 56790,并将所有传出流量从 5060 重定向到端口 56789。我使用了这些 iptables 规则:
iptables -t nat -I PREROUTING -p udp ! -s localhost --dport 5060 -j REDIRECT --to-port 56790
iptables -t nat -I OUTPUT -p udp ! -s localhost --sport 5060 -j REDIRECT --to-port 56789
使用 ioctl 将接口(interface)设置为 PROMISCUOUS 模式后,我使用 RAW SOCKETS 监听两个端口。
我仅在 56789(即发送端)上看到数据包,并且在 56790 上看不到任何数据包,而wireshark显示许多数据包被传送到端口 5060。
为什么会发生这种情况?有任何想法吗?您认为这是 iptables 规则的问题还是与原始套接字有关?
最佳答案
原始套接字在修改(传入)之前获取原始数据包的拷贝。传出时则相反。
关于C++ 奇怪的 RAW 套接字和 iptables 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3958066/