1.主机名相关配置文件
计算机操作系统中,以下四个文件在域名解析过程中至关重要。
1.1./etc/sysconfig/network
此文件可配置HOSTNAME,HOSTNAME是给计算机起的一个名字,是计算机的一个标识。可以使用uname -n或hostname命令来查看本地计算机的计算机名称。
1.2./etc/hosts
这是一个文本文件,里面存放一些IP和域名的对应关系(先ip,后域名)。
这个文件是属于网络层的配置文件。
1.3./etc/host.conf
指定解析顺序/方式,属于一种规则配置文件。
# 这里规定先使用DNS来解析域名,然后再查询/etc/hosts文件
order bind,hosts
# 指定是否/etc/hosts文件中指定的主机可以有多个地址
multi on
1.4./etc/resolv.conf
DNS服务器的配置文件,用于设置DNS服务器的IP地址及DNS域名,还包含了主机的域名搜索顺序。
2.Java InetAddress
InetAddress表示网络地址的抽象类,可操作方法如下:
//获取主机名
public String getHostName();
//获取主机名(每次方法都解析DNS去获取主机名,而不从缓存中获取)
public String getCanonicalHostName();
//获取以字节数组形式的ip地址。
public byte[] getAddress();
//获取点分四段式ip。
public String getHostAddress();
//可以根据指定timeout时间内测试网络是否可达,是否可以建立连接。
public boolean isReachable(int timeout);
//可以指定从本机那个网卡、生存时间ttl 和指定时间来测试网络是否可达。
public boolean isReachable(NetworkInterface netif, int ttl, int timeout);
// 当IP地址是广播地址(MulticastAddress)时返回true,否则返回false。
// 通过广播地址可以向网络中的所有计算机发送信息,而不是只向一台特定的计算机发送信息。
// IPv4的广播地址的范围是224.0.0.0 ~ 239.255.255.255
// IPv6的广播地址第一个字节是FF 其他的字节可以是任意值。
public boolean isMulticastAddress();
// 当IP地址是通配符地址时返回true,否则返回false。
// IPv4的通配符地址是0.0.0.0
// IPv6的通配符地址是0:0:0:0:0:0:0:0,也可以简写成::。
public boolean isAnyLocalAddress();
// 当IP地址是loopback地址时返回true,否则返回false。loopback地址就是代表本机的IP地址。
// IPv4的loopback地址的范围是127.0.0.0 ~ 127.255.255.255,也就是说,只要第一个字节是127,就是lookback地址。
// IPv6的loopback地址是0:0:0:0:0:0:0:1,也可以简写成::1
public boolean isLoopbackAddress();
// 当IP地址是本地连接地址(LinkLocalAddress)时返回true,否则返回false。
// IPv4的本地连接地址的范围是169.254.0.0 ~ 169.254.255.255。
// IPv6的本地连接地址的前12位是FE8,其他的位可以是任意取值,如FE88::和FE80::ABCD::都是本地连接地址。
public boolean isLinkLocalAddress();
// 当IP地址是地区本地地址(SiteLocalAddress)时返回true,否则返回false。(是不是内网ip)
// IPv4的地址本地地址分为三段:10.0.0.0 ~ 10.255.255.255、172.16.0.0 ~ 172.31.255.255、192.168.0.0 ~ 192.168.255.255
// (企业内部或个人内部的局域网内部的ip都应该在此三个网段内 因为内网用ipv4足够)
// IPv6的地区本地地址的前12位是FEC,其他的位可以是任意取值,如FED0:: 和 FEF1:: 都是地区本地地址。
public boolean isSiteLocalAddress();
// 当IP地址是全球范围的广播地址时返回true,否则返回false。全球范围的广播地址可以向Internet中的所有的计算机发送信息。
// IPv4的广播地址除了224.0.0.0和第一个字节是239的IP地址都是全球范围的广播地址
// IPv6的全球范围的广播地址中第一个字节是FF,第二个字节的范围是0E ~ FE,其他的字节可以是任意值,如FFBE::、FF0E::都是全球范围的广播地址。
public boolean isMCGlobal();
// 当IP地址是本地接口广播地址时返回true,否则返回false。
// 本地接口广播地址不能将广播信息发送到产生广播信息的网络接口,即使是同一台计算机的另一个网络接口也不行。
// 所有的IPv4广播地址都不是本地接口广播地址。IPv6的本地接口广播地址的第一个字节是FF,第二个节字的范围是01 ~ F1,
// 其他的字节可以是任意值,如FFB1::、FF01:A123::都是本地接口广播地址。
public boolean isMCNodeLocal();
// 当IP地址是子网广播地址时返回true,否则返回false。
// IPv4的子网广播地址的范围是224.0.0.0 ~ 224.0.0.255。
// IPv6的子网广播地址的第一个字节是FF,第二个字节的范围是02 ~ F2,其他的字节可以是任意值,如FFB2:: 和 FF02:ABCD:: 都是子网广播地址。
public boolean isMCLinkLocal();
// 当IP地址是站点范围的广播地址时返回true,否则返回false。
// 使用站点范围的广播地址,可以向站点范围内的计算机发送广播信息。
// IPv4的站点范围广播地址的范围是239.255.0.0 ~ 239.255.255.255,如239.255.1.1、239.255.0.0都是站点范围的广播地址。
// IPv6的站点范围广播地址的第一个字节是FF,第二个字节的范围是05 ~ F5,其他的字节可以是任意值,如FF05:: 和 FF45:: 都是站点范围的广播地址。
public boolean isMCSiteLocal();
// 当IP地址是组织范围的广播地址时返回ture,否则返回false。
// 使用组织范围广播地址可以向公司或企业内部的所有的计算机发送广播信息。
// IPv4的组织范围广播地址的第一个字节是239,第二个字节不小于192,第三个字节不大于195,如239.193.100.200、239.192.195.0都是组织范围广播地址。
// IPv6的组织范围广播地址的第一个字节是FF,第二个字节的范围是08 ~ F8,其他的字节可以是任意值,如FF08:: 和 FF48::都是组织范围的广播地址。
public boolean isMCOrgLocal();
Java中,可通过配置sun.net.spi.nameservice.nameservers来配置域名解析服务器,可通过sun.net.spi.nameservice.provider.{}参数来配置DNS服务供应商