Java获取域名注册信息Whois

域名的种类
(1)country-code:   
  国家/地区顶级域名(ccTLD:Country Code Top Level Domain)  
(2)generic:   
  通用顶级域名 (gTLD:generic Top Level Domain)  
(3)generic-restricted:  
  有限制的通用顶级域名(需要审核)
(4)infrastructure:   
  基础组织顶级域名(iTLD:Infrastructure TLD)
(5)sponsored:   
  组织顶级渔民sTLD
(6)test:   
  国际化域名(IDN TLD)

IANA
IANA(The Internet Assigned Numbers Authority,互联网数字分配机构)是负责协调一些使Internet正常运作的机构。

WHOIS服务器
WHOIS服务器是一个基于"查询/响应"的TCP事务服务器,它运行在SRI-NIC机器上(26.0.0.73或10.0.0.51),向用户提供internet范围内的目录服务。本地主机上的用户程序可以通过Internet访问该服务器,其过程主要有下面三步:
  (1)在TCP服务端口43(十进制)连接SRI-NIC服务主机;
  (2)发送一个命令,以回车和换行(<CRLF>)结尾;
  (3)接受相应命令的返回信息,一旦输出结束,服务器将关闭连接。
  命令的格式非常简单。可以直接输入域名,例如,可以使用"sohu.com"查询"搜狐"网站的域名信息;也可以使用"help"得到具体的帮助信息。

通过Java的Socket类实现
public class Whois {

	private static final int DEFAULT_PORT = 43;
	
	public String query(String domain) throws Exception {
		String server = "";
		String tld = getTLD(domain);
		if ("com".equals(tld)) {
			server = "whois.verisign-grs.com";
		} else if ("net".equals(tld)) {
			server = "whois.verisign-grs.com";
		} else if ("org".equals(tld)) {
			server = "whois.pir.org";
		} else if ("cn".equals(tld)) {
			server = "whois.cnnic.cn";
		} else if ("jp".equals(tld)) {
			server = "whois.jprs.jp";
		} else if ("kr".equals(tld)) {
			server = "whois.kr";
		}
		return query(domain, server);
	}
	
	public String query(String domain, String server) throws Exception {
		Socket socket = new Socket(server, DEFAULT_PORT);
		String lineSeparator = "\r\n";

		PrintWriter out = new PrintWriter(socket.getOutputStream());
		out.println(domain);
		out.flush();

		BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		StringBuilder ret = new StringBuilder();
		String line;
		while ((line = in.readLine()) != null) {
			ret.append(line + lineSeparator);
		}
		socket.close();
		return ret.toString();
	}
	
	private String getTLD(String domain) {
		final int index;
		return (domain == null || (index = domain.lastIndexOf('.') + 1) < 1) ? domain
				: (index < (domain.length())) ? domain.substring(index) : "";
	}
	
	public static void main(String[] args) throws Exception {
		Whois w = new Whois();
		System.out.println(w.query("baidu.com"));
		System.out.println(w.query("csdn.net"));
		System.out.println(w.query("apache.org"));
		System.out.println(w.query("360.cn"));			//china
		System.out.println(w.query("mixi.jp"));			//japan
		System.out.println(w.query("laneige.co.kr"));	//korea
	}
	
}


【附录A】目前的顶级域名及WHOIS服务器一览:
Java获取域名注册信息Whois_第1张图片
来源: http://www.iana.org/domains/root/db

【附录B】目前的IPv4分配及WHOIS服务器一览:
Java获取域名注册信息Whois_第2张图片
来源: http://www.iana.org/assignments/ipv4-address-space

【附录C】全球IP地址分配组成图
Java获取域名注册信息Whois_第3张图片

你可能感兴趣的:(whois)