实际上,如果我创建多个具有相同IP地址的RAW套接字。我可以绑定所有这些,因此所有套接字都会收到数据包。
有没有办法可以避免,这样试图绑定同一个IP地址的其他进程会收到错误?
我正在使用原始套接字
#include <sys/socket.h>
#include <netinet/in.h>
raw_socket = socket(AF_INET, SOCK_RAW, int protocol);
在Man Page raw(7)
可以使用以下命令将原始套接字绑定到特定的本地地址 bind(2)调用。如果未绑定具有指定IP的所有数据包 收到协议。另外,RAW套接字可以绑定到a 使用SO_BINDTODEVICE的特定网络设备;见socket(7)。
您无法将原始套接字绑定到特定端口,因为“端口”是TCP和UDP中的概念,而不是IP。稍微了解这三个协议的标题图,它应该变得显而易见:我在较低级别工作,其中端口的概念未知。这是我对端口号的理解。
答案 0 :(得分:0)
没有。事实上,它的RAW意味着除了RAW互联网协议之外没有其他协议。如果没有TCP或UDP,就不会有任何端口来区分此数据包发送到哪个应用程序,因此,所有内容都必须通过IP数据包的有效负载进行过滤。您必须手动执行此操作。最好的方法是制作一个程序,在检查后将这些数据包转发到您想要的任何地方。