看板 LinuxDev 關於我們 聯絡資訊
請問一下: 因為我要查某一個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)
alongalone:看不出arp_force有什麼特別的地方...@@ 07/29 09:00
aitjcize:看起來他是隨便傳一個封包,kernel要得到MAC就會自己傳 07/29 12:34
aitjcize:arp request 07/29 12:35
aitjcize:找到原因了,linux預設不接受unsolicited arp reply 08/04 01:40
aitjcize:可以改/proc/sys/net/ipv4/conf/*/arp_accept 來變更預設 08/04 01:41
aitjcize:不過我後來是改用pcap自己抓arp reply 就沒問題了 08/04 01:42