[英]Speed up finding devices connected to a Wifi network and get device name
[英]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.