获取Wifi网络上设备的名称和IP

时间:2015-06-19 15:48:38

标签: java swing device

我知道这个问题已在这里被问到,但它没有得到答案。

我正在编写一个简单的Java Swing应用程序,其中我想显示连接到我的无线网络的每个设备的名称和IP地址。

我想在JFrame中显示此列表。我在网上搜索了很多,但无法找到实现这一目标的方法。请帮助我掌握Java大师!

提前致谢!

2 个答案:

答案 0 :(得分:1)

我看了一下后发现了这段代码。它很有效,但它很慢,可能不是最好的方法,但它确实有效。

import java.io.IOException;
import java.net.InetAddress;

public class NetworkPing {

    /**
     * JavaProgrammingForums.com
     */
    public static void main(String[] args) throws IOException {

        InetAddress localhost = InetAddress.getLocalHost();
        // this code assumes IPv4 is used
        byte[] ip = localhost.getAddress();

        for (int i = 1; i <= 254; i++)
        {
            ip[3] = (byte)i;
            InetAddress address = InetAddress.getByAddress(ip);
        if (address.isReachable(1000))
        {
            System.out.println(address + " machine is turned on and can be pinged");
        }
        else if (!address.getHostAddress().equals(address.getHostName()))
        {
            System.out.println(address + " machine is known in a DNS lookup");
        }
        else
        {
            System.out.println(address + " the host address and host name are equal, meaning the host name could not be resolved");
        }
        }

    }
}

值得注意的是,address.getHostAddress()返回192.168.0.xxx 和address.getHostName()返回设备的名称,如“Kevins-PC”

这是一段相当简单的代码,但我会快速地完成它。

首先获取本地主机IP地址(在普通家庭网络上为192.168.0.xxx)并将其存储在byte []中,使其看起来像{192,168,0,xxx} 。 然后它创建一个从1开始并转到254的for循环(因为此代码假定/ 24子网掩码(255.255.255.0),但如果它运行不同的子网掩码,那么它可能不是1-254)。 然后在for循环中,它将ip的第三个索引设置为i。 然后,它从该地址创建一个InetAddress。 然后它尝试在1000毫秒(1秒)内到达它,如果它成功,那么它打印地址并说它可以到达。 否则,如果机器主机地址(192.168.0.xxx)不等于主机名(如计算机名称,如Kevins-PC),那么它表示该机器在DNS查找中已知,这意味着它在DNS查找,但它无法访问(所以它可能已关闭或未连接,但它已经在以前),DNS是域名服务。 DNS基本上存储信息(您的路由器可能会这样做)。 最后,它只是说它无法解决,这意味着它无法访问,也没有找到在DNS中查找。

我找到了此代码herehere

<强>更新

所以如果你运行这个并且你只是继续得到类似“192.168.0.5/192.168.0.5的东西,主机地址和主机名相等,意味着主机名无法解析” 这意味着您的路由器(您的本地DNS)只是没有存储信息,或者那些设备只是选择不将其主机名提交给路由器,这就是为什么您将不断获取该消息。据我所知,没有办法解决这个问题,因为那些设备名称确实没有存储

答案 1 :(得分:0)

试试这个:)

import java.io.IOException;
import java.net.*;
import java.util.Vector;

public class search {
    public static void main(String args[]) throws UnknownHostException{

        Vector<String> Available_Devices=new Vector<>();
        String myip=InetAddress.getLocalHost().getHostAddress();
        String mynetworkips=new String();

        for(int i=myip.length();i>0;--i) {
            if(myip.charAt(i-1)=='.'){ mynetworkips=myip.substring(0,i); break; }
        }

        System.out.println("My Device IP: " + myip+"\n");

        System.out.println("Search log:");
        for(int i=1;i<=254;++i){
            try {
                InetAddress addr=InetAddress.getByName(mynetworkips + new Integer(i).toString());
                if (addr.isReachable(1000)){
                    System.out.println("Available: " + addr.getHostAddress());
                    Available_Devices.add(addr.getHostAddress());
                }
                else System.out.println("Not available: "+ addr.getHostAddress());

            }catch (IOException ioex){}
        }

        System.out.println("\nAll Connected devices(" + Available_Devices.size() +"):");
        for(int i=0;i<Available_Devices.size();++i) System.out.println(Available_Devices.get(i));
    }
}