信息(),即所有人信息,登记着归属人信息。既然是信息,就有他的价值所在。信息对很有些人来说非常重要,比如玩的米农们,还有一些公司的销售们,他们通过获取的注册信息来联系到的所有人,可以和他们洽谈收购事宜?亦或者问问你注册了要不要找我们做个网站?哈~反正由于骚扰量太大,所以现在很多人都不留真实的联系方式了。因为信息这块,注册商是不做信息有效性审核的,随便你填,只要格式正确就可以了。
但我不关心他的信息真实性,既然有人要这信息,我们就要想办法爬啊!网上有很多查询信息的软件,但都不太适合我们的软件调用和数据分析。所以我们最好还是自己直接抓取比较方便。
首先我们要了解信息的存储方式,我个人的理解是,全求有各大根服务器(有点像DNS根服务器)例如com的根服务器就是:.verisign-grs.com 这个服务器上存储这的基本信息,包括创建时间,注册时间,到期时间等等,比如我们查询下今日头条的toutiao.com的信息,具体信息如下图
每个后缀的的根服务器是固定的,但这里的信息太少,不是我们想要的。那哪里才能查到我们想要的具体信息呢,上图中,大家注意到没,其中有条信息叫 Server,指向了商的服务器:.ename.com(易名中国),这个服务器存储着更详细的信息,其中就包括了我们想要的人,联系方式,等数据。
到这里,我们的任务完成了一半了!知道了信息的获取途径,下面我们就用程序的方法去获取吧!
百度下协议,我们知道了协议通信是用的服务器43端口。这样我们利用C#(亦或其他程序)中的SOCKET类去和服务器进行通信,协议方式就是连上43端口后,发送的ASCII编码,以 (回车换行符)结束。成功的话服务器就会返回对应的信息,C#的通信代码如下:
///
/// 查询的 信息
///
/// 要查询的
/// 服务器地址
/// 服务器端口
///
/// 执行成功: 返回详细的信息
/// 执行失败:返回相就的异常或是错误信息
///
public static string Tcp(string domain, string server, int port)
{
//domain = FunctionServices.getDomain(domain);
// 连接 查询服务器
TcpClient tcp = new TcpClient();
tcp.SendTimeout = 10;
//return string
string returnstr = "String Error";
try
{
tcp.Connect(server, port);
}
catch (SocketException)
{
returnstr = "查询错误:连接 服务器[" + server + "]失败";
return returnstr;
}
// 向 查询服务器发送查询的
try
{
//构造发送的字符串
domain += " ";
Byte[] DomainBytes = System.Text.Encoding.ASCII.GetBytes(domain.ToCharArray());
// 将发送到 查询服务器
Stream Stream = tcp.GetStream();
Stream.Write(DomainBytes, 0, domain.Length);
//返回流
StreamReader StreamReader = new StreamReader(Stream, System.Text.Encoding.UTF8);
StringBuilder Info = new StringBuilder();
string Line = null;
while (null != (Line = StreamReader.ReadLine()))
{
Info.Append(Line + " ");
}
returnstr = Info.ToString();
}
catch (Exception)
{
returnstr = "查询错误:网络无响应,或者是您的输入有误";
}
finally
{
tcp.Close();
}
return returnstr;
}
我们就用toutiao.com举例,通过这个代码,我们可以先连接到com的根服务器:.verisign-grs.com 来获取基本信息,然后对信息分析,提取想要的信息,如到期时间等。同时我们要提取关键的 SERVER的信息,获取到结果:.ename.com,同样的方式,我们再连一次这个服务器,发送,得到具体的注册信息。至此,我们就获取到了一个完整的信息了。
获取信息需要注意的以下几点:
每个根服务器返回的信息格式有的时候并不一样,这个就要靠我们人工新分析了。但同个服务器返回的信息格式是一样的。所以针对不同的服务器返回,我们要区别对待。
未注册时,查询的信息返回是未找到,每个根服务器返回的也不一样。有的是“does not exist”,有的是“Not found”,也有的是“No match for”,这个也挺让人难受的。对于这样的问题,我们只有针对不同的服务器,去做不同的判断。主要做一些主流.com,.net,.cn的判断基本就差不多了。
大多数服务器的请求频率是有限制的。所以这里并不推荐多线程大批量获取信息,为了稳定,还是单线程设置个延时,慢慢的抓吧。
这里提供一下几个主流的根服务器供大家测试,测试方式是用Telnet 软件去连接服务器的43端口,连接上之后就可以输入,然后回车,就可以得到信息了。
后缀 | 服务器 |
.com | .verisign-grs.net |
.net | .verisign-grs.net |
.cn | .cnnic.net.cn" |
.org | .pir.org |
.top | .nic.top |
.cc | .nic.cc |
.gov | .internic.net |