java獲取ip地址與網(wǎng)絡(luò)接口的方法示例
java.net包
大家應(yīng)該都知道,網(wǎng)絡(luò)相關(guān)對象在java.net包中,Java net包下的類如下:
1.獲取主機(jī)對象InetAddress
//獲取本地主機(jī)對象 InetAddress host = InetAddress.getLocalHost(); //根據(jù)ip地址或主機(jī)名獲取主機(jī)對象,以主機(jī)名獲取主機(jī)時(shí)需要DNS解析 InetAddress host = InetAddress.getByName("192.168.100.124"); InetAddress host = InetAddress.getByName(www.baidu.com);
2.獲取主機(jī)對象的ip地址和主機(jī)名(需要dns解析主機(jī)名)
host.getHostAddress(); host.getHostName();
3.獲取本機(jī)所有接口NetworkInterface并遍歷
//返回?cái)?shù)據(jù)類型為Enumeration Enumeration<NetworkInterface> enu = NetworkInterface.getNetworkInterfaces(); while(enu.hasMoreElements){ NetworkInterface inet = enu.nextElement(); String intName = inet.getName(); }
由于一個(gè)接口上可能有多個(gè)子接口(輔助ip,如eth0:1),因此根據(jù)某個(gè)接口,可以得到該接口的所有ip地址枚舉集合(同時(shí)包括Ipv4和ipv6接口)。
Enumeration<InetAddress> net_list = inet.getInetAddresses(); while(net_list.hasMoreElements){ InetAddress net = net_list.nextElement(); String ip = net.getHostAddress(); }
可以使用Collections.list()方法將Enumeration類型轉(zhuǎn)換為ArrayList集合的數(shù)據(jù)結(jié)構(gòu),然后使用Itreator遍歷器遍歷。
以下是獲取本機(jī)所有接口名稱和這些接口上的ipv4地址的方法(適用于Windows和Linux)。
import java.net.*; import java.util.*; public class EnumDemo { public static void main(String[] args) { try { //獲取所有接口,并放進(jìn)枚舉集合中,然后使用Collections.list()將枚舉集合轉(zhuǎn)換為ArrayList集合 Enumeration<NetworkInterface> enu = NetworkInterface.getNetworkInterfaces(); ArrayList<NetworkInterface> arr = Collections.list(enu); for(Iterator<NetworkInterface> it = arr.iterator();it.hasNext();) { NetworkInterface ni = it.next(); String intName = ni.getName(); //獲取接口名 //獲取每個(gè)接口中的所有ip網(wǎng)絡(luò)接口集合,因?yàn)榭赡苡凶咏涌? ArrayList<InetAddress> inets = Collections.list(ni.getInetAddresses()); for(Iterator<InetAddress> it1 = inets.iterator();it1.hasNext();) { InetAddress inet = it1.next(); //只篩選ipv4地址,否則會同時(shí)得到Ipv6地址 if(inet instanceof Inet4Address) { String ip = inet.getHostAddress(); System.out.printf("%-10s %-5s %-6s %-15s\n", "InetfaceName:",intName,"| IPv4:",ip); } } } } catch (SocketException s) { s.printStackTrace(); } } }
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
自定義Spring Security的身份驗(yàn)證失敗處理方法
在本篇文章里小編給大家整理了一篇關(guān)于自定義Spring Security的身份驗(yàn)證失敗的處理方法,有需要的朋友們學(xué)習(xí)下。2019-05-05SpringBoot+SpringSession+Redis實(shí)現(xiàn)session共享及唯一登錄示例
這篇文章主要介紹了SpringBoot+SpringSession+Redis實(shí)現(xiàn)session共享及唯一登錄示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Java實(shí)戰(zhàn)之藥品管理系統(tǒng)的實(shí)現(xiàn)
這篇文章主要介紹了利用Java實(shí)現(xiàn)的藥品管理系統(tǒng),本項(xiàng)目屬于前后端分離的項(xiàng)目,分為兩個(gè)角色藥品管理員和取藥處人員,感興趣的小伙伴可以學(xué)習(xí)一下2022-04-04Java回調(diào)函數(shù)實(shí)例代碼詳解
這篇文章主要介紹了Java回調(diào)函數(shù)實(shí)例代碼詳解,需要的朋友可以參考下2017-10-10java實(shí)現(xiàn)學(xué)生教師管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)學(xué)生教師管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-10-10在Action中以Struts2的方式輸出JSON數(shù)據(jù)的實(shí)例
下面小編就為大家?guī)硪黄贏ction中以Struts2的方式輸出JSON數(shù)據(jù)的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-11-11SpringBoot實(shí)現(xiàn)發(fā)送QQ郵件的示例代碼
這篇文章主要介紹了SpringBoot如何實(shí)現(xiàn)發(fā)送QQ郵件功能,本文通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09