• Java获取本地IP地址和主机名


    方式一:通过java.net.InetAddress类获取

    public void test1() {
        try {
            InetAddress addr = InetAddress.getLocalHost();
            System.out.println("IP地址:" + addr.getHostAddress() + ",主机名:" + addr.getHostName());
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }

    输出:

    IP地址:192.168.153.1,主机名:DESKTOP-338UP3E

    这种方式获取到的主机名没啥问题,这种方式获取的主机名没啥问题,但获取到的IP地址却有待考量,如果一台机器有多个网卡,他获取的IP是谁的呢?事实上,上面输出的IP是我虚拟机IP地址,既不是我有线网卡的地址,也不是我无线网卡的地址。

    方式二:利用java.net.NetworkInterface获取

    public void test2() {
        try {
            Enumeration<NetworkInterface> faces = NetworkInterface.getNetworkInterfaces();
            while (faces.hasMoreElements()) { // 遍历网络接口
                NetworkInterface face = faces.nextElement();
                if (face.isLoopback() || face.isVirtual() || !face.isUp()) {
                    continue;
                }
                System.out.print("网络接口名:" + face.getDisplayName() + ",地址:");
                Enumeration<InetAddress> address = face.getInetAddresses();
                while (address.hasMoreElements()) { // 遍历网络地址
                    InetAddress addr = address.nextElement();
                    if (!addr.isLoopbackAddress() && addr.isSiteLocalAddress() && !addr.isAnyLocalAddress()) {
                        System.out.print(addr.getHostAddress() + " ");
                    }
                }
                System.out.println("");
            }
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }

    输出:

    网络接口名:VMware Virtual Ethernet Adapter for VMnet8,地址:192.168.153.1 
    网络接口名:TAP-Windows Adapter V9,地址:10.8.0.30 
    网络接口名:VMware Virtual Ethernet Adapter for VMnet1,地址:192.168.46.1 
    网络接口名:Intel(R) Dual Band Wireless-AC 8265,地址:172.16.78.27 

    疑问?:第一、三行为VM虚拟机网络地址,不知为何还在。

    工具类:

    import java.net.InetAddress;
    import java.net.NetworkInterface;
    import java.net.SocketException;
    import java.net.UnknownHostException;
    import java.util.ArrayList;
    import java.util.Enumeration;
    import java.util.List;
    
    /**
     * 本地主机工具类
     * 
     * @author zhi
     * @since 2019年11月13日09:04:36
     *
     */
    public class LocalHostUtil {
    
        /**
         * 获取主机名称
         * 
         * @return
         * @throws UnknownHostException
         */
        public static String getHostName() throws UnknownHostException {
            return InetAddress.getLocalHost().getHostName();
        }
    
        /**
         * 获取系统首选IP
         * 
         * @return
         * @throws UnknownHostException
         */
        public static String getLocalIP() throws UnknownHostException {
            return InetAddress.getLocalHost().getHostAddress();
        }
    
        /**
         * 获取所有网卡IP,排除回文地址、虚拟地址
         * 
         * @return
         * @throws SocketException
         */
        public static String[] getLocalIPs() throws SocketException {
            List<String> list = new ArrayList<>();
            Enumeration<NetworkInterface> enumeration = NetworkInterface.getNetworkInterfaces();
            while (enumeration.hasMoreElements()) {
                NetworkInterface intf = enumeration.nextElement();
                if (intf.isLoopback() || intf.isVirtual()) { //
                    continue;
                }
                Enumeration<InetAddress> inets = intf.getInetAddresses();
                while (inets.hasMoreElements()) {
                    InetAddress addr = inets.nextElement();
                    if (addr.isLoopbackAddress() || !addr.isSiteLocalAddress() || addr.isAnyLocalAddress()) {
                        continue;
                    }
                    list.add(addr.getHostAddress());
                }
            }
            return list.toArray(new String[0]);
        }
    
        /**
         * 判断操作系统是否是Windows
         * 
         * @return
         */
        public static boolean isWindowsOS() {
            boolean isWindowsOS = false;
            String osName = System.getProperty("os.name");
            if (osName.toLowerCase().indexOf("windows") > -1) {
                isWindowsOS = true;
            }
            return isWindowsOS;
        }
    
        public static void main(String[] args) {
            try {
                System.out.println("主机是否为Windows系统:" + LocalHostUtil.isWindowsOS());
                System.out.println("主机名称:" + LocalHostUtil.getHostName());
                System.out.println("系统首选IP:" + LocalHostUtil.getLocalIP());
                System.out.println("系统所有IP:" + String.join(",", LocalHostUtil.getLocalIPs()));
            } catch (UnknownHostException e) {
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
  • 相关阅读:
    基于element-ui图片封装组件
    计算时间间隔具体每一天
    C语言学习笔记 —— 函数作为参数
    AtCoder Beginner Contest 049 题解
    AtCoder Beginner Contest 048 题解
    AtCoder Beginner Contest 047 题解
    AtCoder Beginner Contest 046 题解
    AtCoder Beginner Contest 045 题解
    AtCoder Beginner Contest 044 题解
    AtCoder Beginner Contest 043 题解
  • 原文地址:https://www.cnblogs.com/zhi-leaf/p/10608911.html
Copyright © 2020-2023  润新知