我正在尝试从大量的UDP端口(10k)中读取,但我想这样做而不创建10k套接字并监听它们(并使用epoll
)。一种解决方案是使用iptables和写规则将数据包转发到服务器正在侦听的单个端口。但是,我必须能够在代码中读取原始目标端口。
有人知道是否有可能这样做?
答案 0 :(得分:1)
您可以使用网络隧道接口(tun)执行此操作。如果您使用iptables转发到您的tun设备,那么您的程序可以从那里读取数据包。 (您可能需要自己解释IP标头,可能使用像libtins这样的库。)
这里有一个不错的教程:http://backreference.org/2010/03/26/tuntap-interface-tutorial/
答案 1 :(得分:0)
' recvfrom的'可以获取远程sockaddr,然后使用inet_ntop和ntohs来获取ip和端口。