Java網絡編程從入門到精通(11):使用NetworkInterface類獲得網絡接口信息 – JAVA編程語言程序開發技術文章

從JDK1.4開始,Java提供瞭一個NetworkInterface類。這個類可以得到本機所有的物理網絡接口和虛擬機等軟件利用本機的物理網絡接口創建的邏輯網絡接口的信息。

一、創建NetworkInterface對象的兩個靜態方法


NetworkInerface類和InetAddress一樣,也沒有public的構造方法。因此,必須通過它的兩個靜態方法來創建NetworkInterface對象。可以使用兩種方法來創建NetworkInterface對象:網絡接口名(getByName方法)和IP地址(getByInetAddress方法)。


1. getByName方法


這個方法可以通過網絡接口名來創建NetworkInterface對象。這個網絡接口名並不是計算機名,而是用於標識物理或邏輯網絡接口的名字,一般是由操作系統設置的。網絡接口名在大多數操作系統上(包括Windows、Linux和Unix)是以eth開頭,後面是網絡接口的索引號,從0開始。如本機安瞭三塊網卡,那麼網絡接口名就依次是eth0、eth1和eth2。NetworkInterface對象的toString方法可以返回網絡接口的名稱、顯示名和這個網絡接口上綁字的所有IP地址等信息。當網絡接口名不存在時,getByName返回null。getByName方法定義如下:


<!–

Code highlighting produced by Actipro CodeHighlighter (freeware)
https://www.CodeHighlighter.com/

–>    public static NetworkInterface getByName(String name) throws SocketException


下面的代碼是一個顯示指定網絡接口信息的程序,網絡接口名通過命令行參數傳入。


<!–

Code highlighting produced by Actipro CodeHighlighter (freeware)
https://www.CodeHighlighter.com/

–>package mynet;

import java.net.*;

public class MyNetworkInterface1
{
    public static void main(String[] args) throws Exception
    {
        if (args.length == 0)
            return;
        NetworkInterface ni = NetworkInterface.getByName(args[0]);
        System.out.println((ni == null) ? “網絡接口不存在!” : ni);
    }
}



  • 測試1

執行如下命令:


<!–

Code highlighting produced by Actipro CodeHighlighter (freeware)
https://www.CodeHighlighter.com/

–>java mynet.MyNetworkInterface1 eth0

運行結果:


<!–

Code highlighting produced by Actipro CodeHighlighter (freeware)
https://www.CodeHighlighter.com/

–>name:eth0 (Realtek RTL8139 Family PCI Fast Ethernet NIC) index: 4 addresses:
/192.168.18.10;
/192.168.18.20;


  • </SPA

發佈留言