Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Android查找IP地址_Android_Networking_Wifi_Ip Address_Hostname - Fatal编程技术网

从Android查找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++)

我正在尝试显示连接到当前wifi网络的所有设备的列表

我面临的问题是,当我在Java上使用DNS查找尝试下面的代码时,我看到了几个设备。这是好的;但它在我的android设备或模拟器上不起作用

有人知道我做错了什么吗?我正在开发一款连接到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
                    {

                    }

好了,我终于让这个工作开始了。 问题是我无法正确获取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实现上工作。