Java API研究:获取本地环境所有网卡及每个网卡的所有网络配置
一个网卡(不太标准,应该叫做一个网络接口,一个网卡是可以拥有多个网络接口的,如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() 获取此网络接口的名称。 |
|
|
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研究:获取本地环境所有网卡及每个网卡的所有网络配置的更多相关文章
- java api如何获取kafka所有Topic列表,并放置为一个list
kafka内部所有的实现都是通过TopicCommand的main方法,通过java代码调用API,TopicCommand.main(options)的方式只能打印到控制台,不能转换到一个list. ...
- 大数据之环境准备系列 ——第二篇 新装VMware 虚拟机 网络配置(NAT模式)
新安装虚拟机,需要配置网络环境,才可以使用ssh客户端(如xshell)远程登录 和 虚拟机访问Internet. 一. WMware 软件配置 WMware版本号:11.0.0 build-2305 ...
- Java准确地获取本地IP地址
问题 用Java获取本机IP地址,需要处理: 1. 多块网卡. 2. 排除loopback设备.虚拟网卡 看似简单的代码,写起来还是要小心一些的. 方案 HBase客户端获取本机IP的代码提供了一个很 ...
- 使用java API操作HDFS-相关环境的设置
用于装在编译类,即为hadoop的类路径 退出后重新登录,再使用env检查. jps可以直接使用了,表示已经设置成功. 在myclass之中创建类文件,这个myclass目录是自己创建的.
- mybatis Java API
既然你已经知道如何配置 MyBatis 和创建映射文件,你就已经准备好来提升技能了. MyBatis 的 Java API 就是你收获你所做的努力的地方.正如你即将看到的,和 JDBC 相比, MyB ...
- Java数据持久层框架 MyBatis之API学习八(Java API详解)
对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...
- MyBatis——Java API
Java API 既然你已经知道如何配置 MyBatis 和创建映射文件,你就已经准备好来提升技能了. MyBatis 的 Java API 就是你收获你所做的努力的地方.正如你即将看到的,和 JDB ...
- Mybatis学习--Java API
学习笔记,选自Mybatis官方中文文档:http://www.mybatis.org/mybatis-3/zh/java-api.html#directoryStructure 既然你已经知道如何配 ...
- 【Kafka入门】搭建Kafka本地环境
本博文介绍如何一步步搭建起Kafka本地环境. 下载Kafka 0.9.0.0 并配置软链接 下载好后,放入电脑本地安装目录,mac下我放在/usr/local下,解压Kafka. -0.9.0.0. ...
随机推荐
- openssh 在32位、64位操作系统上的安装配置
openssh是安装在windows系统上的提供SSH服务的服务端软件,可以提供安全的命令行远程连接管理.下面介绍下openssh成功安装使用的操作步骤. 工具/原料 openssh window ...
- Java语言主要特点有哪些?
1.简单 Java最初是为对家用电器进行集成控制而设计的一种语言,因此它必须简单明了.Java语言的简单性主要体现在以下三个方面: 1) Java的风格类似于C++,因而C++程序员是非常熟悉的.从某 ...
- Spring之导入和混合配置
在典型的Spring应用中,我们可能会同时使用自动化和显式配置.即便你更喜欢通过JavaConfig实现显式配置,但有的时候XML却是最佳的方案.幸好在Spring中,这些配置方案都不是互斥的.你尽可 ...
- java 控制台 输入字符串
import java.util.Scanner; //导入输入类 public static void main(String[] args) { //创建输入对象 Scanner s ...
- Maven中dependencyManagement使用
在Maven中dependencyManagement的作用其实相当于一个对所依赖jar包进行版本管理的管理器. 在dependencyManagement下申明的dependencies,Maven ...
- PHP 性能优化之 PHP-FPM
简介: PHP-FPM 是一个 PHP FastCGI 管理器,一般 Nginx 上面跑 PHP 程序都会将 PHP 程序丢给 PHP-FPM 来解析.好了,就这样! PHP 5.4 开始集成了 PH ...
- iOS学习之UINavigationController详解与使用(二)页面切换和segmentedController
iOS学习之UINavigationController详解与使用(一)添加UIBarButtonItem是上篇,我们接着讲UINavigationController的重要作用,页面的管理和切换. ...
- 高性能Web服务器Nginx的配置与部署研究(16)小议location匹配模式优先级
1 location 的匹配符 1.1 等于匹配符:= 等于匹配符就是等号,特点可以概括为两点: 精确匹配 不支持正则表达式 1.2 空匹配符 空匹配符的特点是: 匹配以指定模式开始的 URI 不支持 ...
- ansible playbook模式及语法
一.什么是playbook及其组成 什么是playbook playbook 翻译过来就是"剧本" playbook的组成 play:定义的是主机的角色 task:定义的是具体执行 ...
- pymsql的简单实用方法
在进行本文以下内容之前需要注意: 1.你有一个MySQL数据库,并且已经启动. 2.你有可以连接该数据库的用户名和密码 3.你有一个有权限操作的database 连接数据库 #导入pymsql imp ...