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

用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条)

相关推荐 更多相似问题