【问题标题】:Get the name and IP of devices on a Wifi network获取 Wifi 网络上设备的名称和 IP
【发布时间】:2015-06-19 15:48:37
【问题描述】:

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

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

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

提前致谢!

【问题讨论】:

  • “我知道这里有人问过这个问题,但没有得到回答。” 什么问题?提供链接。可能只是因为没有答案而没有得到回答,再次询问不会改变这一点。

标签: java swing device


【解决方案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)并将其存储在一个字节 [] 中,因此它看起来像 {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)只是没有存储信息,或者这些设备只是选择不将其主机名提交给路由器,这就是您将不断收到该消息的原因。据我所知,没有办法解决这个问题,因为这些设备名称实际上并没有被存储

【讨论】:

  • 感谢您的帮助!我检查了一下。它显示了 IP 地址,但没有显示连接设备的名称。 address.getHostName() 再次显示 IP 地址。如何获取连接设备的名称?
  • 再试运行一次,我说不出原因,但第二次正常运行
【解决方案2】:

试试这个:)

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

【讨论】:

    猜你喜欢
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    相关资源
    最近更新 更多