1.编程解析域名:
编写一个可重用的域名解析程序模块,使之能够将用户输入的域名解析为IP地址,能将用户输入的IP地址,反向解析为对应的主机名或域名。
思路:
- 通过命令行参数args[0]获取用户输入的域名或IP地址。
- 使用InetAddress.getByName(args[0])用于获取相应的 InetAddress 对象。
- 判断用户输入的参数是IP地址还是域名。
- 如果是域名,则使用getHostAddress()解析为IP地址,并输出IP地址。
- 如果是IP地址,则使用getCanonicalHostName()和getHostName()反向解析为主机名或域名,并输出规范主机名和域名,
- 对于判断是否是合法IP地址:先判断是IPv4地址还是IPv6地址,如果都不是则不是合法地址。如果是IPv4,则按字符串点号分割成四部分,对每一部分判断是否在合法范围;如果是IPv6,则使用InetAddress.getByName()进行解析,解析成功则合法。
程序源码:
- import java.net.InetAddress;
- import java.net.UnknownHostException;
- public class DomainResolver {
- public static void main(String[] args){
- String input = args[0];// 从命令行参数获取用户输入的域名或IP地址
- try{
- InetAddress address = InetAddress.getByName(input);
- // 判断用户输入的参数是IP地址还是域名
- if (isValidIP(input)){
- // 如果是IP地址则反向解析为主机名或域名
- System.out.println("规范主机名:"+address.getCanonicalHostName());
- System.out.println("域名:"+address.getHostName());
- }else{
- // 如果是域名则解析为IP地址
- System.out.println("IP地址:"+address.getHostAddress());
- }
- } catch (UnknownHostException e) {
- System.out.println("不能解析此域名或IP地址");
- e.printStackTrace();
- }
- }
- // 判断是否是合法的IP地址
- public static boolean isValidIP(String ip){
- if (ip == null || ip.isEmpty()){ // ip为空
- return false;
- }
- // 检查是否为IPv4地址
- if(ip.contains(".")){
- String[] parts = ip.split("\\.");
- if(parts.length != 4){
- return false;
- }
- for(String s : parts){
- int i = Integer.parseInt(s);
- if(i<0 || i>255){
- return false;
- }
- }
- return true;