快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21

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

时间:2011-01-12

从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方法定义如下:

public static NetworkInterface getByName(String name) throws SocketException

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

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

执行如下命令:

java mynet.MyNetworkInterface1 eth0

运行结果:

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

测试2

执行如下命令:

java mynet.MyNetworkInterface1 abcd

运行结果:

网络接口不存在!

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

时间:2011-01-12

2. getByInetAddress方法

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

public static NetworkInterface getByInetAddress(InetAddress addr) throws SocketException

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

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

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号