[問題] ARP request 問題

看板LinuxDev作者 (AZ)時間15年前 (2010/07/29 02:55), 編輯推噓2(204)
留言6則, 2人參與, 最新討論串1/1
請問一下: 因為我要查某一個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)

07/29 09:00, , 1F
看不出arp_force有什麼特別的地方...@@
07/29 09:00, 1F

07/29 12:34, , 2F
看起來他是隨便傳一個封包,kernel要得到MAC就會自己傳
07/29 12:34, 2F

07/29 12:35, , 3F
arp request
07/29 12:35, 3F

08/04 01:40, , 4F
找到原因了,linux預設不接受unsolicited arp reply
08/04 01:40, 4F

08/04 01:41, , 5F
可以改/proc/sys/net/ipv4/conf/*/arp_accept 來變更預設
08/04 01:41, 5F

08/04 01:42, , 6F
不過我後來是改用pcap自己抓arp reply 就沒問題了
08/04 01:42, 6F
文章代碼(AID): #1CK7qup_ (LinuxDev)
文章代碼(AID): #1CK7qup_ (LinuxDev)