繁体   English   中英

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

[英]Get the name and IP of devices on a Wifi network

我知道这里有人问过这个问题,但没有得到回答。

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

我想在JFrame显示这个列表。 我在网上搜索了很多,但找不到实现这一目标的方法。 请Java高手帮帮我!

提前致谢!

我看了一会儿后找到了这段代码。 它有效,但速度很慢,而且可能不是最好的方法,但它有效。

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)并将其存储在一个字节 [] 中,因此它看起来像 {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 中找到。

我在这里这里找到了这个代码

更新

因此,如果您运行此程序,并且不断收到类似“192.168.0.5/192.168.0.5 主机地址和主机名相同,这意味着无法解析主机名”之类的信息,这意味着您的路由器(您的本地 DNS)只是不存储信息或那些设备只是选择不将其主机名提交给路由器,这就是您将不断收到该消息的原因。 据我所知,没有办法解决这个问题,因为这些设备名称实际上没有存储

尝试这个 :)

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));
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM