从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
运行结果:
网络接口不存在!