gpt4 book ai didi

c - 原始套接字发送的 ARP 回复被忽略

转载 作者:行者123 更新时间:2023-11-30 17:34:35 25 4
gpt4 key购买 nike

我试图通过响应网络接口(interface)上的 ARP 请求来向 ubuntu 中的 ARP 表添加一个条目。

我正在使用原始套接字捕获 ARP 请求,然后生成 ARP 回复并在同一接口(interface)上发送它。我可以在wireshark中看到我的ARP回复,但它被忽略,并且没有ARP条目添加到ARP表中,只是发送了另一个相同的ARP请求。 Here is capture from wireshark.当我重新打开 wifi 并且路由器实际响应时,它会立即被接受。

这是我设置套接字的方法:

struct sockaddr_ll sll;
sll.sll_family = PF_PACKET;
sll.sll_ifindex = ifr.ifr_ifindex;
sll.sll_protocol = htons(ETH_P_ALL);
for(int i=0;i<6;i++)
sll.sll_addr[i] = targetMAC[i];

以及我如何发送数据包:

sendto(sockfd, ARPreply, 60, 0, (struct sockaddr*)&packet_info , sizeof(struct sockaddr_ll)) < 0)

我真的不知道出了什么问题。我知道它应该有效,因为我在 Windows 上做了类似的事情(使用 sparppcap)。我尝试弄乱 sll 设置,但正如我所看到的,数据包实际上已发送到网络接口(interface),我认为问题可能出在其他地方。难道是某些linux设置禁止处理从同一台电脑或类似的东西发送的数据包?

感谢您的任何想法

梦想

编辑1:根据要求,ARP frames content (因为不是很长,所以我把它们放在一张图片中)我生成的回​​复与路由器生成的回复之间的唯一区别是源 MAC 地址。

最佳答案

Could it be that some linux settings prohibit handling packets send from the same pc or something like that

简而言之,是的。内核已经知道其所有本地接口(interface)的 MAC 地址、IP 地址等。对于内核来说,在传出流量中寻找 ARP 请求的答案是没有意义的。

关于c - 原始套接字发送的 ARP 回复被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23275139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com