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

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

报告相同问题?

悬赏问题

  • ¥15 Protege 中的Entities下面的界面删除了如何复原
  • ¥15 scrapy爬虫求帮
  • ¥15 imageEnView绘图问题
  • ¥15 关于#python#的问题:您好可以加您一下联系方式吗,在复现的时候确实有点问题难以解决
  • ¥15 联想电脑重装系统时无法发现硬盘
  • ¥15 MATLAB与UR10e实体机械臂建立通讯
  • ¥15 c++题需要快一点不用opencv
  • ¥15 关于#java#的问题:想要咨询Flowable流程引擎框架的问题
  • ¥15 vscode里面怎么用plaformio强调串口啊
  • ¥20 针对计算后数据做一致性检验可以用Bland Altman法吗