一個網卡(不太標准,應該叫做一個網絡接口,一個網卡是可以擁有多個網絡接口的,如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 是否是站點本地地址的實用例行程序。 |
