NetworkInterface类

news2025/1/13 3:11:02

文章目录

    • 1. 简介
    • 2. 工厂方法
    • 3. 获取方法

1. 简介

NetworkInterface类表示一个本地IP地址。这可以是一个物理接口,如额外的以太网卡(常见于防火墙和路由器),也可以是一个虚拟接口,与机器的其它IP地址绑定到同个物理硬件。NetworkInterface类提供了一些方法可以枚举所有本地地址(而不考虑接口),并由它们创建InetAddress对象,然后这些InetAddress对象(这篇博客)可用于创建Socket、服务器Socket等。使用NetworkInterface类,您可以执行以下操作:

  • 获取系统上的所有网络接口:您可以使用getNetworkInterfaces()方法获取当前系统上的所有网络接口。这将返回一个Enumeration对象,您可以使用它来迭代系统上的每个网络接口。

  • 获取网络接口的属性:对于每个网络接口,您可以使用NetworkInterface类的方法来获取各种属性,如接口名称、硬件地址(MAC地址)、IP地址、子网掩码、广播地址等。

  • 配置网络接口:您可以使用NetworkInterface类的方法来配置网络接口。您可以启用或禁用接口,设置IP地址、子网掩码、广播地址等。

  • 监视网络接口:NetworkInterface类还提供了一些方法,用于监视网络接口的状态和统计信息。您可以获取接口的传输速度、收发数据包的数量等。

需要注意的是,NetworkInterface类是Java编程语言中的一部分,并且可以在Java的java.net包中找到。您可以使用Java的网络编程功能来使用和操作NetworkInterface类。

2. 工厂方法

由于NetworkInterface对象表示物理硬件和虚拟地址,所以不能任意构造。与InetAddress类一样,有一些静态工厂方法可以返回与某个网络接口关联的NetworkInterface对象。可以通过IP地址、名字或枚举来请求一个NetworkInterface

  • public static NetworkInterface getByname(String name) throws SocketException

该方法返回一个NetworkInterface对象,表示有指定名字的网络接口。如果没有这样一个接口,则返回null。如果在查找相关网络接口是底层网络栈遇到问题,会抛出一个SocketException异常,不过这种情况不太可能发生,名字的格式与平台有关,在典型的UNIX系统中,以太网接口名形式为eth0、eth1等。本地回送地址的名字可能类似于“lo"。在windows上,名字类似是以“CE31”和“ELX100”的字符串,取自这个特定网络接口的厂商名和硬件模型名。

public class QuizCardBuilder {
    public static void main(String[] args) {
        try {
           //获得mac的网络接口
          NetworkInterface ni=NetworkInterface.getByName("lo0");
            System.out.println(ni);
          if(ni==null){
              System.err.println("No sucn interface:ehto");
          }
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }
}

在这里插入图片描述

  • public static NetworkInterface getByInetAddress(InetAddress address) throws SocketException

该方法返回一个NetworkInterface对象,表示与指定IP地址绑定的网络接口。如果本地主机上没有网络接口与这个ip地址绑定,则返回null。如果发生错误,则抛出一个SocketException。

public class QuizCardBuilder {
    public static void main(String[] args) {
        try {
          InetAddress local=InetAddress.getByName("192.168.31.41");
          NetworkInterface ni=NetworkInterface.getByInetAddress(local);
          System.out.println(ni);
          if(ni==null){
              System.err.println("No sucn interface:ehto");
          }
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (UnknownHostException e) {
            throw new RuntimeException(e);
        }
    }
}

在这里插入图片描述
在这里插入图片描述

  • public static Enumeration getNetworkInterfaces() throws SocketException

该方法返回一个枚举对象,这会列出本地主机上的所有网络接口

public class QuizCardBuilder {
    public static void main(String[] args) {
        try {
          Enumeration<NetworkInterface> ni=NetworkInterface.getNetworkInterfaces();
          System.out.println();
          while(ni.hasMoreElements()){
              NetworkInterface ni2=ni.nextElement();
              System.out.println(ni2);
          }
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }
}

在这里插入图片描述

3. 获取方法

有了NetworkInterface对象,就可以查询其IP地址和名字。这几乎是这些对象能完成的唯一操作。

  • public Enumertion geInetAddresses()

一个网络接口可以绑定多个IP地址。现在这种情况不太常见,但确实是存在的。getInetAddresses()方法返回一个java.util.Enumeration,其中对于与这个接口绑定的每一个IP地址都包含一个InetAddress。

public class QuizCardBuilder {
    public static void main(String[] args) {
        try {
          NetworkInterface ehtho=NetworkInterface.getByName("utun4");
          Enumeration addresses=ehtho.getInetAddresses();
          while (addresses.hasMoreElements()){
              System.out.println(addresses.nextElement());
          }
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }
}
  • public String getName()

该方法返回某个特定NetworkInterface对象的名,如eth0或lo

public class QuizCardBuilder {
    public static void main(String[] args) {
        try {
          NetworkInterface ehtho=NetworkInterface.getByName("utun4");
          String addresses=ehtho.getName();
          System.out.println(addresses);
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }
}

在这里插入图片描述

  • public String getDisplayName()

该方法声称可以返回特定NetworkInterface的一个更友好的名字,类似于"Ethernet Card 0"。

public class QuizCardBuilder {
    public static void main(String[] args) {
        try {
          NetworkInterface ehtho=NetworkInterface.getByName("utun4");
          String addresses=ehtho.getDisplayName();
          System.out.println(addresses);
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/560774.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ensp实践dhcp服务

ensp实践dhcp服务 1、dhcp接口分配模式2、dhcp接口地址池分配模式3、dhcp布拉布拉布拉 1、dhcp接口分配模式 1.1、路由器AR1配置dhcp动态获取 <Huawei>system-view [Huawei]interface g0/0/0 [Huawei-GigabitEthernet0/0/0]ip address 10.1.1.1 24 [Huawei-GigabitEthe…

PixiJS 源码解读:绘制矩形,底层都做了什么?

大家好&#xff0c;我是前端西瓜哥&#xff0c;今天带大家看一下 PixiJS 的源码实现。 PixiJS 是一个非常流行的 Canvas 库&#xff0c;start 数将近 4w。 使用 PixiJS 简单易用的 API&#xff0c;我们可以在浏览器页面的 Canvas 元素上高性能地绘制图形&#xff0c;实现流畅…

基于深度学习的交通标志检测和识别(从原理到环境配置/代码运行)

项目是一个基于Python和OpenCV的交通标志检测和识别项目,旨在使用计算机视觉和深度学习技术对交通标志进行检测和分类。本文将从介绍项目原理和框架开始,详细介绍该项目的实现过程和技术细节,最后给出项目的安装和使用方法。 前后结果对比 识别前 识别后 一、 项目原理和框…

随身WIFI折腾日记(一)---霓虹灯

引言 通过对高通410芯片的随身WIFI刷写Debain系统&#xff0c;我们已经拥有了一台带4G功能的迷你ARM64单板电脑。现在我们可以基于此此平台进行一下二次开发。 随身WIFI的优势就是价格低廉&#xff0c;性能和树莓派zero2、树莓派3b差不多。 硬件配置如下&#xff1a; msm89…

随身WIFI折腾日记(二)---文件传输和软件安装

二、文件传输 我们可以通过SCP和SFTP工具和随身WIFI(USB连接)进行数据传输&#xff0c;上图以scp工具为例。 将本地电脑文件传输至随身WIFI&#xff0c;本地电脑上输入如下指令即可&#xff1a; scp /path/to/local/file user192.168.68.1:/path/to/remote/directory/注意&…

RK3568平台开发系列讲解(驱动基础篇)10min带你获取、了解与编译Kernel源代码

🚀返回专栏总目录 文章目录 一、Kernel获取二、Kernel根目录2.1 Documentation/2.1 arch/2.2 block/2.3 boot.its2.4 drivers/2.5 firmware/2.6 fs/2.7 include/2.8 init/2.9 ipc/2.10 kernel/2.11 lib/2.12 lo

(转载)从0开始学matlab(第13天)—画图进阶

我们将讨论简单的二维图象(之前已有所介绍)的附加特性。这些特性将允许我们控制 x&#xff0c;y 轴上的值的范围&#xff0c;在一个坐标系内打印多个图象&#xff0c;或创建多个图&#xff0c;或在一个图象窗口内创建多个子图像&#xff0c;或提供更加强大的轨迹文本字符控制。…

【c语言】全部知识点总结

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ …

前端如何做单元测试? 看这篇就入门了

前言 对于现在的前端工程&#xff0c;一个标准完整的项目&#xff0c;通常情况单元测试是非常必要的。但很多时候我们只是完成了项目而忽略了项目测试。我认为其中一个很大的原因是很多人对单元测试认知不够&#xff0c;因此我写了这边文章&#xff0c;一方面期望通过这篇文章…

基于DDSRF正负序分离方法的不平衡电网PQ控制策略_平衡电流控制

0.前言 对于并网逆变器而言&#xff0c;电网会存在不平衡的情况。在这种情况下&#xff0c;不平衡的电网电压可以分解成为正序、负序和零序分量。并网逆变器通常期望能够实现单位功率因数并网&#xff0c;向电网注入对称的正弦电流&#xff0c;所以此时的微电网逆变器控制策略显…

DC-9靶机-简单谈一下端口敲门技术 (Port Knocking)

前言 在打靶机DC-9时&#xff0c;爆破SSH时一直显示失败&#xff0c;经过查阅才知道原来是对端口做了“隐藏”&#xff0c;需要通过 Port Knocking 来主动开启&#xff0c;由于平时接触到的机会不多&#xff0c;所以这里简单记录一下&#xff0c;加强一下印象&#xff0c;也希…

Systrace系列7 —— Vsync 解读

本文主要是是介绍 Android 中的 Vsync 机制。文章会从 Systrace 的角度来看 Android 系统如何基于 Vsync 每一帧的展示。Vsync 是 Systrace 中一个非常关键的机制,虽然我们在操作手机的时候看不见,摸不着,但是在 Systrace 中我们可以看到,Android 系统在 Vsync 信号的指引下…

Tomcat系统架构浅析

大家好&#xff0c;我是易安&#xff01; 今天咱们就来一步一步分析Tomcat的设计思路&#xff0c;看看Tomcat的设计者们是如何设计一个复杂系统&#xff0c;怎么设计顶层模块&#xff0c;以及模块之间的关系。 Tomcat总体架构 我们知道如果要设计一个系统&#xff0c;首先是要…

特征缩放(Scale Features)、特征缩放预测​CO2 值、df列索引扩展

目录 1、特征缩放 2、预测CO2 值 3、df列索引扩展 1、特征缩放 特征缩放可以用于不同的度量单位。度量单位不同的情况下&#xff0c;特征的数值大小也会有所不同&#xff0c;这可能会影响到某些机器学习算法的表现。例如&#xff0c;如果一个特征的单位是英寸&#xff0c;而另…

DAB-DETR代码学习笔记

先上一张整体架构图 &#xff1a; 代码地址&#xff1a;GitHub - IDEA-Research/DAB-DETR: [ICLR 2022] DAB-DETR: Dynamic Anchor Boxes are Better Queries for DETR 论文地址&#xff1a; https://arxiv.org/pdf/2201.12329.pdf 文章全名《DYNAMIC ANCHOR BOXES ARE BETTER …

建模杂谈系列223 Q-Learning示例的代码拆解分析

说明 找到了一个合适的例子&#xff0c;然后我对其中的内容进行了拆解分析。我觉得代码表达的内容比伪代码清晰多了。 这次算是补砖了(监督无监督强化)&#xff0c;过去实际上接触过很多强化体系内的基本工具&#xff0c;但一直没有开始做&#xff0c;部分原因是没时间&#…

Java 与排序算法(5):归并排序

一、归并排序 归并排序&#xff08;Merge Sort&#xff09;是一种基于分治思想的排序算法。它将待排序的数组分成两个长度相等的子数组&#xff0c;然后对这两个子数组分别进行归并排序&#xff0c;最后将两个排好序的子数组合并成一个有序的数组。 具体实现过程如下&#xf…

【国内chatgpt使用方法合集】(5月22日已更新)

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…

Elasticsearch文档操作:初学者指南(2023年最新版包含DSL语句的使用和RestHighLevelClient在Java中的使用)

2023年还没有学习Elasticsearch?&#xff0c;那么您将错过最强大、最通用的编程语言之一。 本文将介绍在Elasticsearch对文档分别使用DSL语句和Java High Level REST ClientAPI来对文档进行操作。获取更多信息查看官网帮助文档 运行环境&#xff1a; Linux&#xff0c;docke…

驱动开发DAY6

非阻塞IO 在应用程序中读取硬件数据时&#xff0c;无论硬件数据是否准备完毕&#xff0c;read&#xff08;&#xff09;函数不会阻塞&#xff0c;继续向下执行 阻塞IO 当应用程序中读取硬件数据时&#xff0c;在硬件数据没有准备好时&#xff0c;进程会阻塞在read&#xff08;&…