与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
答案 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"