我正在编写一个简短的脚本来查询来自各自whois服务器的域名 - 而在大多数情况下,虽然通过端口43的TCP连接似乎适用于大多数whois服务器,但查询到{{1} }似乎失败了一个奇怪的错误,说无效的查询。
这是我正在使用的准系统:
whois.markmonitor.com
如上所示,使用的whois服务器是#!/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
让我相信通过端口43与服务器的实际连接在服务器端被接受。
答案 0 :(得分:1)
正如artistoex注意到的那样 - 因为您的域名中有一个空格。 将您的打印行更改为:
print {$query_socket} "$domain_name\n";
(注意 - 花括号是出于样式原因而且可以省略 - 我更喜欢它们以明确这是一个文件句柄)
答案 1 :(得分:0)
每like you were apparently doing客户端应该像"\n\r"
协议中那样进行通信:&#34;所有请求都以ASCII CR终止,然后是ASCII LF&#34;
因此,在您的代码中,请使用"\r\n"
而不是whois
。并删除其他回复中写的额外空间。
但请注意,//hide any open bootstrap modals
angular.element('.inmodal').hide();
不是一个定义良好的结构化协议:不要指望所有whois服务器都以相同的方式工作,也不要遵守某种标准。你会发现很多奇怪的案例......