设置ruby whois gem的Whois服务地址作为IP地址

时间:2018-09-21 17:05:14

标签: ruby rubygems whois whois-ruby

与whois.arin.net的连接对我们开放。我们的网络管理员说,我们应该将192.0.47.59用于我们的Whois服务。

在某些情况下,我将使用DNS名称,在其他情况下,我将使用IP地址。无论哪种情况,我都想获取Whois信息。我的网络管理员已允许访问Whois服务的特定IP地址,而我必须使用该IP地址。如果我给它提供TLD,则define方法允许我设置whois服务的IP地址,但是我无法使它适用于IP地址。

这与Setting address of whois service for ruby whois gem有关,但是由于我得到了部分解决方案,因此我知道如何调用该服务,因此对于我特定于IP地址的问题,我想我将从头开始。

我需要设置我们的Whois服务的地址。因此,对于DNS名称:

> Whois.whois('wandajackson.com')
Whois::ConnectionError: Errno::EHOSTUNREACH: No route to host - connect(2) for "whois.verisign-grs.com" port 43
    from (irb):4
> Whois::Server.define(:tld, 'com', '192.0.47.59')
=> ["com", "192.0.47.59", {}]
irb(main):006:0> Whois.whois('wandajackson.com')
# => #<Whois::Record>

但是,我无法使其用于IP地址。

> Whois::Server.define(:ipv4, '74.0.0.0/8', '192.0.47.59')
=> ["74.0.0.0/8", "192.0.47.59", {}]
> Whois.whois('74.220.215.203')
Whois::ConnectionError: Errno::EHOSTUNREACH: No route to host - connect(2) for "whois.arin.net" port 43
    from (irb):7

> Whois::Server.define(:ipv6, '2607::/8', '192.0.47.59')
=> ["2607::/8", "192.0.47.59", {}]
> Whois.whois('2607:f8b0:4004:800::200e')
Whois::ConnectionError: Errno::EHOSTUNREACH: No route to host - connect(2) for "whois.arin.net" port 43
    from (irb):9

1 个答案:

答案 0 :(得分:1)

很抱歉,但这是一个缺少74.0.0.0/8分配的错误;如果您创建自己的错误,则可能无法在defined列表中正确搜索,因此=>根据IP目前无法使用。

为什么?

您可以查看列表并找出分配给ARIN的范围:

Whois::Server.definitions(:ipv4).each { |records| p "IP range #{records[0]}" if records[1] = 'whois.arin.net'}

首先,您无需进行任何更改即可检查IP地址:

 Whois::Server.find_for_ip("74.220.215.203")
=> #<Whois::Server::Adapters::Arin:0x00000000030244c0 @type=:ipv4, @allocation="0.0.0.0/1", @host="whois.arin.net", @options={}>

如您所见,在权威机构上找不到该记录,因此转到为0.0.0.0/1设置的后备whois.arin.net

我尝试设置fatory(以某种方式被忽略)和define

Whois::Server.factory :ipv4, "74.0.0.0/8", "whois.iana.org", :option => Whois::Server::Adapters::Standard

define工作:

Whois::Server.define :ipv4, "74.0.0.0/8", "whois.iana.org"
  

...,{}],[“ 222.120.0.0/15”,“ whois.nic.or.kr”,{}],[“ 222.122.0.0/16”,   “ whois.nic.or.kr”,{}],[“ 222.232.0.0/13”,“ whois.nic.or.kr”,{}],   [“ 220.0.0.0/6”,“ whois.apnic.net”,{}],[“ 74.0.0.0/8”,   “ whois.iana.org”,{}]]

您可以看到

["74.0.0.0/8",
> "whois.iana.org", {}]]

所以您现在应该可以查询IANA?看来您不是:

Whois::Server.find_for_ip("74.220.215.203")
=> #<Whois::Server::Adapters::Arin:0x000000000434c250 @type=:ipv4, @allocation="0.0.0.0/1", @host="whois.arin.net", @options={}>

您可以看到@allocation仍在获取"0.0.0.0/1"而不是74.0.0.0/8。为什么?我还不知道在搜索或找到正确的对象方面可能存在一些错误。

一切都丢失了吗?并非如此,有一个非常简单的解决方法,但是您必须了解其含义。

解决方法

如果您通过以下方式定义备用地址:

Whois::Server.define :ipv4, "0.0.0.0/1", "whois.iana.org"

一切都开始起作用。现在,所有后备查询都将通过IANA进行,这对您来说不是问题,因为无论如何您都无法到达ARIN。

现在,如果您通过IP地址查询,您将获得正确的结果:

Whois::Server.find_for_ip("74.220.215.203")
=> #<Whois::Server::Adapters::Standard:0x000000000351c298 @type=:ipv4, @allocation="0.0.0.0/1", @host="whois.iana.org", @options={}>

Whois.whois("74.220.215.203")
=> "% IANA WHOIS server\n% for more information on IANA, visit http://www.iana.org\n% This query returned 1 object\n\nrefer:        whois.arin.net\n\ninetnum:
    74.0.0.0 - 74.255.255.255\norganisation: ARIN\nstatus:       ALLOCATED\n\nwhois:        whois.arin.net\n\nchanged:      2005-06\nsource:       IANA\n\n"