【发布时间】:2012-10-23 14:08:43
【问题描述】:
我的应用程序需要从多个目标端口接收 UDP 数据包(这是一个真正的应用程序,而不是嗅探器)。因此,我选择使用 PF_PACKET 套接字并在应用程序级别进行端口过滤。
这是我创建套接字的方法:
int g_rawSocket = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
我正在正确接收 UDP 数据包。但是,运行应用程序的内核正在向正在向我的应用程序发送数据包的远程设备发送类型为“无法访问目标”和代码“无法访问端口”的 ICMP 数据包。我猜这是因为我没有将端口号绑定到套接字。但是,我想知道将绑定与 PF_PACKET 套接字一起使用是否合适,尤其是当我需要绑定多个端口时,我想这是不可能的。
请问有cmets吗?
【问题讨论】:
-
另外,您可以使用 iptables 阻止 ICMP 回复,例如
iptables -I OUTPUT -p icmp --icmp-type destination-unreachable -j DROP