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