为 ruby 设置 whois 服务地址 whois gem 为 IP 地址

Setting address of whois service for ruby whois gem for IP addresses

与 whois.arin.net 的连接未对我们开放。我们的网络管理员说我们应该使用 192.0.47.59 作为我们的 whois 服务。

在某些情况下,我会有一个 DNS 名称,在其他情况下,我会有一个 IP 地址。无论哪种情况,我都想获取 whois 信息。我的网络管理员允许访问 whois 服务的特定 IP 地址,我必须使用该 IP 地址。 define 方法允许我设置 whois 服务的 IP 地址,如果我给它 TLD,但我无法让它为 IP 地址工作。

这与有关,但由于我得到了部分解决方案,我知道如何调用该服务,所以对于我的特定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

很抱歉,这是一个缺少 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={}>

如您所见,当局未找到该记录,因此它转到为 whois.arin.net.

设置的后备 0.0.0.0/1

我尝试设置 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"