1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Java查出交换机的IP_Java使用InetAddress类获取主机名和IP地址(学习笔记)

Java查出交换机的IP_Java使用InetAddress类获取主机名和IP地址(学习笔记)

时间:2023-01-22 04:19:14

相关推荐

Java查出交换机的IP_Java使用InetAddress类获取主机名和IP地址(学习笔记)

Java提供一系列的类支持Java程序访问网络资源。包中有InetAddress类的定义,InetAddress类的对象用于IP地址和域名。它代表了一个网络目标地址,包括主机名和数字类型的地址信息。该类有两个子类,Inet4Address和Inet6Address,分别对应了目前IP地址的两个版本。

实例化一个InetAddress类,因为此类无构造方法,所以实例化此类只需要使用静态方法。

开发者门户中使用InetAddress.getByName(hostName); 方法来判断域名DNS解析是否正确:

@RequestMapping(value = "/getStatus", method = RequestMethod.GET)

@ResponseBody

public boolean getStatus(String hostName){

try {

InetAddress.getByName(hostName);

return true;

}catch (Exception e) {

return false;

}

}

一般来说,此方法若传入的hostName域名DNS解析有效,则能返回一个InetAddress对象。

通过该对象获取该域名主机IP地址。

同样可通过给定的原始IP地址,返回一个InetAddress对象:

InetAddress inetAddress=InetAddress.getByAddress(b);

String domainName = inetAddress.getHostName();//获得主机名

String IPName = inetAddress.getHostAddress();//获得IP地址

System.out.println(domainName);

System.out.println(IPName);

其中的b为一个字节数组 ,参数按网络字节顺序:地址的高位字节位于getAddress()[0]中,IPv4 地址 byte 数组的长度必须为 4 个字节,IPv6 byte 数组的长度必须为 16 个字节。

获取原始IP地址时,返回的是一个字节数组,如果把这个字节输出到控制台下的话,会显示此字节数组在内存中的存放地址。输出时用了address[0]等数组的形式输出字节,其中如果字节数组中的某个字节大于128的话,将会导致输出来的数字是负数,应此我把我的IP地址中超过128的加上256,便没问题。

注:32位二进制网络地址

A(1.0.0.0-126.255.255.255):0,7位网络号,后24位为主机号;

B(128.0.0.0-191.255.255.255):10,14位网络号,后16位为主机号;

C(192.0.0.0-223.255.255.255):110,21位网络号,后8位为主机号;

D(224.0.0.0-239.255.255.255):1110,28位多点广播组标号;

E(240.0.0.0-254.255.255.255):1111,保留试验使用。

InetAddress的主要方法

— toString() 方法,将此 IP 地址转换为 String。

— byte[ ] getAddress() 方法,返回此 InetAddress 对象的原始 IP 地址。如果将此字节数组输出在控制台下,会出现一个存放此字节数组的内存地址。

— String getCanonicalName() 方法, 获取此 IP 地址的完全限定域名。

— String getHostAddress() 方法,返回 IP 地址字符串(以文本表现形式)。

— String getHostName() 方法,获取此 IP 地址的主机名。

— boolean isReachable(int timeout) 方法,测试是否可以达到该地址。

有时主机名可能比较复杂,会使用主机别名。因此获取主机名需要特定的方法:

public String getCanonicalHostName()

该方法和getHostName方法一样,也是得到远程主机的域名。区别是,该方法得到的是主机名,getHostName得到的是主机别名。

1. 使用getLocalHost()创建InetAddress对象

此时getCanonicalHostName方法和getHostName方法得到的都是本机名

2.使用域名创建InetAddress对象

使用域名创建InetAddress对象后,getHostName方法不会访问DNS服务器

但getCanonicalHostName方法就不一定了,这取决于DNS服务器如何解释主机名和主机别名

3.使用IP地址创建InetAddress对象

此时getCanonicalHostName方法和getHostName方法完全相同,返回的都是主机名,而不是主机别名。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。