这是一个关于linux c编程原始套接字的快速问题。如果我只想侦听具有原始套接字的任何接口,我是否必须真正绑定到ip地址或接口才能侦听流量?据我所知,我觉得我应该能够只调用sock();,然后开始recvfrom()流量。也许我错了,但我见过一些不使用它的程序。
发布于 2012-10-26 15:29:39
您是对的,您唯一需要做的就是调用socket(),然后调用recvfrom()。不过,请注意,使用SOCK_RAW进行侦听存在一些限制。
如果您不是在“发送并忘记”的基础上使用原始套接字,那么您将有兴趣读取原始数据包的回复数据包。关于分组是否将被递送到原始套接字的判定逻辑可以这样枚举:
ICMP TCP和UDP数据包从不传送到原始套接字,它们始终由内核协议堆栈处理。
您正在处理的协议将应答包传递到您的原始套接字,这并不一定意味着您将获得应答包。为此,您可能还需要考虑:
有关更多详细信息,请阅读this。
发布于 2012-10-26 14:44:13
如果您打算捕获接口上的流量,则可以使用libpcap。
https://stackoverflow.com/questions/13082023
复制相似问题