Java中InetAddress類的使用
概念:InetAddress類是 Java 中用于表示 IP 地址的類。它提供了一種標(biāo)準(zhǔn)的方法來處理 IP 地址,無論是 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ī)名和百度域名)來獲取相應(yīng)的InetAddress對(duì)象,并打印了它們。getHostName():這個(gè)方法用于獲取InetAddress對(duì)象的主機(jī)名。在你的示例中,你使用host2對(duì)象(百度域名)調(diào)用了getHostName()方法,以獲取主機(jī)名并將其打印出來。getHostAddress():這個(gè)方法用于獲取InetAddress對(duì)象的 IP 地址。在你的示例中,你使用host2對(duì)象(百度域名)調(diào)用了getHostAddress()方法,以獲取 IP 地址并將其打印出來。
代碼:
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,通過主機(jī)名來獲取到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,通過域名來獲取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
通過一個(gè)demo來演示一下這些方法叭
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)=true2.給定地址,找到主機(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.lan3.找到本地機(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類型的變量來接受返回的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.151InetAddress緩存
InetAddress類具有高速緩存以存儲(chǔ)成功以及不成功的主機(jī)名解析。
默認(rèn)情況下,安裝安全管理器時(shí),為了防止DNS欺騙攻擊,主機(jī)名正確解決方案的結(jié)果將永久緩存。
當(dāng)沒有安裝安全管理器時(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,來區(qū)分IPv4地址和IPv6地址.
1.public final class Inet4Address extends InetAddress
2.public final class Inet6Address extends InetAddress
地址類型
有些IP地址和地址模式有特殊的含義。Java提供了許多方法來測(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?;厮偷刂分苯釉贗P層連接同一臺(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地址來計(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)文章
SpringMVC+ZTree實(shí)現(xiàn)樹形菜單權(quán)限配置的方法
本篇文章主要介紹了SpringMVC+ZTree實(shí)現(xiàn)樹形菜單權(quán)限配置的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-12-12
mybatis一對(duì)多兩種mapper寫法實(shí)例
這篇文章主要介紹了mybatis一對(duì)多兩種mapper寫法實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-12-12
Eclipse添加xml文件提示及Hibernate配置學(xué)習(xí)
文件提示功能在開發(fā)過程中很實(shí)用的,本文實(shí)現(xiàn)了一個(gè)Eclipse添加xml文件提示,感興趣的朋友可以了解下啊,希望本文對(duì)你有所幫助2013-01-01
一文詳解Redisson分布式鎖底層實(shí)現(xiàn)原理
這篇文章主要詳細(xì)介紹了Redisson分布式鎖底層實(shí)現(xiàn)原理,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07
RocketMQ在Spring Boot上的基礎(chǔ)使用
本文主要介紹了RocketMQ在Spring Boot上的基礎(chǔ)使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2026-03-03
在MyBatisPlus中使用@TableField完成字段自動(dòng)填充的操作
這篇文章主要介紹了在MyBatisPlus中使用@TableField完成字段自動(dòng)填充的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-02-02

