【发布时间】:2015-06-30 21:00:55
【问题描述】:
我正在尝试显示连接到当前 wifi 网络的所有设备的列表。
我面临的问题是,当我在 Java 上尝试以下代码(使用 DNS 查找)时,我看到了几个设备。 (这很好);但它不适用于我的安卓设备或模拟器。
有谁知道我做错了什么?我正在开发一个连接到 WiFi 的 Lolipop 电话。找到的唯一 IP 地址是本地主机。
byte[] ip = localhost.getAddress();
for (int i = 0; i <= 254; i++)
{
ip[3] = (byte)i;
InetAddress address = InetAddress.getByAddress(ip);
if (!address.getHostAddress().equals(address.getHostName() ) )
{
// machine is known in a DNS lookup
AvailableHostList.add(address);
}
else
{
}
【问题讨论】:
-
要记住的一点是,在某些运营商(例如 Verizon)上,无线智能手机仅使用 IPv6(每个子网有超过 18 个 quintillion 地址)。我不相信任何运营商会让您发现网络上的其他设备,因为这是安全漏洞。我不确定他们如何处理 Wi-Fi,但我怀疑您是否可以在运营商的网络上执行此操作。
-
对,我正在尝试在 Wi-Fi 上执行此操作(而不是在运营商网络上)。还有其他应用程序可以执行此操作,所以我知道这是可能的。
-
好的。还要记住,IPv4 子网可以有可变数量的地址,而 IPv6 子网有如此之大的数量,以至于您需要数千年的时间才能通过蛮力检查它们。您应该检查 IPv4 中的子网大小以便您可以尝试检查,但我看到人们使用 10.0.0.0/8 这是不切实际的,并且商业 Wi-Fi 会阻止您检查子网上的任何其他地址。
-
但是那样的话,在Java中不是不行吗?
-
它是否有效取决于环境。 IPv4 的家庭 Wi-Fi 可能非常简单,除非它配置了一个大型子网。 IPv6 应该使用一些协议来发现邻居而不是暴力方法。即使在家庭 Wi-Fi 上,尤其是在商业网络上,您也可能无法发现任何邻居,因为一切都必须通过路由器,而路由器可能会欺骗您。这不是看起来那么简单的问题。在大多数基本配置的家庭 Wi-Fi 上工作的东西可能不适用于正确的 Wi-Fi 实施。
标签: android networking wifi ip-address hostname