一个网卡(不太标准,应该叫做一个网络接口,一个网卡是可以拥有多个网络接口的,如SoftAP)拥有一套网络配置:ip地址,子网掩码,网关,dns等等。

  自java 1.6开始,提供了访问网络配置的一些接口:

  java.net.NetworkInterface(自1.4开始)

  此类表示一个由名称和分配给此接口的 IP 地址列表组成的网络接口。它用于标识加入多播组的本地接口。 接口通常是按名称(如 "le0")区分的。  

  java.net.InterfaceAddress(自1.6开始)

  此类表示网络接口地址。简言之,对于 IPv4 地址,是指 IP 地址、子网掩码和广播地址。对于 IPv6 地址,是指 IP 地址和网络前缀长度。

  java.net.InetAddress与子类Inet4Address、Inet6Address

  地址分为组播地址,回送地址,单播地址(真正取本机IP时用这个取)

其中方法详解:java.net.NetworkInterface

 boolean equals(Object obj) 将此对象与指定对象比较。
static NetworkInterface getByInetAddress(InetAddress addr) 一个便捷方法,搜索绑定了指定 Internet 协议 (IP) 地址的网络接口。
static NetworkInterface getByName(String name) 搜索具有指定名称的网络接口。
 String getDisplayName() 获取此网络接口的显示名称。
 byte[] getHardwareAddress()  如果存在硬件地址并可以使用给定的当前权限访问,则返回该硬件地址(通常是 MAC)。
Enumeration<InetAddress> getInetAddresses() 一个便捷方法,返回一个具有绑定到此网络接口全部或部分 InetAddress 的 Enumeration。
List<InterfaceAddress> getInterfaceAddresses()   获取此网络接口的全部或部分 InterfaceAddresses 所组成的列表。
 int getMTU()  返回此接口的最大传输单元(Maximum Transmission Unit,MTU)。
 String getName()  获取此网络接口的名称。

static Enumeration<NetworkInterface>

getNetworkInterfaces() 返回此机器上的所有接口。
 NetworkInterface getParent() 如果此接口是子接口,则返回它的父 NetworkInterface;如果它是物理(非虚拟)接口或没有父接口,则返回 null
Enumeration<NetworkInterface> getSubInterfaces() 获取具有连接到此网络接口的所有子接口(也称虚拟接口)的 Enumeration。
 int hashCode() 返回该对象的哈希码值。
 boolean isLoopback() 返回网络接口是否是回送接口。
 boolean isPointToPoint() 返回网络接口是否是点对点接口。
 boolean isUp() 返回网络接口是否已经开启并运行。
 boolean isVirtual()  返回此接口是否是虚拟接口(也称为子接口)。
 boolean supportsMulticast()  返回网络接口是否支持多址广播。
 String toString() 返回该对象的字符串表示。

  需要特别关注的是:

  1、getNetworkInterfaces(),此静态方法用去获取所有本机的NetworkInterface,这个是获取地址的第一步,通过遍历此返回值的枚举,来获取本机所有网卡的地址。

  2、其余的非静态方法,都是一个NetworkInterface实例的方法。

  3、取到实例之后,可以判断是否是回送地址,是的情况下可排除。是否是虚拟接口,是的情况下可排除。是否开启并运行,否的情况下可排除。

  4、一个物理网卡下,可有多个虚拟接口,有两个方法就是获取这些虚拟接口的。

  5、获取网卡名(如Linux下的eth0)getDisplayName(),getName(). 获取mac地址:getHardwareAddress()

  6、取InterfaceAddress实例。getInterfaceAddresses() ,返回一个InterfaceAddress的List,是该NetworkInterface下所有的InterfaceAddress。

  7、若想跳过取InterfaceAddress直接取IP地址,可调用getInetAddresses() 方法,返回的是一个InetAddress的枚举。

  InterfaceAddress

 boolean equals(Object obj)  将此对象与指定对象比较。
 InetAddress getAddress() 返回此地址的 InetAddress
 InetAddress getBroadcast() 返回此 InterfaceAddress 广播地址的 InetAddress
 short getNetworkPrefixLength() 返回此地址的网络前缀长度。用来取子网掩码
 int hashCode() 返回此接口地址的哈希码。
 String toString()  将此接口地址转换为 String

  

InetAddress

 boolean equals(Object obj)  将此对象与指定对象比较。
 byte[] getAddress()  返回此 InetAddress 对象的原始 IP 地址。
static InetAddress[] getAllByName(String host)  在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组。
static InetAddress getByAddress(byte[] addr)  在给定原始 IP 地址的情况下,返回 InetAddress 对象。
static InetAddress getByAddress(String host, byte[] addr)  根据提供的主机名和 IP 地址创建 InetAddress。
static InetAddress getByName(String host)  在给定主机名的情况下确定主机的 IP 地址。
 String getCanonicalHostName() 获取此 IP 地址的完全限定域名。
 String getHostAddress() 返回 IP 地址字符串(以文本表现形式)。
 String getHostName() 获取此 IP 地址的主机名。
static InetAddress getLocalHost() 返回本地主机。
 int hashCode() 返回此 IP 地址的哈希码。
 boolean isAnyLocalAddress() 检查 InetAddress 是否是通配符地址的实用例行程序。
 boolean isLinkLocalAddress() 检查 InetAddress 是否是链接本地地址的实用例行程序。
 boolean isLoopbackAddress() 检查 InetAddress 是否是回送地址的实用例行程序。
 boolean isMCGlobal() 检查多播地址是否具有全局域的实用例行程序。
 boolean isMCLinkLocal() 检查多播地址是否具有链接范围的实用例行程序。
 boolean isMCNodeLocal() 检查多播地址是否具有节点范围的实用例行程序。
 boolean isMCOrgLocal() 检查多播地址是否具有组织范围的实用例行程序。
 boolean isMCSiteLocal()  检查多播地址是否具有站点范围的实用例行程序。
 boolean isMulticastAddress() 检查 InetAddress 是否是 IP 多播地址的实用例行程序。
 boolean isReachable(int timeout)  测试是否可以达到该地址。
 boolean isReachable(NetworkInterface netif, int ttl, int timeout) 测试是否可以达到该地址。  用某个if测试是否可通
 boolean isSiteLocalAddress() 检查 InetAddress 是否是站点本地地址的实用例行程序。
 String toString()  将此 IP 地址转换为 String

  此类没有构造方法,只能通过几个静态方法来生成对象实例。

  1、getAddress取原始byte[]数组ip地址

  2、isReachable相当于ping

  其子类Inet4Address  

boolean equals(Object obj) 将此对象与指定对象比较。
 byte[] getAddress() 返回此 InetAddress 对象的原始 IP 地址。
 String getHostAddress() 返回 IP 地址字符串(以文本表现形式)。
 int hashCode() 返回此 IP 地址的哈希码。
 boolean isAnyLocalAddress() 检查 InetAddress 是否是通配符地址的实用例行程序。
 boolean isLinkLocalAddress()  检查 InetAddress 是否是链接本地地址的实用例行程序。
 boolean isLoopbackAddress()  检查 InetAddress 是否是回送地址的实用例行程序。
 boolean isMCGlobal()  检查多播地址是否具有全局范围的实用例行程序。
 boolean isMCLinkLocal() 检查多播地址是否具有链接范围的实用例行程序。
 boolean isMCNodeLocal()  检查多播地址是否具有节点范围的实用例行程序。
 boolean isMCOrgLocal() 检查多播地址是否具有组织范围的实用例程。
 boolean isMCSiteLocal()  检查多播地址是否具有站点范围的实用例行程序。
 boolean isMulticastAddress()  检查 InetAddress 是否是 IP 多播地址的实用例行程序。
 boolean isSiteLocalAddress()  检查 InetAddress 是否是站点本地地址的实用例行程序。

Java API研究:获取本地环境所有网卡及每个网卡的所有网络配置的更多相关文章

  1. java api如何获取kafka所有Topic列表,并放置为一个list

    kafka内部所有的实现都是通过TopicCommand的main方法,通过java代码调用API,TopicCommand.main(options)的方式只能打印到控制台,不能转换到一个list. ...

  2. 大数据之环境准备系列 ——第二篇 新装VMware 虚拟机 网络配置(NAT模式)

    新安装虚拟机,需要配置网络环境,才可以使用ssh客户端(如xshell)远程登录 和 虚拟机访问Internet. 一. WMware 软件配置 WMware版本号:11.0.0 build-2305 ...

  3. Java准确地获取本地IP地址

    问题 用Java获取本机IP地址,需要处理: 1. 多块网卡. 2. 排除loopback设备.虚拟网卡 看似简单的代码,写起来还是要小心一些的. 方案 HBase客户端获取本机IP的代码提供了一个很 ...

  4. 使用java API操作HDFS-相关环境的设置

    用于装在编译类,即为hadoop的类路径 退出后重新登录,再使用env检查. jps可以直接使用了,表示已经设置成功. 在myclass之中创建类文件,这个myclass目录是自己创建的.

  5. mybatis Java API

    既然你已经知道如何配置 MyBatis 和创建映射文件,你就已经准备好来提升技能了. MyBatis 的 Java API 就是你收获你所做的努力的地方.正如你即将看到的,和 JDBC 相比, MyB ...

  6. Java数据持久层框架 MyBatis之API学习八(Java API详解)

    对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...

  7. MyBatis——Java API

    Java API 既然你已经知道如何配置 MyBatis 和创建映射文件,你就已经准备好来提升技能了. MyBatis 的 Java API 就是你收获你所做的努力的地方.正如你即将看到的,和 JDB ...

  8. Mybatis学习--Java API

    学习笔记,选自Mybatis官方中文文档:http://www.mybatis.org/mybatis-3/zh/java-api.html#directoryStructure 既然你已经知道如何配 ...

  9. 【Kafka入门】搭建Kafka本地环境

    本博文介绍如何一步步搭建起Kafka本地环境. 下载Kafka 0.9.0.0 并配置软链接 下载好后,放入电脑本地安装目录,mac下我放在/usr/local下,解压Kafka. -0.9.0.0. ...

随机推荐

  1. django之jquery完成ajax

    使用Ajax 使用视图通过上下文向模板中传递数据,需要先加载完成模板的静态页面,再执行模型代码,生成最张的html,返回给浏览器,这个过程将页面与数据集成到了一起,扩展性差 改进方案:通过ajax的方 ...

  2. Netty生产级的心跳和重连机制

    今天研究的是,心跳和重连,虽然这次是大神写的代码,但是万变不离其宗,我们先回顾一下Netty应用心跳和重连的整个过程: 1)客户端连接服务端 2)在客户端的的ChannelPipeline中加入一个比 ...

  3. MyEclipse显示 Install new software 在线安装插件选项

    转自:https://blog.csdn.net/greatpresident/article/details/8950869 昨天不知道怎么就删除了电脑中的eclipse 我x,还原不回来了. 今天 ...

  4. ATL项目编译注册dll的时候报权限错误:error MSB8011: Failed to register output. Please try enabling Per-user Redirection or register the component from a command prompt with elevated permissions.

    atl工程在vs2013编译的时候会在编译成功之后去使用 regsvr32 去注册 生成的 .dll 偶尔在编译的时候会遇到下面的错误: error MSB8011: Failed to regist ...

  5. 解决linux下root运行Elasticsearch异常

    如果以root身份运行将会出现以下问题 root@yxjay:/opt/elasticsearch-2.3.5/bin# ./elasticsearchException in thread &quo ...

  6. spring与IOC,ioc与di的关系

  7. 网络编程基础之Socket套接字

    一.Socket介绍 1.什么是socket? Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族 ...

  8. Python与Go选择排序

    #!/usr/bin/env python # -*- coding: utf-8 -*- # 选择排序 # 时间复杂度O(n^2) def selection_sort(array): length ...

  9. 网页静态化解决方案:Freemarker生成简单html页面

    FreeMarker 是一个用 Java 语言编写的模板引擎,它基于模板来生成文本输出.FreeMarker与 Web 容器无关,即在 Web 运行时,它并不知道 Servlet 或 HTTP.它不仅 ...

  10. labelme2COCO

    # -*- coding:utf-8 -*-# !/usr/bin/env python import argparseimport jsonimport matplotlib.pyplot as p ...