xiaoseha 2017-04-10 09:43 采纳率: 100%
浏览 3594
已采纳

用raw socket 发送和接收arp包问题(已快疯,全部C币了,求帮忙!)

问题背景:假设本机ip设为172.29.26.1。自己这有一个cpu,内存到外设的软件仿真环境,有基本的网卡功能,上面跑一个elf格式linux内核。将该仿真环境运行在本地机器上,仿真环境中运行linux内核,给linux内核设定网卡的ip地址为172.29.26.200,mac自定。发现26.200发送arp给本机,本机不回应;本机发送arp给26.200,26.200有arp应答但是本机不更新arp缓存表导致ping不通。

遂写两个小程序测试,发现具体:
比如源ip:172.29.26.200,目的ip(本机ip地址):172.29.26.1
用raw socket写arp发送和接收的程序,通过本地网卡发送arp包给本机ip地址。
接收的程序通过recv()接收不到本地的arp回应。

另一个程序源ip为本机ip地址:172.29.26.1,目的ip:172.29.26.200(本机运行着上面提到的elf格式linux内核)

用raw socket写arp发送和接收的程序,通过本地网卡发送arp包给26.200。
接收的程序通过recv()确实接收到26.200的arp应答包,tcpdump也收到了,但是本地linux并没有更新arp缓存表,仿佛给过滤掉了。

能跟发送和接收arp包都是通过本地网卡有关系么?哪位大牛能帮忙解释下原因?为什么本机都收到arp应答包了仍然获取不到26.200的mac地址?
  • 写回答

5条回答 默认 最新

  • xiaoseha 2017-06-01 03:26
    关注

    The created ARP request passed to network driver and sent to physical layer. Network driver handles the packet as outgoing packet it is just send. A switch or whatever device at the other end of the wire does not forward the ARP request back to the interface where it was received.

    So local OS never receives the ARP request and it cannot respond. tcpdump catches and shows the outgoing ARP request. There is no incoming one.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥30 Matlab打开默认名称带有/的光谱数据
  • ¥50 easyExcel模板 动态单元格合并列
  • ¥15 res.rows如何取值使用
  • ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
  • ¥15 CSP算法实现EEG特征提取,哪一步错了?
  • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
  • ¥15 vue3前端取消收藏的不会引用collectId
  • ¥15 delphi7 HMAC_SHA256方式加密
  • ¥15 关于#qt#的问题:我想实现qcustomplot完成坐标轴
  • ¥15 下列c语言代码为何输出了多余的空格