【问题标题】:why recvfrom() function can receive all of traffic为什么 recvfrom() 函数可以接收所有流量
【发布时间】:2020-06-05 02:02:33
【问题描述】:

我用 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】:

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

    来自raw(7) man page

    原始套接字可以使用 bind(2) 打电话。如果未绑定,则所有具有指定 IP 的数据包 收到协议

    【讨论】:

      猜你喜欢
      • 2021-12-18
      • 2012-09-06
      • 1970-01-01
      • 1970-01-01
      • 2018-07-01
      • 1970-01-01
      • 2011-05-18
      • 2014-05-04
      • 1970-01-01
      相关资源
      最近更新 更多