繁体   English   中英

如何避免将多个原始套接字绑定到相同的IP地址?

[英]How can i avoid mulitple raw socket bind to the same ip address?

实际上,如果我用相同的IP地址创建多个RAW套接字。 我可以绑定所有它们,因此所有套接字都接收到数据包。

有什么办法可以避免,以便其他试图绑定同一IP地址的进程收到错误消息?

我正在使用原始套接字

#include <sys/socket.h>
#include <netinet/in.h>
raw_socket = socket(AF_INET, SOCK_RAW, int protocol);

在手册页中原始(7)

可以使用bind(2)调用将原始套接字绑定到特定的本地地址。 如果未绑定,则将接收具有指定IP协议的所有数据包。 另外,可以使用SO_BINDTODEVICE将RAW套接字绑定到特定的网络设备。 参见套接字(7)。

您不能将原始套接字绑定到特定端口,因为“端口”是TCP和UDP中的概念,而不是IP中的概念。 随便看看这三个协议的标题图,它应该变得很明显:我在较低级别上工作,其中端口的概念未知。 这是我了解的端口号。

不会。仅凭其RAW事实意味着,除RAW Internet协议外,没有其他协议。 如果没有TCP或UDP,将不会有任何端口来区分此数据包发送到哪个应用程序,因此,所有内容都必须通过IP数据包的有效负载进行过滤。 您必须手动执行此操作。 最好的方法是制作一个程序,将程序检查后将这些数据包转发到您想去的任何地方。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM