我用C写了一个ICMP ping代码,我用socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)
创建了一个套接字我将其绑定为:bind(sendSock, (struct sockaddr *)&addr, sizeof(addr))
,在调用sendto()
函数之后,我调用了recvfrom()
函数以接收ICMP答复,但是我发现我不仅可以接收之前发送的destIP,还可以接收所有包。
为什么recvfrom()这样的行为?我是一名Java程序员,我知道Java套接字只能接收使用特定IP发送的程序包。
难道任何套接字都可以接收C中的所有软件包吗?
这与recvfrom
系统调用无关,与您创建的套接字类型无关。
原始套接字可以通过以下方式绑定到特定的本地地址:
raw(7)
通话。如果未绑定,则所有具有指定IP的数据包收到协议