实际上,如果我创建多个具有相同IP地址的原始套接字。我可以绑定所有这些套接字,因此所有套接字都会接收到数据包。
是否有任何可以避免的方法,使试图绑定相同ip地址的其他进程收到错误?
我使用的是原始套接字
#include <sys/socket.h>
#include <netinet/in.h>
raw_socket = socket(AF_INET, SOCK_RAW, int protocol);原版(7)
可以使用bind(2)调用将原始套接字绑定到特定的本地地址。如果没有绑定,则接收所有具有指定IP协议的数据包。此外,可以使用SO_BINDTODEVICE将原始套接字绑定到特定的网络设备;请参见套接字(7)。
不能将原始套接字绑定到特定端口,因为“端口”是TCP和UDP中的概念,而不是IP。在这三种协议的头图上打喷嚏,这会变得很明显:我是在一个较低的层次上工作,而端口的概念是未知的。这就是我对端口号的理解。
发布于 2013-08-08 14:09:35
不是的。仅仅是它的原始意味着除了原始的Internet协议之外没有其他协议。如果没有TCP或UDP,就不会有任何端口来区分该数据包被发送到哪个应用程序,因此,所有内容都必须通过IP数据包的有效负载进行过滤。你必须手动完成。最好的方法是制作一个程序,在检查后将这些数据包转发到任何您想要它去的地方。
https://stackoverflow.com/questions/18128167
复制相似问题