1

我正在编写一个 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 位于堆栈中的位置,我需要访问原始套接字编程功能,这意味着我必须 root 我的手机。这对我来说是一个不可接受的解决方案,因为我希望普通的 android 用户能够使用这个应用程序,而不必对他们的手机或他们的 wifi 网络做任何特殊的事情。如果你们中的任何人以前遇到过这个问题并解决了它,你能告诉我神奇的公式吗?提前感谢您提供的任何意见。

4

1 回答 1

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
于 2013-12-14T19:42:40.600 回答