您现在的位置是:首页 >

Java网络编程从入门到精通(11):使用NetworkInterface类获得网络接口信息

火烧 2022-01-28 22:40:05 1089
Java网络编程从入门到精通(11):使用NetworkI terface类获得网络接口信息   从JDK 开始 Java提供了一个NeorkI terface类 这个类可以得到本机所有的物理网络接口

Java网络编程从入门到精通(11):使用NetworkInterface类获得网络接口信息  

  从JDK 开始 Java提供了一个NeorkInterface类 这个类可以得到本机所有的物理网络接口和虚拟机等软件利用本机的物理网络接口创建的逻辑网络接口的信息

  相关技术专题Java网络编程 基础到进阶教程

  一 创建NeorkInterface对象的两个静态方法

  NeorkInerface类和InetAddress一样 也没有public的构造方法 因此 必须通过它的两个静态方法来创建NeorkInterface对象 可以使用两种方法来创建NeorkInterface对象 网络接口名(getByName方法)和IP地址(getByInetAddress方法)

  getByName方法

  这个方法可以通过网络接口名来创建NeorkInterface对象 这个网络接口名并不是计算机名 而是用于标识物理或逻辑网络接口的名字 一般是由操作系统设置的 网络接口名在大多数操作系统上(包括Windows Linux和Unix)是以eth开头 后面是网络接口的索引号 从 开始 如本机安了三块网卡 那么网络接口名就依次是eth eth 和eth NeorkInterface对象的toString方法可以返回网络接口的名称 显示名和这个网络接口上绑字的所有IP地址等信息 当网络接口名不存在时 getByName返回null getByName方法定义如下

   public static NeorkInterface getByName(String name) throws SocketException

  下面的代码是一个显示指定网络接口信息的程序 网络接口名通过命令行参数传入

   package mynet;import  *;public class MyNeorkInterface {    public static void main(String[] args) throws Exception    {        if (args length ==  )            return;        NeorkInterface ni = NeorkInterface getByName(args[ ]);        System out println((ni == null) ?  网络接口不存在!  : ni);    }}

  测试

  执行如下命令

   java mynet MyNeorkInterface  eth

  运行结果

   name:eth  (Realtek RTL  Family PCI Fast Ethernet NIC) index:   addresses:/ ;/ ;

  测试

  执行如下命令

   java mynet MyNeorkInterface  abcd

  运行结果

   网络接口不存在!

  getByInetAddress方法

  除了可以使用网络接口名来得到网络接口的信息 还可以利用getByInetAddress方法来确定一个IP地址属于哪一个网络接口 由于getByInetAddress方法必须使用一个InetAddress对象封装的IP地址来作为参数 因此 在使用getByInetAddress方法之前 必须先创建一个InetAddress对象 但要注意不能使用远程的IP的域名来创建InetAddress对象 否则getByInetAddress将返回null getByInetAddress方法的定义如下

   public static NeorkInterface getByInetAddress(InetAddress addr) throws SocketException

  下面代码可以确定一个IP地址属于哪一个网络接口 这个IP地址通过命令行参数传入

   package mynet;import  *;public class MyNeorkInterface {    public static void main(String[] args) throws Exception    {        if(args length ==  ) return;        InetAddress local = InetAddress getByName(args[ ]);        NeorkInterface ni = NeorkInterface getByInetAddress(local);        System out println((ni == null) ?  本机不存在此IP地址!  : ni);            }}

  测试

  执行如下命令

   java mynet MyNeorkInterface  

  运行结果

   name:lo (MS TCP Loopback interface) index:   addresses:/ ;/ : : : : : : : ;

  测试

  执行如下命令

   java mynet MyNeorkInterface  

  运行结果

   name:ppp  (WAN (PPP/SLIP) Interface) index:   addresses:/ ;

  测试 使用的IP地址 是ADSL连接临时分配给本机的IP地址 因此 运行结果返回的ppp 是ADSL网络接口

  二 得到本机所有的网络接口

  NeorkInterface可以通过getNeorkInterfaces方法来枚举本机所有的网络接口 我们也可以利用getNeorkInterfaces得到的网络接口来枚举本机的所有IP地址 当然 也可以通过InetAddress类的getAllByName来得到本机的所有IP地址 但getNeorkInterfaces方法可以按网络接口将这些IP地址进行分组 这对于只想得到某个网络接口上的所有IP地址是非常有用的 getNeorkInterfaces方法的定义如下

   public static Enumeration<NeorkInterface> getNeorkInterfaces() throws SocketException

  下面代码演示了如何使用getNeorkInterfaces方法得到本机所有的网络接口

   package mynet;import  *;import java util *;public class MyNeorkInterface {    public static void main(String[] args) throws Exception    {        Enumeration<NeorkInterface> nis = NeorkInterface getNeorkInterfaces();        while (nis hasMoreElements())            System out println(nis nextElement());    }}

  运行结果(部分)

   name:lo (MS TCP Loopback interface) index:   addresses:/ ;/ : : : : : : : ;name:eth  (Realtek RTL  Family PCI Fast Ethernet NIC ) index:   addresses:/ ;/ ;name:ppp  (WAN (PPP/SLIP) Interface) index:   addresses:/ ;

  上面的运行结果只是一种可能的结果 读者在运行上面的程序时根据本机的硬件和软件的配置不同 运行结果可能会有所不同

Java网络编程从入门到精通(11):使用NetworkInterface类获得网络接口信息

  三 NeorkInterface类的Getter方法

  NeorkInterface类提供了三个方法可以分别得到网络接口名(getName方法) 网络接口别名(getDisplayName方法)以及和网络接口绑定的所有IP地址(getInetAddresses方法)

  getName方法

  这个方法用来得到一个网络接口的名称 这个名称就是使用getByName方法创建NeorkInterface对象时使用的网络接口名 如eth ppp 等 getName方法的定义如下

   public String getName()

  getDisplayName方法

  这个方法可以得到更容易理解的网络接口名 也可以将这个网络接口名称为网络接口别名 在一些操作系统中(如Unix) getDisplayName方法和getName方法的返回值相同 但在Windows中getDisplayName方法一般会返回一个更为友好的名字 如Realtek RTL Family PCI Fast Ethernet NIC getDisplayName方法的定义如下

   public String getDisplayName()

  getInetAddresses方法

  NeorkInterface类可以通过getInetAddresse方法以InetAddress对象的形式返回和网络接口绑定的所有IP地址 getInetAddresses方法的定义如下

   public Enumeration<InetAddress> getInetAddresses()

  上面的代码演示了如果使用上述三个Getter方法

   package mynet;import  *;import java util *;public class MyNeorkInterface {    public static void main(String[] args) throws Exception    {        if (args length ==  )            return;        NeorkInterface ni = NeorkInterface getByName(args[ ]);        System out println( Name:   + ni getName());        System out println( DisplayName:   + ni getDisplayName());        Enumeration<InetAddress> addresses = ni getInetAddresses();        while (addresses hasMoreElements())            System out println(addresses nextElement() getHostAddress());    }}

  测试

  执行如下命令

   java mynet MyNeorkInterface  eth

  运行结果

lishixinzhi/Article/program/Java/hx/201311/27178  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码