为什么recvfrom()函数可以接收所有流量

问题描述 投票:0回答:1

我用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中的所有软件包吗?

icmp
1个回答
0
投票

这与recvfrom系统调用无关,与您创建的套接字类型无关。

raw(7) man page

原始套接字可以通过以下方式绑定到特定的本地地址:raw(7)通话。如果未绑定,则所有具有指定IP的数据包收到协议

© www.soinside.com 2019 - 2024. All rights reserved.