作者AzHuang (AZ)
看板LinuxDev
标题[问题] ARP request 问题
时间Thu Jul 29 02:55:50 2010
请问一下:
因为我要查某一个IP之MAC
所以利用libnet_bulid_arp来建立arp封包: ARPOP_REQUEST(0x01)
接着我用ioctl的SIOCGARP来取得MAC
可是奇怪的是,我用SIOCGARP都查不到ARP,arp -n也看不到
可是用wireshark看可以看到已经有回覆了(ARPOP_REPLY(0x02))
而且因为我找不到ARP又送3次封包,也都有回覆。
我另外找到了别人的code,他说要force linux to arp,他就不用libnet来送ARP request
int arp_force(in_addr_t dst)
{
struct sockaddr_in sin;
int i, fd;
if ((fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
return (0);
memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = dst;
sin.sin_port = htons(67);
i = sendto(fd, NULL, 0, 0, (struct sockaddr *)&sin, sizeof(sin));
close(fd);
return (i == 0);
}
这样是可以成功没错,可是我想知道为什麽会这样呢?
明明要收到ARP REPLY的帮包啊
感谢看完这麽长的问题。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.251.120
※ 编辑: AzHuang 来自: 140.112.251.120 (07/29 03:00)
1F:推 alongalone:看不出arp_force有什麽特别的地方...@@ 07/29 09:00
2F:推 aitjcize:看起来他是随便传一个封包,kernel要得到MAC就会自己传 07/29 12:34
3F:→ aitjcize:arp request 07/29 12:35
4F:→ aitjcize:找到原因了,linux预设不接受unsolicited arp reply 08/04 01:40
5F:→ aitjcize:可以改/proc/sys/net/ipv4/conf/*/arp_accept 来变更预设 08/04 01:41
6F:→ aitjcize:不过我後来是改用pcap自己抓arp reply 就没问题了 08/04 01:42