一个网卡(不太标准,应该叫做一个网络接口,一个网卡是可以拥有多个网络接口的,如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. openssh 在32位、64位操作系统上的安装配置

    openssh是安装在windows系统上的提供SSH服务的服务端软件,可以提供安全的命令行远程连接管理.下面介绍下openssh成功安装使用的操作步骤. 工具/原料   openssh window ...

  2. Java语言主要特点有哪些?

    1.简单 Java最初是为对家用电器进行集成控制而设计的一种语言,因此它必须简单明了.Java语言的简单性主要体现在以下三个方面: 1) Java的风格类似于C++,因而C++程序员是非常熟悉的.从某 ...

  3. Spring之导入和混合配置

    在典型的Spring应用中,我们可能会同时使用自动化和显式配置.即便你更喜欢通过JavaConfig实现显式配置,但有的时候XML却是最佳的方案.幸好在Spring中,这些配置方案都不是互斥的.你尽可 ...

  4. java 控制台 输入字符串

    import java.util.Scanner; //导入输入类 public static void main(String[] args) {      //创建输入对象   Scanner s ...

  5. Maven中dependencyManagement使用

    在Maven中dependencyManagement的作用其实相当于一个对所依赖jar包进行版本管理的管理器. 在dependencyManagement下申明的dependencies,Maven ...

  6. PHP 性能优化之 PHP-FPM

    简介: PHP-FPM 是一个 PHP FastCGI 管理器,一般 Nginx 上面跑 PHP 程序都会将 PHP 程序丢给 PHP-FPM 来解析.好了,就这样! PHP 5.4 开始集成了 PH ...

  7. iOS学习之UINavigationController详解与使用(二)页面切换和segmentedController

    iOS学习之UINavigationController详解与使用(一)添加UIBarButtonItem是上篇,我们接着讲UINavigationController的重要作用,页面的管理和切换. ...

  8. 高性能Web服务器Nginx的配置与部署研究(16)小议location匹配模式优先级

    1 location 的匹配符 1.1 等于匹配符:= 等于匹配符就是等号,特点可以概括为两点: 精确匹配 不支持正则表达式 1.2 空匹配符 空匹配符的特点是: 匹配以指定模式开始的 URI 不支持 ...

  9. ansible playbook模式及语法

    一.什么是playbook及其组成 什么是playbook playbook 翻译过来就是"剧本" playbook的组成 play:定义的是主机的角色 task:定义的是具体执行 ...

  10. pymsql的简单实用方法

    在进行本文以下内容之前需要注意: 1.你有一个MySQL数据库,并且已经启动. 2.你有可以连接该数据库的用户名和密码 3.你有一个有权限操作的database 连接数据库 #导入pymsql imp ...