Java程式獲取Windows和Linux機器的系統IP地址


IP地址,也稱為網際網路協議地址,是在網路中分配給裝置的唯一識別符號,用於識別網路中的裝置並在它們之間建立連線。在本節中,我們將學習如何使用Java程式碼查詢Windows和Linux機器的IP地址。

IP地址可以用兩種格式表示。一種格式是IPv4,它是一種32位格式,包含十進位制數字和點。它有兩個部分,一部分是網路ID,用於識別網路;另一部分是主機ID,用於識別網路中的裝置。另一種格式是IPv6,它是一種128位格式,用十六進位制數字表示。

現在,我們將詳細瞭解用於查詢Linux和Windows機器IP地址的不同方法。Java提供InetAddress類NetworkInterface類來執行IP地址操作。

現在,我們將研究查詢Windows和Linux機器IP地址的不同程式碼實現。

在Windows和Linux機器上獲取系統IP地址的方法

以下是獲取Windows和Linux機器系統IP地址的方法:

方法1:使用InetAddress.getLocalHost()

在這種方法中,我們將實現Java程式碼,使用'InetAddress.getLocalHost()'方法和'getHostAddress()'方法查詢機器的IP地址。

InetAddress.getLocalHost()方法用於獲取當前機器的IP地址和主機名。它返回InetAddress類的例項,該例項表示Internet協議(IP)地址。getLocalHost()方法可用於以字串形式或位元組陣列形式檢索本地主機的IP地址。

查詢IP地址的演算法如下所示。

演算法

  • 使用InetAddress.getLocalHost()獲取IP地址。

  • 列印IP地址。

  • 如果捕獲到異常,則列印無法為此主機查詢IP地址。

示例

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

public class Main {
   public static void main(String[] args) {
      try {
         InetAddress address = InetAddress.getLocalHost();
         System.out.println("IP address: " + address.getHostAddress());
      } catch (UnknownHostException ex) {
         System.out.println("Could not find IP address for this host");
      }
   }
}

輸出

IP address: 172.17.0.2

程式碼解釋

在此示例中,我們首先使用'InetAddress.getLocalHost()'方法獲取InetAddress物件,然後在InetAddress物件上使用getHostAddress()方法,然後印表機器的IP地址值。

方法2:使用NetworkInterface.getNetworkInterfaces()

在這種方法中,我們將實現Java程式碼,使用'NetworkInterface.getNetworkInterfaces()'方法查詢機器的IP地址。查詢IP地址的演算法如下所示。

  • 使用NetworkInterface.getNetworkInterfaces()獲取網路介面的列舉。

  • 當列舉還有更多元素時,對於每個網路,檢查網路是否啟動並使用networkInterface.isUp()和networkInterface.isLoopback()進行迴環。

  • 如果網路有效,則為每個網路獲取IP地址,並使用address.isLinkLocalAddress()和address.isSiteLocalAddress()檢查IP地址是否是站點的本地地址或連結本地地址。

  • 如果捕獲到異常,則列印跟蹤資訊。

示例

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Enumeration;

public class Main {
   public static void main(String[] args) {
      try {
         Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
         while (networkInterfaces.hasMoreElements()) {
            NetworkInterface networkInterface = networkInterfaces.nextElement();
            if (!networkInterface.isUp()) {
               continue;
            }
            if (networkInterface.isLoopback()) {
               continue;
            }
            Enumeration<InetAddress> addresses = networkInterface.getInetAddresses();
            while (addresses.hasMoreElements()) {
               InetAddress address = addresses.nextElement();
               if (address.isLinkLocalAddress()) {
                  continue;
               }
               if (address.isSiteLocalAddress()) {
                     System.out.println("IP address: " + address.getHostAddress());
               }
            }
         }
      } catch (SocketException ex) {
         ex.printStackTrace();
      }
   }
}

輸出

IP address: 172.17.0.2

程式碼解釋

在此示例中,我們使用getNetworkInterfaces()方法檢索NetworkInterfaces的列舉。我們遍歷每個介面,並使用'networkInterface.isUp()'方法檢查介面是否啟動,如果此方法返回的值為false,則我們只需傳遞介面並繼續下一個介面,因為我們現在只需要當前活動的IP地址。我們還使用每個網路介面上的'networkInterface.isLoopback()'檢查它是否與外部網路互動,如果此方法返回true,則該特定介面不與外部網路互動。因此,我們跳過列印此類網路。然後,如果網路介面通過了上述兩個測試,我們使用該特定介面上的'getInetAddresses()'方法獲取InetAddress的列舉。

我們再次檢查每個InetAddress是否為連結本地地址,使用'isLinkLocalAddress()'方法,如果此方法返回true,則該特定地址為本地地址,並且無法路由到外部網路。因此,我們傳遞此類IP地址,因為它們對於通訊無效。最後,我們使用'isSiteLocalAddress()'方法檢查地址是否是站點的本地地址,如果該特定地址是站點的本地地址,則該方法返回true,這意味著該特定地址是有效的通訊IP地址。因此,我們將使用'getHostAddress()'方法列印該特定地址。

因此,在本文中,我們討論瞭如何在Windows和Linux機器上獲取系統IP地址。

更新時間: 2024年7月31日

2K+ 瀏覽量

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.