2015-11-29 163 views
2

我正在写一个简短的脚本,分别从各自的WHOIS服务器查询域名 - 而在大多数情况下,同时通过端口43的TCP连接似乎是工作对于大多数域名注册服务器上,查询whois.markmonitor.com似乎与一个奇怪的错误,上面写着无效查询将失败。whois的TCP套接字连接失败的一个服务器

下面是我用什么样的准系统:

#!/usr/bin/perl 

#whois.pl 

use strict; 
use IO::Socket; 

my $domain_name = "google.com"; 
my $query_socket = new IO::Socket::INET(
     PeerAddr => 'whois.iana.org', 
     PeerPort => 43, 
     Proto => 'tcp'); 
print $query_socket "$domain_name "; 
print $query_socket "\n\r"; 
while(my $this_line = <$query_socket>) { 
     print $this_line; 
} 
close($query_socket); 

如上所见,所使用的域名服务器是whois.iana.org;这也如预期的那样与whois.internic.net一起工作。只有在whois.markmonitor.com的情况下,下面的错误被认为是:

$ perl whois.pl 
Invalid query 

有人能帮助阐明我怎么可以或许获得更详细的输出更多的光线,以检查是否有在查询中正在取得任何错误到服务器?

作为一个额外的测试,通过telnet正常连接似乎工作正常,如下图所示:

$ telnet whois.markmonitor.com 43 
Trying 64.124.14.21... 
Connected to whois.markmonitor.com. 
Escape character is '^]'. 
google.com 
Domain Name: google.com 
Registry Domain ID: 2138514_DOMAIN_COM-VRSN 
Registrar WHOIS Server: whois.markmonitor.com 
Registrar URL: http://www.markmonitor.com 
Updated Date: 2015-06-12T10:38:52-0700 
Creation Date: 1997-09-15T00:00:00-0700 
......<output truncated>...... 

这使我相信,通过端口43到服务器的实际连接被接受的服务器端。

+1

我想这是由于额外的空间字符在'“$ domain_name”' – artistoex

+0

无论是它或它不喜欢'\ r \ n' – Sobrique

回答

1

由于artistoex笔记 - 那是因为有一个在你的域名空间。 更改您的打印线:

print {$query_socket} "$domain_name\n"; 

(注 - 花括号风格的原因,并且可以省略 - 我喜欢他们清楚这是一个文件句柄)

0

RFC3912客户端期望在whois协议中进行通信:“所有请求都以ASCII CR和ASCII LF终止”

因此在您的代码中,请使用"\r\n"而不是"\n\r"。并删除像写在其他答复中的额外空间。

但请注意whois不是一个明确定义的结构化协议:不要指望所有whois服务器以相同的方式工作,也不要遵守某种标准。你会发现很多奇怪的情况...