我正在使用单个原始套接字从具有 1024 个端口的本地测试网络读取 UDP 数据包。每个 UDP src 和 dest 端口都是唯一的,我需要访问 IP 和 UDP 标头字段。我可以在 linux-rt 内核中以 100 mbps 的速度流式传输和处理数据(输入和输出),抖动非常低 < 250 微秒,标称 10 微秒。
我想防止内核将 ICMP 端口不可达错误发回发送主机,但是,由于资源限制,我不想创建 1024 个普通 UDP 套接字并绑定到每个套接字。目前,我正在使用 iptables 删除出站端口不可达消息。有谁知道一种方法(使用 C 代码编程)来防止 ICMP 无法访问的流量?也许是 IOCTL 或套接字选项?我也尝试更改 /proc/sys/net/ipv4/icmp_ratelimit 但这似乎没有效果。默认情况下,ratemask 是为 dest unreachables 设置的,并且各种 ratelimit 值并没有改变我可以看到的任何行为。