C++ 奇怪的 RAW 套接字和 iptables 问题

标签 c++ linux sockets udp iptables

引用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/

相关文章:

c - 在c中使用udp进行可靠的数据传输

python - Python 中类的单个实例

c - 读取 C 中文件传输的可执行文件的字符

c++ - 删除 c++ 练习

c++ - 为什么尽管我的函数和 cout 语句放置错误,我的程序仍能运行?

c++ - 使用 winsock 的 p2p 通信

android - FFmpeg 安卓构建

c - 请帮忙编译这个程序

linux - 究竟有什么可以允许单击 Web 浏览器中的链接以物理方式重新启动 Linux 系统?

c++ - C++检查命令行参数