Java中InetAddress類的使用
概念:InetAddress類是 Java 中用于表示 IP 地址的類。它提供了一種標(biāo)準(zhǔn)的方法來(lái)處理 IP 地址,無(wú)論是 IPv4 還是 IPv6 地址。InetAddress 類位于 java.net 包中,是 Java 網(wǎng)絡(luò)編程的一部分。
常用方法:
getLocalHost()
:這個(gè)方法獲取本地主機(jī)的InetAddress
對(duì)象,它表示當(dāng)前計(jì)算機(jī)。在你的示例中,你獲取了本地主機(jī)的InetAddress
對(duì)象并打印了它。getByName(String host)
:這個(gè)方法根據(jù)指定的主機(jī)名或域名獲取對(duì)應(yīng)的InetAddress
對(duì)象。在你的示例中,你使用了兩個(gè)不同的主機(jī)名(本地主機(jī)名和百度域名)來(lái)獲取相應(yīng)的InetAddress
對(duì)象,并打印了它們。getHostName()
:這個(gè)方法用于獲取InetAddress
對(duì)象的主機(jī)名。在你的示例中,你使用host2
對(duì)象(百度域名)調(diào)用了getHostName()
方法,以獲取主機(jī)名并將其打印出來(lái)。getHostAddress()
:這個(gè)方法用于獲取InetAddress
對(duì)象的 IP 地址。在你的示例中,你使用host2
對(duì)象(百度域名)調(diào)用了getHostAddress()
方法,以獲取 IP 地址并將其打印出來(lái)。
代碼:
public class API_ { public static void main(String[] args) throws UnknownHostException { //獲取本機(jī) InetAddress 對(duì)象 getLocalHost InetAddress localHost = InetAddress.getLocalHost(); System.out.println(localHost);//LAPTOP-U9K8AF0S/172.21.202.203 獲取到主機(jī)的信息(主機(jī)名和ip地址) //根據(jù)指定主機(jī)名/域名獲取 ip 地址對(duì)象 InetAddress host1 = InetAddress.getByName("LAPTOP-U9K8AF0S");//LAPTOP-U9K8AF0S主機(jī)名 System.out.println(host1);//LAPTOP-U9K8AF0S/172.21.202.203,通過(guò)主機(jī)名來(lái)獲取到ip地址,當(dāng)然這邊輸出的是主機(jī)名和ip地址 System.out.println(host1.getHostAddress());//172.21.202.203,獲取到ip地址 InetAddress host2 = InetAddress.getByName("www.baidu.com");//www.baidu.com域名 System.out.println(host2);//www.baidu.com/153.3.238.102,通過(guò)域名來(lái)獲取ip地址,當(dāng)然這邊輸出的是域名和ip地址 System.out.println(host2.getHostAddress());//153.3.238.102,獲取ip地址 } }
InetAddress的常用方法
1.public String getHostName()
獲得該InetAddress對(duì)象的主機(jī)名稱
2.public String getCanonicalHostName()
獲取此IP地址的全限定域名
3.public bytes[] getHostAddress()
獲取該InetAddress對(duì)象對(duì)應(yīng)的IP地址字符串
4.public static InetAddress getLocalHost()
獲取本機(jī)對(duì)應(yīng)的InetAddress對(duì)象
5.public static InetAddress getByName(String host)
根據(jù)主機(jī)獲得對(duì)應(yīng)的InetAddress對(duì)象,參數(shù)host可以是IP地址或域名
6.public static InetAddress[] getAllByName(String host)
根據(jù)主機(jī)獲得對(duì)應(yīng)的InetAddress對(duì)象
7.public static InetAddress getByAddress(byte[] addr)
獲取addr所封裝的IP地址對(duì)應(yīng)的Inet Address對(duì)象
8.public boolean isReachable(int timeout)
判斷是否可以到達(dá)該地址
示例
1.小DEMO
通過(guò)一個(gè)demo來(lái)演示一下這些方法叭
package TEMP.Temp3; //使用以上方法的小demo import java.net.InetAddress; import java.net.UnknownHostException; public class InetAddressDemo { public static void main(String[] args) { try{ //獲取自己本機(jī)地址信息 InetAddress localIp=InetAddress.getLocalHost(); //1獲取此IP地址的全限定域名 System.out.println("1.localIp.getCanonicalHostName()=" + localIp.getCanonicalHostName()); //2獲取該InetAddress對(duì)象對(duì)應(yīng)的IP地址字符串 System.out.println("2.localIp.getHostAddress()=" + localIp.getHostAddress()); //3獲得該InetAddress對(duì)象的主機(jī)名稱 System.out.println("3.localIp.getHostName()=" + localIp.getHostName()); System.out.println("4.localIp.toString()="+localIp.toString()); //5.判斷是否可以到達(dá)該地址 System.out.println("5.localIp.isReachable(5000)=" + localIp.isReachable(5000)); System.out.println("===================================="); System.out.println("===================================="); //獲取指定域名地址的信息([eg]百度) InetAddress baiduip = InetAddress.getByName("www.baidu.com"); //1獲取此IP地址的全限定域名 System.out.println("1.baiduIp.getCanonicalHostName()=" + baiduip.getCanonicalHostName()); //2獲取該InetAddress對(duì)象對(duì)應(yīng)的IP地址字符串 System.out.println("2.baiduIp.getHostAddress()=" + baiduip.getHostAddress()); //3獲得該InetAddress對(duì)象的主機(jī)名稱 System.out.println("3.baiduIp.getHostName()=" + baiduip.getHostName()); System.out.println("4.baiduIp.toString()="+baiduip.toString()); //5判斷是否可以到達(dá)該地址 System.out.println("5.baiduIp.isReachable(5000)=" + baiduip.isReachable(5000)); System.out.println("===================================="); System.out.println("===================================="); //獲取指定原始IP地址信息 InetAddress ip = InetAddress.getByAddress(new byte[]{127,0,0,1}); // InetAddress ip = InetAddress.getByName("127.0.0.1"); System.out.println("1.ip.getCanonicalHostName()=" + ip.getCanonicalHostName()); System.out.println("2.ip.getHostAddress()= "+ ip.getHostAddress()); System.out.println("3.ip.getHostName()="+ ip.getHostName()); System.out.println("4.ip.toString()="+ ip.toString()); System.out.println("5.ip.isReachable(5000)=" + ip.isReachable(5000)); }catch(UnknownHostException e){ e.printStackTrace(); }catch(Exception e){ e.printStackTrace(); } } } //輸出結(jié)果 // 1.localIp.getCanonicalHostName()=shizhanli.lan // 2.localIp.getHostAddress()=192.168.30.151 // 3.localIp.getHostName()=shizhanli // 4.localIp.toString()=shizhanli/192.168.30.151 // 5.localIp.isReachable(5000)=true // ==================================== // ==================================== // 1.baiduIp.getCanonicalHostName()=14.215.177.38 // 2.baiduIp.getHostAddress()=14.215.177.38 // 3.baiduIp.getHostName()=www.baidu.com // 4.baiduIp.toString()=www.baidu.com/14.215.177.38 // 5.baiduIp.isReachable(5000)=true // ==================================== // ==================================== // 1.ip.getCanonicalHostName()=localhost // 2.ip.getHostAddress()= 127.0.0.1 // 3.ip.getHostName()=localhost // 4.ip.toString()=localhost/127.0.0.1 // 5.ip.isReachable(5000)=true
2.給定地址,找到主機(jī)名稱
package TEMP.Temp3; //給定地址,找出主機(jī)名 import java.net.InetAddress; import java.net.UnknownHostException; public class ReverseTest { public static void main(String[] args) throws UnknownHostException { InetAddress ia = InetAddress.getByName("192.168.30.151"); System.out.println(ia.getCanonicalHostName()); } } //輸出結(jié)果: //shizhanli.lan
3.找到本地機(jī)器的IP地址
package TEMP.Temp3; //找到本地機(jī)器的IP地址 import java.net.InetAddress; import java.net.UnknownHostException; public class MyAddress { public static void main(String[] args) { try{ InetAddress me = InetAddress.getLocalHost(); String dottedQuad = me.getHostAddress();//創(chuàng)建一個(gè)String類型的變量來(lái)接受返回的ip地址 System.out.println("My address is " + dottedQuad); }catch (UnknownHostException ex){ System.out.println("I'm sorry.I don't know my own address."); } } } //輸出:My address is 192.168.30.151
InetAddress緩存
InetAddress類具有高速緩存以存儲(chǔ)成功以及不成功的主機(jī)名解析。
默認(rèn)情況下,安裝安全管理器時(shí),為了防止DNS欺騙攻擊,主機(jī)名正確解決方案的結(jié)果將永久緩存。
當(dāng)沒(méi)有安裝安全管理器時(shí),默認(rèn)的行為是緩存條目以獲得有限的(實(shí)現(xiàn)依賴的)時(shí)間段。
不成功的主機(jī)名解析的結(jié)果被緩存很短的時(shí)間(10秒),以提高性能。
如果不需要默認(rèn)行為,則可以將Java安全屬性設(shè)置為不同的生存時(shí)間(TTL)值進(jìn)行正緩存。 同樣,系統(tǒng)管理員可以在需要時(shí)配置不同的緩存緩存TTL值。
Inet4Address和Inet6Address
Java使用了兩個(gè)類Inet4Address和Inet6Address,來(lái)區(qū)分IPv4地址和IPv6地址.
1.public final class Inet4Address extends InetAddress
2.public final class Inet6Address extends InetAddress
地址類型
有些IP地址和地址模式有特殊的含義。Java提供了許多方法來(lái)測(cè)試InetAddress對(duì)象是否符合其中某個(gè)標(biāo)準(zhǔn)。
1.public boolean isAnylocalAdress()
如果是通配地址,方法返回true。通配地址可以匹配本地系統(tǒng)中的任何地址,在IPv4中,通配地址是0.0.0.0。在IPv6中,通配地址是0:0:0:0:0:0:0:0。
2.public boolean isLoopbackAdress()
如果是回送地址,方法返回true。回送地址直接在IP層連接同一臺(tái)計(jì)算機(jī),而不使用任務(wù)物理硬件。在IPv4中,這個(gè)地址是127.0.0.1。在IPv6中,這個(gè)回送地址是0:0:0:0:0:0:0:1。
3.public boolean isLinkLocalAddress()
如果地址是一個(gè)IPv6本地鏈接地址,方法返回true,否則返回false。
4.public boolean isSiteLocalAddress()
如果地址是一個(gè)IPv6本地網(wǎng)絡(luò)地址,方法返回true,否則返回false。
5.public boolean isMulticastAddress()
如果地址是一個(gè)組播地址,方法返回true,否則返回false。
6.public boolean isMCGlobal()
如果地址是全球組播地址,方法返回true,否則返回false。
7.public boolean isMCNodeLocal()
如果地址是一個(gè)本地接口組播地址,方法返回true,否則返回false。
8.public boolean isMCLinkLocal()
如果地址是一個(gè)子網(wǎng)范圍組播地址,方法返回true,否則返回false。
9.public boolean isMCSiteLocal()
如果地址是一個(gè)網(wǎng)站范圍組播地址,方法返回true,否則返回false。
10.public boolean isMCOrgLocal()
如果地址是一個(gè)組織范圍組播地址,方法返回true,否則返回false。
測(cè)試可達(dá)性
InetAddress類有兩個(gè)isReachable()方法,可以測(cè)試一個(gè)特定節(jié)點(diǎn)對(duì)當(dāng)前主機(jī)是否可達(dá)哦。
方法①public boolean isReachable(int timeout) throws IOException
方法②public boolean isReachable(NetworkInterface interface, int ttl, int timeout) throws IOException
小小解析:
這些方法嘗試使用traceroute查看指定地址是否可達(dá)。如果主機(jī)在timeout毫秒內(nèi)響應(yīng),則方法返回true;否則返回false。如果出現(xiàn)網(wǎng)絡(luò)錯(cuò)誤則拋出IOException異常。第二個(gè)方法還允許指定從哪個(gè)本地網(wǎng)絡(luò)接口建立連接,以及“生存時(shí)間”。
Object方法
1.public boolean equals(Object o)
若與一個(gè)InetAddress對(duì)象有相同的IP地址,并不要求這兩個(gè)對(duì)象有相同的主機(jī)名,就返回true,否則返回false。
2.public int hasCode()
只根據(jù)IP地址來(lái)計(jì)算,不考慮主機(jī)名
3.public String toString()
生成的字符串有兩種格式:主機(jī)名或點(diǎn)分四段地址。
到此這篇關(guān)于Java中InetAddress類的使用的文章就介紹到這了,更多相關(guān)Java InetAddress類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
老生常談Java中List與ArrayList的區(qū)別
大家都知道List是接口,ArrayList是List接口的一個(gè)實(shí)現(xiàn)類,接下來(lái)通過(guò)本文給大家介紹Java中List與ArrayList的區(qū)別,需要的朋友可以參考下2022-08-08Spring Security基于過(guò)濾器實(shí)現(xiàn)圖形驗(yàn)證碼功能
驗(yàn)證碼就是為了防止惡意用戶采用暴力重試的攻擊手段而設(shè)置的一種防護(hù)措施,接下來(lái)在Spring Security的環(huán)境中,我們可以用兩種方案實(shí)現(xiàn)圖形驗(yàn)證碼,具體實(shí)現(xiàn)方法跟隨小編一起看看吧2021-09-09elasticsearch節(jié)點(diǎn)間通信的基礎(chǔ)transport啟動(dòng)過(guò)程
這篇文章主要為大家介紹了elasticsearch節(jié)點(diǎn)間通信的基礎(chǔ)transport啟動(dòng)過(guò)程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04實(shí)例解析Java日期格式工具類DateUtil.java
本文主要對(duì)Java日期格式工具類DateUtil.java進(jìn)行實(shí)例解析。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-01-01Java開(kāi)發(fā)中的容器概念、分類與用法深入詳解
這篇文章主要介紹了Java開(kāi)發(fā)中的容器概念、分類與用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了java容器的相關(guān)概念、分類、使用方法與注意事項(xiàng),需要的朋友可以參考下2017-11-11