文档

Java™ 教程
隐藏目录
检索网络接口
路径:自定义网络
课程:编程访问网络参数

获取网络接口

NetworkInterface类没有公共构造函数。因此,你不能使用new操作符直接创建该类的新实例。相反,可以使用以下静态方法从系统中检索接口详细信息:getByInetAddress()getByName()getNetworkInterfaces()。前两个方法用于当你已知特定接口的IP地址或名称时。第三个方法getNetworkInterfaces()返回机器上的所有接口的完整列表。

网络接口可以按层次结构组织。 NetworkInterface类包括两个方法getParent()getSubInterfaces(),这些方法与网络接口层次结构相关。 getParent()方法返回一个接口的父NetworkInterface。如果一个网络接口是子接口,则getParent()返回一个非空值。 getSubInterfaces()方法返回一个网络接口的所有子接口。

以下示例程序列出了计算机上所有网络接口和子接口(如果存在)的名称。

import java.io.*;
import java.net.*;
import java.util.*;
import static java.lang.System.out;

public class ListNIFs 
{
    public static void main(String args[]) throws SocketException {
        Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces();
        
        for (NetworkInterface netIf : Collections.list(nets)) {
            out.printf("显示名称:%s\n", netIf.getDisplayName());
            out.printf("名称:%s\n", netIf.getName());
            displaySubInterfaces(netIf);
            out.printf("\n");
        }
    }

    static void displaySubInterfaces(NetworkInterface netIf) throws SocketException {
        Enumeration<NetworkInterface> subIfs = netIf.getSubInterfaces();
        
        for (NetworkInterface subIf : Collections.list(subIfs)) {
            out.printf("\t子接口显示名称:%s\n", subIf.getDisplayName());
            out.printf("\t子接口名称:%s\n", subIf.getName());
        }
     }
}  

以下是示例程序的输出示例:

显示名称:bge0
名称:bge0
    子接口显示名称:bge0:3
    子接口名称:bge0:3
    子接口显示名称:bge0:2
    子接口名称:bge0:2
    子接口显示名称:bge0:1
    子接口名称:bge0:1

显示名称:lo0
名称:lo0

上一页: 什么是网络接口?
下一页: 列出网络接口地址