我的应用程序需要接收来自多个目的端口的UDP数据包(这是一位诚实的应用程序,而不是一个嗅探器)。因此,我选择使用PF_PACKET套接字并在应用程序级别进行端口过滤。PF_PACKET插座和“端口不可达”的ICMP消息
下面是如何创建套接字:
INT g_rawSocket =插座(PF_PACKET,SOCK_RAW,htons(ETH_P_ALL));
我正确地收到UDP报文。但是,运行该应用程序的内核正在向正在向我的应用程序发送数据包的远程设备发送“Destination unreachable”类型和“Port unreachable”代码的ICMP数据包。我想这是因为我没有将端口号绑定到套接字。但是,我想知道是否适合使用绑定与PF_PACKET套接字,特别是因为我需要将多个端口绑定到它,我想这是不可能的。
任何意见吗?
另外,您可以用iptables阻止ICMP回复,例如'iptables -I OUTPUT -p icmp -icmp-type destination-unreachable -j DROP' – wick