首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 取得網域 IP 位址:InetAddress 實戰應用

     編輯:Java 程式設計入門

InetAddress:網路位址解析核心類別

java.net.InetAddress 封裝 IP 位址與主機名稱,提供靜態工廠方法解析網域名稱,是 Java 網路程式設計的基礎元件。

完整程式碼:NsLookup.java

import java.net.InetAddress;
import java.net.UnknownHostException;

public class NsLookup {
    static public void main(String[] args) {
        try {
            // 從命令列參數取得網域名稱
            InetAddress address = InetAddress.getByName(args[0]);
            // 輸出:網域名稱: IP位址
            System.out.println(args[0] + ": " + address.getHostAddress());
        } catch (UnknownHostException uhe) {
            System.err.println("Unable to find: " + args[0]);
        }
    }
}

執行範例

$ java NsLookup www.google.com
www.google.com: 142.250.190.46

$ java NsLookup localhost
localhost: 127.0.0.1

核心方法速查

方法功能回傳型別
getByName(String host)根據主機名稱/IP 字串取得 InetAddressInetAddress
getHostAddress()取得 IP 位址字串(點分十進制)String
getHostName()取得主機名稱String
getAddress()取得原始 IP 位元組陣列(4 位元組 IPv6 16 位元組)byte[]
getAllByName(String host)取得所有解析位址(負載平衡、多 IP)InetAddress[]
getLocalHost()取得本機 InetAddressInetAddress
isReachable(int timeout)測試主機可達性(ICMP/TCP)boolean

getAddress() vs getHostAddress() 差異

  • getHostAddress():回傳人類可讀字串「192.168.1.1」,適合輸出顯示
  • getAddress():回傳 byte[] 原始位元組,適合網路封包組裝、位元運算

進階應用:多 IP 解析與可達性測試

public class AdvancedLookup {
    public static void main(String[] args) throws Exception {
        String host = "www.google.com";

        // 1. 取得所有 IP(CDN、負載平衡常有多個)
        InetAddress[] addresses = InetAddress.getAllByName(host);
        System.out.println(host + " 解析到 " + addresses.length + " 個 IP:");
        for (InetAddress addr : addresses) {
            System.out.println("  " + addr.getHostAddress());
        }

        // 2. 可達性測試(需權限,部分環境受限)
        for (InetAddress addr : addresses) {
            boolean reachable = addr.isReachable(3000); // 3 秒超時
            System.out.println("  " + addr.getHostAddress() + " reachable: " + reachable);
        }

        // 3. 本機資訊
        InetAddress local = InetAddress.getLocalHost();
        System.out.println("本機主機名:" + local.getHostName());
        System.out.println("本機 IP:" + local.getHostAddress());
    }
}

常見例外處理

  • UnknownHostException:DNS 解析失敗(網域不存在、DNS 故障、離線)
  • SecurityException:isReachable() 需網路權限(SecurityManager 環境)

IPv6 相容性

InetAddress 同時支援 IPv4 (Inet4Address) 與 IPv6 (Inet6Address),getAddress() 回傳 4 或 16 位元組陣列,程式碼無需修改即相容雙協定。

現代替代:NIO.2 與 HTTP Client

  • Java 11+ java.net.http.HttpClient 內建 DNS 解析與連線管理
  • Netty、OkHttp 等框架提供連線池、快取、重試等高階功能

掌握 InetAddress 是理解 Java 網路層基礎,進而驅動 HTTP Client、gRPC、微服務註冊發現等上層應用的關鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved