在C中使用pcap_sendpacket ,我手动发送以下数据包在wlan0 (我已经省略了一些字段,但我认为他们是正确的):
(Ethernet layer) eth src: <wlan0 MAC address> eth dest: <wireless router MAC address> (ARP request layer) opcode: 1 (Request) sender_hw: <wlan0 MAC address> sender_proto: 192.168.1.3 (IP of wlan0) target_hw: 0 (per usual) target_proto: 173.194.46.72 (Google.com)
使用Wireshark来监听wlan0 ,我希望看到一个ARP答复给我一个Google服务器的MAC地址。 但是,我没有看到任何包含Google IP的ARP答复。
有一点需要注意的是,我正在通过截获发送给虚拟networking接口的ARP请求(在我使用虚拟networking空间内的ping命令时生成数据包)来构build这个数据包,然后重写数据包并使用wlan0注入pcap ,以便我可以稍后获得ARP答复并将其转发回虚拟networking。 这就是为什么我相对有信心,包中的其他领域是正确的,因为我真的没有修改它们。
有谁知道这里可能是什么问题? 我注意到的一件事是,我没有我的路由器的IP地址(192.168.1.1)在该数据包的任何地方; 不确定我是否需要这个。
你没有得到一个ARP答复,因为在你的广播域 [1](又名:你的本地[W]局域网段)有_NOT_主机的IP地址是你正在ARP的(173.194.46.72 )。
为了更加详细,让我补充一点:
ARP是第二层协议[2],正如Zoredache已经提到的那样:“ … ARP不通过路由器… ”。 ARP请求通过“广播”以太网帧发送。 这就是为什么它不能跨越本地…广播域;
即使是艰难的,你也可以确实地ARP请求任何你喜欢的IP(谷歌的173.194.46.72包括),你是没有收到任何ARP答复(除非“…谷歌在你的局域网上…”,如上所述在上面的M.Hampton评论中),因为在这种情况下:
不幸的是,我不清楚,这正是你要解决的问题。 无论如何,你可能会发现有用的简要调查:
“ 免费ARP ”[3],它遵循与您正在testing的公共ARP-Request => Arp-Reply相反的模式;
“ ARP欺骗/中毒 ”[4],关于你可能遭受的“ 拒绝服务 ”/“ 中间人 ”/“ 会话劫持 ”
“ ARPing ”[5],作为发送ARP请求和检查ARP应答的一种非常简单的方式。 这在其他情况下非常有用:
即使在远程主机上configuration了IP防火墙时,也要testingnetworking连接(对于连接到本地networking的主机)(换句话说,即使在Windows防火墙处于活动状态时,也可以对本地连接的Windows主机进行ARP Ping操作)。
获取有问题的主机的MAC地址,当这些主机configuration了相同的IP地址时(您将发送一个 ARP请求并获得多路 ARP答复);
“ Ettercap ”[6],“ 一个针对中间人攻击的综合套件,包括嗅探实时连接,dynamic内容过滤以及许多其他有趣的技巧,支持许多协议的主动和被动分离,包括networking和主机分析的许多function… “
[1] http://en.wikipedia.org/wiki/Broadcast_domain
[2] http://en.wikipedia.org/wiki/Address_Resolution_Protocol
[3] http://en.wikipedia.org/wiki/Address_Resolution_Protocol#ARP_announcements
[4] http://en.wikipedia.org/wiki/ARP_spoofing
谷歌不在你的networking,所以你不能得到答案。
您必须使用DNS从地址获取IP,并且您可以对其进行ping操作。