我正在编写一个Android应用程序,我需要与wifi网络上的计算机进行通信。所有代码都在java中,而wifi网络是ad hoc网络。为了连接,我首先为我希望从手机连接的机器发送NBNS广播名称查询。大多数情况下,这可以按预期工作(5次中约3次或4次)。有时候,名称查询失败了。在我发出名称查询的任何一种情况下,在我看到机器上的名称查询数据包之后我尝试连接(使用wireshark),我看到ARP查询看起来像...
HonHaiPr_69:a0:67广播ARP 42谁拥有192.168.1.2?告诉192.168.1.10
这是计算机上的卡,我试图连接到询问谁有我的手机地址。成功之后,我的手机尽职尽责地回复了ARP响应...
SamsungE_75:46:bb HonHaiPr_69:a0:67 ARP 42 192.168.1.2是98:0c:82:75:46:bb
一旦我的手机接听了ARP查询,我就可以继续与计算机通信。虽然我的手机似乎忽略了这些ARP查询,但名称查询失败了。我从来没有看到ARP响应和我发出的NBT查询结束时间。我已经尝试过在标准java包中可用的各种形式的数据报/套接字初始化,没有任何帮助。我已经研究过编写自己的arp响应数据包了,但是由于堆栈中ARP的位置,我需要访问原始套接字编程功能,这意味着我必须根我的手机。这对我来说是一个不可接受的解决方案,因为我希望普通的Android用户能够使用这个应用程序而无需对他们的手机或他们的wifi网络做任何特殊的事情。如果你们之前遇到过这个问题并解决了它,你能告诉我神奇的公式吗?提前感谢您提供的任何输入。
答案 0 :(得分:0)
Android似乎完全忽略了ARP查询。我的网络和其他设备上有3个Android手机和一个chromecast设备。如您所见,Android设备永远不会响应ARP查询。
root@cheetah:~# tcpdump -i wlan0 -v arp
tcpdump: listening on wlan0, link-type EN10MB (Ethernet), capture size 65535 bytes
13:17:00.378724 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has cheetah tell viper, length 28
13:17:00.378747 ARP, Ethernet (len 6), IPv4 (len 4), Reply cheetah is-at xx:xx:xx:xx:xx:xx (oui Unknown), length 28
13:17:14.969613 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has android-xxx tell viper, length 28
13:17:32.562764 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has android-yyy tell viper, length 28
13:17:32.606825 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has cheetah tell selvans-cc, length 28
13:17:32.606850 ARP, Ethernet (len 6), IPv4 (len 4), Reply cheetah is-at xx:xx:xx:xx:xx:xx (oui Unknown), length 28
13:17:45.433222 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has cheetah tell viper, length 28
13:17:45.433243 ARP, Ethernet (len 6), IPv4 (len 4), Reply cheetah is-at xx:xx:xx:xx:xx:xx (oui Unknown), length 28
13:18:06.065819 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has android-xxx tell viper, length 28
13:18:17.669232 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has viper tell cheetah, length 28
13:18:17.669716 ARP, Ethernet (len 6), IPv4 (len 4), Reply viper is-at xx:xx:xx:xx:xx:xx (oui Unknown), length 28
13:18:20.631890 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has android-yyy tell viper, length 28
13:18:51.639434 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has cheetah tell viper, length 28
13:18:51.639455 ARP, Ethernet (len 6), IPv4 (len 4), Reply cheetah is-at xx:xx:xx:xx:xx:xx (oui Unknown), length 28
13:19:02.213231 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has viper tell cheetah, length 28
13:19:02.213762 ARP, Ethernet (len 6), IPv4 (len 4), Reply viper is-at xx:xx:xx:xx:xx:xx (oui Unknown), length 28