今天介绍的gem名字叫whois。
简介
Whois
是一个智能的,纯Ruby写成的WHOIS客户端和解析器。此gem是从RoboWhois和RoboDomain中提取出来的,于2009年七月份开始应用于生产环境。
特点
- 能够查询IPv4,IPv6,TLDs以及ICANN和gTLDs的WHOIS记录
- 能够解析WHOIS响应
- 灵活的以及可扩展的接口(比如,百忙之中的你还可以定制服务)
- 面向对象的设计,用到10个不同的设计模式
- 纯净的Ruby,不包含任何其它非Ruby库的依赖
- 已经成功通过一些Ruby实现的测试
安装
1
|
|
开始
这里只是对whois的使用做了最基本的介绍。具体的文档中提供了更多详细的解释,包括教程和更多的实例以及关于client/server/record/parser架构的技术细节。
查询WHOIS
Whois
为TLD,域名,IPv4和IPv6地址进行查询WHOIS信息的能力。根据输入的查询信息,client可以非常聪明的猜出最匹配的WHOIS服务信息,发送相应的请求并返回响应。
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
查询方法是无状态的。因此可以放心的对同一个client实例做多次查询。
1 2 3 4 5 6 |
|
如果你不是非常在乎具体的查询结果,只是想一股脑的获取所有响应,Whois
模块提供了一个统一的方法Whois.whois
。最简单的方法是发送一个WHOIS请求。
1 2 |
|
除此之外,你还可以通过block的方式进行查询。
1 2 3 4 5 6 7 |
|
利用查询结果
任何WHOIS查询都会返回一个Whois::Record
对象。这个对象类似一个String,但不止于此。
Whois::Record
封装了一个WHOIS记录,并提供能够通过对象的syntax,以类似编程的方式解析WHOIS的能力。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
此特性是通过Whois
记录解析器来实现的。不幸的是,由于缺少一个全球性的标准,每一个WHOIS服务都需要一个特定的解析器。由于这个原因的存在,当前对所有已存在的WHOIS服务都不支持。
如果你创建了一个新解析器,希望能够考虑开放出来,或许会在下一个版本发布的时候包含进去。
超时
默认情况下,每一次查询的超时定为5秒。如果查询执行的时间超过了此限制,client将会触发Timeout::Error
异常。
当然了,你可以自定义一个默认的超时时间。如果超时时间设定为nil
,那么client将会一直等待server的响应或者直到你杀死此进程。除非你真的想这么做,否则不要关闭timeout!
1 2 3 4 5 6 |
|