最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java獲取本機(jī)IP地址的方法代碼示例(內(nèi)網(wǎng)、公網(wǎng))

 更新時(shí)間:2024年07月23日 10:28:57   作者:EIL_XU_  
在IT領(lǐng)域獲取本機(jī)IP地址是一項(xiàng)基礎(chǔ)但重要的任務(wù),特別是在網(wǎng)絡(luò)編程、遠(yuǎn)程協(xié)作和設(shè)備通信中,這篇文章主要給大家介紹了關(guān)于Java獲取本機(jī)IP地址的方法(內(nèi)網(wǎng)、公網(wǎng)),需要的朋友可以參考下

起因是公司一個(gè)springboot項(xiàng)目啟動(dòng)類打印了本機(jī)IP地址加端口號,方便訪問項(xiàng)目頁面,但是發(fā)現(xiàn)打印出來的不是“無線局域網(wǎng)”的ip而是“以太網(wǎng)適配器”ip,如下圖所示

這樣就導(dǎo)致后續(xù)本地起項(xiàng)目連接xxl-job注冊節(jié)點(diǎn)的時(shí)候因?yàn)椴辉谕瑐€(gè)局域網(wǎng)下ping不通出問題,所以需要解決一下。

一、直接獲取本機(jī)IP(會受到虛擬機(jī)干擾)

public static String getInterIP1() throws Exception {
    return InetAddress.getLocalHost().getHostAddress();
}

二、獲取本機(jī)IP(排除虛擬機(jī)干擾)

public static InetAddress getLocalHostLANAddress() throws UnknownHostException {
        try {
            InetAddress candidateAddress = null;
            // 遍歷所有的網(wǎng)絡(luò)接口
            for (Enumeration ifaces = NetworkInterface.getNetworkInterfaces(); ifaces.hasMoreElements();) {
                NetworkInterface iface = (NetworkInterface) ifaces.nextElement();
                // 在所有的接口下再遍歷IP
                for (Enumeration inetAddrs = iface.getInetAddresses(); inetAddrs.hasMoreElements();) {
                    InetAddress inetAddr = (InetAddress) inetAddrs.nextElement();
                    if (!inetAddr.isLoopbackAddress()) {// 排除loopback類型地址
                        if (inetAddr.isSiteLocalAddress()) {
                            // 如果是site-local地址,就是它了
                            return inetAddr;
                        } else if (candidateAddress == null) {
                            // site-local類型的地址未被發(fā)現(xiàn),先記錄候選地址
                            candidateAddress = inetAddr;
                        }
                    }
                }
            }
            if (candidateAddress != null) {
                return candidateAddress;
            }
            // 如果沒有發(fā)現(xiàn) non-loopback地址.只能用最次選的方案
            InetAddress jdkSuppliedAddress = InetAddress.getLocalHost();
            if (jdkSuppliedAddress == null) {
                throw new UnknownHostException("The JDK InetAddress.getLocalHost() method unexpectedly returned null.");
            }
            return jdkSuppliedAddress;
        } catch (Exception e) {
            UnknownHostException unknownHostException = new UnknownHostException(
                    "Failed to determine LAN address: " + e);
            unknownHostException.initCause(e);
            throw unknownHostException;
        }
    }

三、獲取本機(jī)公網(wǎng)IP

public static String getOutIP() {
    try {
        URL whatismyip = new URL("http://checkip.amazonaws.com");
        BufferedReader in = new BufferedReader(new InputStreamReader(whatismyip.openStream()));

        String ip = in.readLine();
        return ip;

        } catch (Exception e) {}

        return "";
}

四、測試

public class IpTest {

        public static void main(String[] args) throws Exception {
            System.out.println("獲取本機(jī)ip: " + getInterIP1());
//            System.out.println("getInterIP2: " + getInterIP2());
            System.out.println("獲取本機(jī)ip(排除虛擬機(jī)干擾): " + String.valueOf(getLocalHostLANAddress()).substring(1));
//            System.out.println("getOutIPV4: " + getOutIPV4());
            System.out.println("獲取本機(jī)公網(wǎng)ip: " + getOutIP());
        }

        public static String getInterIP1() throws Exception {
            return InetAddress.getLocalHost().getHostAddress();
        }

    public static InetAddress getLocalHostLANAddress() throws UnknownHostException {
        try {
            InetAddress candidateAddress = null;
            // 遍歷所有的網(wǎng)絡(luò)接口
            for (Enumeration ifaces = NetworkInterface.getNetworkInterfaces(); ifaces.hasMoreElements();) {
                NetworkInterface iface = (NetworkInterface) ifaces.nextElement();
                // 在所有的接口下再遍歷IP
                for (Enumeration inetAddrs = iface.getInetAddresses(); inetAddrs.hasMoreElements();) {
                    InetAddress inetAddr = (InetAddress) inetAddrs.nextElement();
                    if (!inetAddr.isLoopbackAddress()) {// 排除loopback類型地址
                        if (inetAddr.isSiteLocalAddress()) {
                            // 如果是site-local地址,就是它了
                            return inetAddr;
                        } else if (candidateAddress == null) {
                            // site-local類型的地址未被發(fā)現(xiàn),先記錄候選地址
                            candidateAddress = inetAddr;
                        }
                    }
                }
            }
            if (candidateAddress != null) {
                return candidateAddress;
            }
            // 如果沒有發(fā)現(xiàn) non-loopback地址.只能用最次選的方案
            InetAddress jdkSuppliedAddress = InetAddress.getLocalHost();
            if (jdkSuppliedAddress == null) {
                throw new UnknownHostException("The JDK InetAddress.getLocalHost() method unexpectedly returned null.");
            }
            return jdkSuppliedAddress;
        } catch (Exception e) {
            UnknownHostException unknownHostException = new UnknownHostException(
                    "Failed to determine LAN address: " + e);
            unknownHostException.initCause(e);
            throw unknownHostException;
        }
    }
    
        public static String getOutIP() {
            try {
                URL whatismyip = new URL("http://checkip.amazonaws.com");
                BufferedReader in = new BufferedReader(new InputStreamReader(whatismyip.openStream()));

                String ip = in.readLine();
                return ip;
//                System.out.println("Public IP Address: " + ip);
            } catch (Exception e) {
//                System.out.println("Error occurred: " + e.getMessage());
            }
            return "";
        }

}
獲取本機(jī)ip: 172.17.16.1
獲取本機(jī)ip(排除虛擬機(jī)干擾): 192.168.100.100
獲取本機(jī)公網(wǎng)ip: 14.145.43.147

這里打印出來的便對應(yīng)上前言命令行截圖里的ip信息,然后公網(wǎng)ip對應(yīng)的是百度搜索ip查到的公網(wǎng)ip地址 

五、手動(dòng)禁用虛擬機(jī)排除干擾

除了用代碼邏輯排除虛擬機(jī)干擾,我們也可以直接禁用電腦的虛擬機(jī)適配器。

步驟:

  • win+R 
  • devmgmt.msc 打開設(shè)備管理器
  • 找到網(wǎng)絡(luò)適配器-Hyper-V Virtual 開頭的  右鍵禁用

此時(shí)win+R cmd 輸入ipconfig,可以看到已經(jīng)沒有虛擬機(jī)ip了

此時(shí)java使用

InetAddress.getLocalHost().getHostAddress()

也可以獲取到192.168開頭的wifi地址了

總結(jié)

到此這篇關(guān)于Java獲取本機(jī)IP地址的文章就介紹到這了,更多相關(guān)Java獲取本機(jī)IP地址內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java使用JDBC實(shí)現(xiàn)Oracle用戶認(rèn)證的方法詳解

    Java使用JDBC實(shí)現(xiàn)Oracle用戶認(rèn)證的方法詳解

    這篇文章主要介紹了Java使用JDBC實(shí)現(xiàn)Oracle用戶認(rèn)證的方法,結(jié)合實(shí)例形式分析了java使用jdbc實(shí)現(xiàn)數(shù)據(jù)庫連接、建表、添加用戶、用戶認(rèn)證等操作流程與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-08-08
  • java 對數(shù)和指數(shù)計(jì)算方式

    java 對數(shù)和指數(shù)計(jì)算方式

    這篇文章主要介紹了java 對數(shù)和指數(shù)計(jì)算方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Spring IoC和DI深度解析

    Spring IoC和DI深度解析

    Spring是包含了眾多工具方法的IoC容器,本文給大家介紹Spring IoC和DI深度解析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,感興趣的朋友跟隨小編一起看看吧
    2026-02-02
  • 一文搞懂Java創(chuàng)建線程的五種方法

    一文搞懂Java創(chuàng)建線程的五種方法

    本文主要為大家詳細(xì)介紹一下Java實(shí)現(xiàn)線程創(chuàng)建的五種常見方式,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)有一定的幫助,感興趣的可以跟隨小編學(xué)習(xí)一下
    2022-06-06
  • 關(guān)于IDEA2020.1新建項(xiàng)目maven PKIX 報(bào)錯(cuò)問題解決方法

    關(guān)于IDEA2020.1新建項(xiàng)目maven PKIX 報(bào)錯(cuò)問題解決方法

    這篇文章主要介紹了關(guān)于IDEA2020.1新建項(xiàng)目maven PKIX 報(bào)錯(cuò)問題解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • log4j日志格式加入自定義字段信息方式

    log4j日志格式加入自定義字段信息方式

    這篇文章主要介紹了log4j日志格式加入自定義字段信息方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Spring之Environment類的使用方式

    Spring之Environment類的使用方式

    這篇文章主要介紹了Spring之Environment類的使用方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 基于Java編寫串口通信工具

    基于Java編寫串口通信工具

    這篇文章主要為大家詳細(xì)介紹了基于Java編寫的一個(gè)帶有圖形界面的簡單串口通信工具,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • MybatisPlus之likeRight的用法

    MybatisPlus之likeRight的用法

    這篇文章主要介紹了MybatisPlus之likeRight的用法說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 分布式Netty源碼分析概覽

    分布式Netty源碼分析概覽

    這篇文章主要為大家介紹了分布式Netty源碼分析概覽,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03

最新評論

张掖市| 休宁县| 濮阳市| 武邑县| 枣阳市| 瑞金市| 张家界市| 安新县| 普兰店市| 信丰县| 渝北区| 临颍县| 朔州市| 松潘县| 辽中县| 揭东县| 察哈| 洪雅县| 永康市| 哈巴河县| 邵东县| 巨鹿县| 沁阳市| 静乐县| 宁化县| 凭祥市| 揭东县| 商河县| 安吉县| 湘潭县| 陈巴尔虎旗| 福州市| 崇州市| 遵义县| 广南县| 沅江市| 固安县| 麻阳| 龙里县| 二连浩特市| 兴义市|