码迷,mamicode.com
首页 > 编程语言 > 详细

Java获取本地环境所有网卡及每个网卡的所有网络配置

时间:2015-08-08 10:17:05      阅读:493      评论:0      收藏:0      [点我收藏+]

标签:

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

  

Java获取本地环境所有网卡及每个网卡的所有网络配置

标签:

原文地址:http://www.cnblogs.com/guangshan/p/4712550.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!