Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 忽略原始套接字发送的ARP应答_C_Linux_Sockets_Networking - Fatal编程技术网

C 忽略原始套接字发送的ARP应答

C 忽略原始套接字发送的ARP应答,c,linux,sockets,networking,C,Linux,Sockets,Networking,我试图通过响应网络接口上的ARP请求向ubuntu中的ARP表添加一个条目 我用原始套接字捕获ARP请求,然后生成ARP应答并在同一接口上发送。我可以在wireshark中看到我的ARP回复,但它被忽略,ARP表中没有添加ARP条目,只发送了另一个相同的ARP请求。当我重新打开wifi,路由器实际响应时,它立即被接受 下面是我如何设置插槽sll的: struct sockaddr_ll sll; sll.sll_family = PF_PACKET; sll.sll_ifindex = ifr.

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

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

下面是我如何设置插槽sll的:

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];
struct sockaddr\u ll sll;
sll.sll_family=PF_数据包;
sll.sll_ifindex=ifr.ifr_ifindex;
sll.sll_协议=HTON(ETH_P_ALL);
对于(int i=0;i
可能是某些linux设置禁止处理从同一台pc或类似设备发送的数据包吗


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

您能提供ARP帧的全部内容(req和响应)吗?您可以将它们作为文本导出到文件中。谢谢您的回复,我已经用ARP帧内容编辑了我的问题。您是否在同一台机器上生成和接收帧?是的,我实际上正在尝试做的是某种“虚拟服务器”,这可以与网络接口上的其他应用程序交互。例如:在没有实际internet/network连接的情况下,使用浏览器加载某些网页。此“虚拟服务器”应响应所有生成的请求(ARP、DNS、TCPSYN、HTTP…)这样浏览器就认为他从网络上获取数据。实际上,我已经用
ARP-d192.168.1.1
故意从ARP表中删除了这个ARP条目,然后它自己发送请求,我只用上面提到的应用程序回复。但是,我可以理解你关于内核不在传出流量中寻找答案的观点。有没有办法强迫他这么做?或者在传入流量关闭时向接口发送数据包,您实际上已经指出了我的问题所在。谢谢
sendto(sockfd, ARPreply, 60, 0, (struct sockaddr*)&packet_info , sizeof(struct sockaddr_ll)) < 0)