从Android查找IP地址
我正在尝试显示连接到当前wifi网络的所有设备的列表 我面临的问题是,当我在Java上使用DNS查找尝试下面的代码时,我看到了几个设备。这是好的;但它在我的android设备或模拟器上不起作用 有人知道我做错了什么吗?我正在开发一款连接到WiFi的Lolipop手机。找到的唯一IP地址是本地主机从Android查找IP地址,android,networking,wifi,ip-address,hostname,Android,Networking,Wifi,Ip Address,Hostname,我正在尝试显示连接到当前wifi网络的所有设备的列表 我面临的问题是,当我在Java上使用DNS查找尝试下面的代码时,我看到了几个设备。这是好的;但它在我的android设备或模拟器上不起作用 有人知道我做错了什么吗?我正在开发一款连接到WiFi的Lolipop手机。找到的唯一IP地址是本地主机 byte[] ip = localhost.getAddress(); for (int i = 0; i <= 254; i++)
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
{
}
好了,我终于让这个工作开始了。 问题是我无法正确获取IP地址。所以我首先找到了我的本地IP。。下面
for (NetworkInterface intf : Collections.list(NetworkInterface.getNetworkInterfaces()))
{
for (InetAddress addr : Collections.list(intf.getInetAddresses()))
{
if (!addr.isLoopbackAddress())
{
int ipAddress = 0;
ipAddress = wifiInfo.getIpAddress();
ip = "IP: " + String.format("%d.%d.%d.%d", (ipAddress & 0xff),(ipAddress >> 8 & 0xff),(ipAddress >> 16 & 0xff),(ipAddress >> 24 & 0xff));
localIP = String.format("%d.%d.%d.%d", (ipAddress & 0xff),(ipAddress >> 8 & 0xff),(ipAddress >> 16 & 0xff),(ipAddress >> 24 & 0xff));
}
}
}
localIP是字符串格式的IP地址。1.2.3.4.. 然后我用IP地址做了一个字节,然后扫描了每个字节。。我将DNS服务器中的每个IP或有响应的IP保存到ArrayList
byte[] ip = new byte[4];
int ipInt = parseNumericAddress(localIP);
ip[3] = (byte) (ipInt & 0xFF);
ip[2] = (byte) ((ipInt >> 8) & 0xFF);
ip[1] = (byte) ((ipInt >> 16) & 0xFF);
ip[0] = (byte) ((ipInt >> 24) & 0xFF);
progressDialog.incrementProgressBy(1);
for (int i = 1; i <= 255; i++)
{
progressDialog.incrementProgressBy(1);
ip[3] = (byte)i;
try {
InetAddress address = InetAddress.getByAddress(ip);
if (address.isReachable(100))
{
// machine is turned on and can be pinged
System.out.println("***Can Be Pinged*** Host Name " + address.getHostName() + address.getAddress().toString());
AvailableHostList.add(address.getHostName().toString());
}
else
if (!address.getHostAddress().equals(address.getHostName() ) )
{
// machine is known in a DNS lookup
System.out.println("***Can Be Found in DNS Look Up*** HostName:" + address.getHostName() + "Address: "+address.getAddress().toString());
AvailableHostList.add(address.getHostName().toString());
}
else
{
System.out.println("Can Not Be Found" + address.toString());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
需要记住的一点是,在一些运营商,例如Verizon,无线智能手机在每个子网中使用的IPv6地址仅超过1850万个。我不相信任何运营商会让你发现你网络上的其他设备,因为这是一个安全漏洞。我不确定他们是如何处理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实现上工作。