当前位置: 主页 > JAVA语言

本机 ip地址 java-java获取本机的ip地址

发布时间:2023-05-28 09:18   浏览次数:次   作者:佚名

Java获取本机ip地址,并扫描本机所在局域网的电脑设备

时间:2020-06-24

本文章向大家介绍Java获取本机ip地址,并扫描本机所在局域网的电脑设备,主要包括Java获取本机ip地址,并扫描本机所在局域网的电脑设备使用实例、应用技巧、基本知识点总结和需要注意事项本机 ip地址 java,具有一定的参考价值本机 ip地址 java,需要的朋友可以参考一下。

Java获取本机IP地址,并根据IP地址的网段,扫描局域网里面的电脑设备;

import java.io.IOException;
import java.net.Inet4Address;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.UnknownHostException;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Set;
/**
 * 类注解
 *
 * @author 尘世间迷茫的小书童
 * @date 2020年06月23日 17:31
 */
public class Demo {
    public static void main(String[] args) {
        Set set = getIpAddress();
        if(set.size() > 0) {
            set.forEach(ip -> {
                System.out.println("本机ip: " + ip);
            });
        }
        set.remove("127.0.0.1");
        scannerNetwork(set);
        System.out.println("扫描完毕...");
        System.exit(0);
    }
    /**
     * 获取本机的IP地址(包括ipv4和ipv6) 
* 包含回环地址127.0.0.1和0:0:0:0:0:0:0:1
*/ private static Set getIpAddress() { Set ipList = new HashSet<>(); try { Enumeration allNetInterfaces = NetworkInterface.getNetworkInterfaces(); InetAddress ip = null; while (allNetInterfaces.hasMoreElements()) { NetworkInterface netInterface = (NetworkInterface) allNetInterfaces.nextElement(); // 排除虚拟接口和没有启动运行的接口 if (netInterface.isVirtual() || !netInterface.isUp()) { continue; } else { Enumeration addresses = netInterface.getInetAddresses(); while (addresses.hasMoreElements()) { ip = addresses.nextElement(); // if (ip != null && (ip instanceof Inet4Address || ip instanceof Inet6Address)) { // ipList.add(ip.getHostAddress()); // } if (ip != null && (ip instanceof Inet4Address)) { ipList.add(ip.getHostAddress()); } } } } } catch (Exception e) { e.printStackTrace(); } return ipList; } /** * 根据本机ip扫描局域网设备 * @param set */ private static void scannerNetwork(Set set) { try { set.forEach(address -> { // 设置IP地址网段 String ips = getNetworkSegment(address); System.out.println("开始扫描 " + ips + "网段..."); String ip; InetAddress addip = null; // 遍历IP地址 for (int i = 1; i < 255; i++) { ip = ips + i; try { addip = InetAddress.getByName(ip); } catch (UnknownHostException e) { System.out.println("找不到主机: " + ip); } // 获取登录过的设备 if (!ip.equals(addip.getHostName())) { try { // 检查设备是否在线,其中1000ms指定的是超时时间 boolean status = InetAddress.getByName(addip.getHostName()).isReachable(1000); // 当返回值是true时,说明host是可用的,false则不可。 System.out.println("IP地址为:" + ip + "\t\t设备名称为: " + addip.getHostName() + "\t\t是否可用: " + (status ? "可用" : "不可用")); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } }); } catch (Exception uhe) { System.err.println("Unable to find: " + uhe.getLocalizedMessage()); } } /** * 根据ip获取网段 * @param ip * @return */ private static String getNetworkSegment(String ip) { int startIndex = ip.lastIndexOf("."); return ip.substring(0, startIndex+1); } }