一个网卡(不太标准,应该叫做一个网络接口,一个网卡是可以拥有多个网络接口的,如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. C++ primer plus

    给cout指针,默认打印指针地址,但如果指针的类型的char*,将打印指向的字符串,如果要显示的是字符串的地址,将指针强制转换为另一种类型 char* animal cout << ani ...

  2. Octave中调用hist出现broken pipe some output may be lost octave的解决(Mac)

    参考:http://octave.1599824.n4.nabble.com/Mac-OS-X-Mountain-Lion-Octave-can-not-execute-sombrero-td4643 ...

  3. Ubuntu TIP

    recovery进系统硬盘是挂载为“只读”的,要想改文件需要remount / 并且添加“w”(写权限). 进一次crub,再root进入 折腾几次似乎就可以编辑磁盘上的文件了

  4. 一次性show 出所有配置

    cisco的全页打印显示配置信息的命令: #terminal length 0 #show run 华为和H3C的全页打印显示配置信息的命令: ]user-interface vty 0 4 ]scr ...

  5. windows共享连接显示无法打开

    Ping目标地址和名称可以连通,但是访问告知无法打开或找到名称,看凭据设置正常,重启无效. 判断:可能是由于凭据过期引起,更新凭据,重启,仍旧无效. 修改IP地址进行访问,成功打开. 清理网络连接状态 ...

  6. flutter container image FittedBox AspectRatio

    当container指定了大小时,里面放入图片后,图片是居中自适应的,根据图片的大小,垂直居中或者水平居中.因为Image的默认自适应就是Contain, BoxFit.Contain 如果conta ...

  7. Zabbix Agent 自动、主动注册

    简述: 今天来研究一下 Zabbix 的主动注册功能. 当你有十台机器需要监控时,你手动去添加是没有问题的.但是当你有五十台.上百台或更多服务器要监控时,你会怎么做 ? Active Agent Au ...

  8. 关于setTimeout()你所不知道的地方

    前言:看了这篇文章,1.注意setTimeout引用的是全部变量还是局部变量了,当直接调用外部函数方法时,实际上函数内部的变量已经变成全 局.2.提醒我防止出错的,用匿名函数不容易出错.3.setTi ...

  9. Excel VBA入门(七)注释、宏按钮及错误处理

    系统性的知识前面已经讲完,从本章开始,本系列教程涉及的将会是一些相对凌散的内容. 1. 注释 代码注释是一件利人利己的事,为了方便自己在代码需要更新修改时,依然能够快速地看懂自己完的每一行代码到底是什 ...

  10. java tomcat报错: Starting Tomcat v7.0 Server at localhost' has encountered a problem问题

    运行web项目的时候出现下面错误: 出现这个问题的原因是 这个tomcat在其他项目中正在运行 关掉即可.