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

Java提供一系列的类支持Java程序访问网络资源。Java.net包中有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方法完全相同,返回的都是主机名,而不是主机别名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值