作者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