我的应用程序需要从多个目标端口接收 UDP 数据包(这是一个真正的应用程序,而不是嗅探器)。因此,我选择使用 PF_PACKET 套接字并在应用程序级别进行端口过滤。
这是我创建套接字的方法:
int g_rawSocket = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
我正确接收UDP数据包。但是,运行应用程序的内核正在向正在向我的应用程序发送数据包的远程设备发送类型为“无法访问目标”和代码“无法访问端口”的 ICMP 数据包。我猜这是因为我没有将端口号绑定到套接字。但是,我想知道将绑定与 PF_PACKET 套接字一起使用是否合适,特别是因为我需要将多个端口绑定到它,我想这是不可能的。
请问有什么意见吗?