android 设备忽略 ARP 查询

问题描述 投票:0回答:2

我正在编写一个 Android 应用程序,我需要在 Wi-Fi 网络上与计算机进行通信。所有代码都是用java编写的,wifi网络是一个ad hoc网络。为了进行连接,我首先向我希望从手机连接的机器发送 NBNS 广播名称查询。大多数情况下,这会按预期工作(大约五分之三或四)。但有时,名称查询会失败。无论哪种情况,当我发送名称查询时,在我尝试连接的计算机上看到名称查询数据包(使用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 网络做任何特殊的事情。如果你们中的任何人以前遇到过这个问题并解决了它,请让我知道神奇的公式吗?预先感谢您提供的任何意见。

java android arp
2个回答
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

0
投票

我发现并调查了我的 Samsung Galaxy S23 Ultra (Android 14) 上的一个相当严重的 ARP 问题。

ARP 实现忽略子网掩码并假设所有网络均为 /24。 需要明确的是,这比这更荒谬。 据我所知,ARP 假定 IPv4 地址中的第三个数字为零。 这令人难以置信。 大多数用户不会注意到这一点,但我们中的一些人更喜欢较大子网的奢侈,这会导致混乱。

我向 Google 提交了一个错误,谷歌已将其标记为 Sev/Pri 2,这是相当严重的。

https://issuetracker.google.com/issues/378932944

© www.soinside.com 2019 - 2024. All rights reserved.