Java网络编程net-2-网络接口-NetworkInterface

简介: Java网络编程net-2-网络接口-NetworkInterface

网络接口信息NetworkInterface

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

一、概念

       网络接口指的网络设备的各种接口,我们现今正在使用的网络接口都为以太网接口。它遵循IEEE802.3标准,传输速率通常为10M/100/1000Mbps,可工作在全双工、半双工模式。常见的以太网接口类型有RJ-45接口、RJ-11接口、SC光纤接口、FDDI接口、AUI接口、BNC接口、Console接口等。

好吧,太专业了,按我的理解,就是开放的一个门,负责出入或和外界通讯。

二、NetworkInterface类也是一个 final最终类

这个类可以获取本机所有的物理网络接口和虚拟机等软件创建的逻辑网络接口信息。

三、五个静态方法可以获取到NetworkInterface信息

1.NetworkInerface类和InetAddress一样,也没有public的构造方法。可以使用两种方法来创建NetworkInterface对象:

    • 网络接口名(getByName方法)
    • IP地址(getByInetAddress方法)。
    static NetworkInterface getByIndex(int index) 获取给定索引的网络接口。
    static NetworkInterface getByInetAddress(InetAddress addr) 搜索绑定了指定的Internet协议(IP)地址的网络接口的便捷方法。
    static NetworkInterface getByName(String name)  搜索具有指定名称的网络接口。
    static Enumeration<NetworkInterface>  getNetworkInterfaces()  返回Enumeration此计算机上所有接口中的一个。
    static Stream<NetworkInterface> networkInterfaces() 返回Stream此计算机上所有接口的a 。

    image.gif

    2.getByName方法可以通过网络接口名来创建NetworkInterface对象

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

    3.getByInetAddress方法来确定一个IP地址属于哪一个网络接口。

    由于getByInetAddress方法必须使用一个InetAddress对象封装的IP地址来作为参数,因此,在使用getByInetAddress方法之前,必须先创建一个InetAddress对象。但要注意不能使用远程的IP的域名来创建InetAddress对象,否则getByInetAddress将返回null。

    4.实例方法的三个getter方法

      • getName方法得到一个网络接口的名称。这个名称就是使用getByName方法创建NetworkInterface对象时使用的网络接口名,如eth0、ppp0等。
      • getDisplayName方法可以得到更容易理解的网络接口名,也可以将这个网络接口名称为网络接口别名。在一些操作系统中(如Unix),getDisplayName方法和getName方法的返回值相同,但在Windows中getDisplayName方法一般会返回一个更为友好的名字,如Realtek RTL8139 Family PCI Fast Ethernet NIC。
      • getInetAddresse方法以InetAddress对象的形式返回和网络接口绑定的所有IP地址。
      package com.xing.studyTest.net;
      import java.net.InetAddress;
      import java.net.NetworkInterface;
      import java.net.SocketException;
      import java.net.UnknownHostException;
      import java.util.Enumeration;
      public class Network {
        public static void main(String[] args) {
          try {
            //一、五个静态方法获取接口信息
            //1.NetworkInterface可以通过getNetworkInterfaces方法来枚举本机所有的网络接口
            Enumeration<NetworkInterface> ni = NetworkInterface.getNetworkInterfaces();
            int i = 0;
            while(ni.hasMoreElements()) {
              i++;
              System.out.println("第"+i+"个本地接口:"+ni.nextElement());
            }
            //2.获取给定索引的网络接口
            NetworkInterface ni1 = NetworkInterface.getByIndex(1);
            System.out.println("getByIndex获取本地接口:"+ni1);
            //3.指定名称获取网络接口
            NetworkInterface ni2 = NetworkInterface.getByName("utun0");
            System.out.println("getByName获取本地接口:"+ni2);
            //4.确定一个IP地址属于哪一个网络接口
            try {
              NetworkInterface ni3 = NetworkInterface.getByInetAddress(InetAddress.getLocalHost());
              System.out.println("getByInetAddress获取本地接口:"+ni3);
            } catch (UnknownHostException e) {
              e.printStackTrace();
            }
            //二、实例方法
            System.out.println("getDisplayName获取此网络接口的显示名称"+ni1.getDisplayName());
            System.out.println("getHardwareAddress返回接口的硬件地址(通常为MAC)"+ni1.getHardwareAddress());
            System.out.println("getIndex返回此网络接口的索引"+ni1.getIndex());
            System.out.println("以InetAddress对象的形式返回和网络接口绑定的所有IP地址"+ni1.getInetAddresses());
            System.out.println("getInterfaceAddresses返回此网络接口的全部或子集的列表"+ni1.getInterfaceAddresses());
            System.out.println("getMTU返回此接口的最大传输单位(MTU)"+ni1.getMTU());
            System.out.println("getName获取此网络接口的名称"+ni1.getName());
            System.out.println("getParent返回此接口的父接口"+ni1.getParent());//如果此接口是子接口,或者null是物理(非虚拟)接口或没有父接口,则返回此接口的父NetworkInterface
            System.out.println("getSubInterfaces获得带有与此网络接口相连的所有子接口(也称为虚拟接口)的枚举"+ni1.getSubInterfaces());
            System.out.println("getInetAddresses获取绑定到此网络接口的所有或部分InetAddress的流"+ni1.getInetAddresses());
      //      System.out.println("subInterfaces获取连接到此网络接口的所有子接口(也称为虚拟接口)的流"+ni1.subInterfaces());//Java9以后才有的
            System.out.println("isLoopback返回网络接口是否为回送接口"+ni1.isLoopback());
            System.out.println("isPointToPoint返回网络接口是否为点对点接口"+ni1.isPointToPoint());
            System.out.println("isUp返回网络接口是否已启动并正在运行"+ni1.isUp());
            System.out.println("isVirtual返回此接口是否为虚拟接口(也称为子接口)"+ni1.isVirtual());
            System.out.println("supportsMulticast返回网络接口是否支持多播"+ni1.supportsMulticast());
          } catch (SocketException e) {
            e.printStackTrace();
          }
        }
      }

      image.gif

      END

      目录
      相关文章
      |
      1月前
      |
      人工智能 Java 物联网
      JAVA网络编程的未来:URL与URLConnection的无限可能,你准备好了吗?
      随着技术的发展和互联网的普及,JAVA网络编程迎来新的机遇。本文通过案例分析,探讨URL与URLConnection在智能API调用和实时数据流处理中的关键作用,展望其未来趋势和潜力。
      46 7
      |
      1月前
      |
      网络协议 Java 物联网
      Java网络编程知识点
      Java网络编程知识点
      45 13
      |
      1月前
      |
      安全 Java API
      深入探索Java网络编程中的HttpURLConnection:从基础到进阶
      本文介绍了Java网络编程中HttpURLConnection的高级特性,包括灵活使用不同HTTP方法、处理重定向、管理Cookie、优化安全性以及处理大文件上传和下载。通过解答五个常见问题,帮助开发者提升网络编程的效率和安全性。
      109 9
      |
      1月前
      |
      JSON 安全 算法
      JAVA网络编程中的URL与URLConnection:那些你不知道的秘密!
      在Java网络编程中,URL与URLConnection是连接网络资源的两大基石。本文通过问题解答形式,揭示了它们的深层秘密,包括特殊字符处理、请求头设置、响应体读取、支持的HTTP方法及性能优化技巧,帮助你掌握高效、安全的网络编程技能。
      69 9
      |
      1月前
      |
      JSON Java API
      JAVA网络编程新纪元:URL与URLConnection的神级运用,你真的会了吗?
      本文深入探讨了Java网络编程中URL和URLConnection的高级应用,通过示例代码展示了如何解析URL、发送GET请求并读取响应内容。文章挑战了传统认知,帮助读者更好地理解和运用这两个基础组件,提升网络编程能力。
      55 5
      |
      1月前
      |
      Java 网络安全 Maven
      Exception in thread "main" java.lang.NoSuchMethodError: okhttp3.OkHttpClient$Builder.sslSocketFactory(Ljavax/net/ssl/SSLSocketFactory;Ljavax/net/ssl/X509TrustManager;)Lokhttp3/OkHttpClient$Builder; 问题处理
      【10月更文挑战第26天】Exception in thread "main" java.lang.NoSuchMethodError: okhttp3.OkHttpClient$Builder.sslSocketFactory(Ljavax/net/ssl/SSLSocketFactory;Ljavax/net/ssl/X509TrustManager;)Lokhttp3/OkHttpClient$Builder; 问题处理
      43 2
      |
      2月前
      |
      Java
      [Java]Socket套接字(网络编程入门)
      本文介绍了基于Java Socket实现的一对一和多对多聊天模式。一对一模式通过Server和Client类实现简单的消息收发;多对多模式则通过Server类维护客户端集合,并使用多线程实现实时消息广播。文章旨在帮助读者理解Socket的基本原理和应用。
      33 1
      |
      1月前
      |
      网络协议 Unix Linux
      精选2款C#/.NET开源且功能强大的网络通信框架
      精选2款C#/.NET开源且功能强大的网络通信框架
      |
      2月前
      |
      弹性计算 Kubernetes 网络协议
      阿里云弹性网络接口技术的容器网络基础教程
      阿里云弹性网络接口技术的容器网络基础教程
      阿里云弹性网络接口技术的容器网络基础教程
      |
      2月前
      |
      存储 缓存 Ubuntu
      配置网络接口的“IP”命令10个
      【10月更文挑战第18天】配置网络接口的“IP”命令10个
      81 0