我正在尝试编写一个高级 whois 客户端,因此我一直在尝试使用Arch Linux中的netcat(nc)向whois服务器发送命令。例如,这很有效:
$ echo domain google.com | nc whois.crsnic.net 43
# => nc outputs whois data for google.com
但是,处理.br.com
等后缀的whois服务器是 whois.centralnic.net ,并且该服务器似乎无法使用netcat。当我给它任何查询时,似乎只是在没有响应的情况下关闭连接:
$ echo foobar | nc whois.centralnic.net 43
# => No output from nc.
我使用telnet成功地进行了相同的查询:
$ telnet whois.centralnic.net 43
Trying 193.105.170.136...
Connected to whois.centralnic.net.
Escape character is '^]'.
foobar
DOMAIN NOT FOUND
Connection closed by foreign host.
那么,什么可能使服务器对telnet的行为与netcat不同?
我想也许这是一个时间问题,所以我没有成功尝试:
$ { sleep 4; echo foobar; sleep 4; } | nc whois.centralnic.net 43
# => No output from nc.
我看到netcat有一个-T
选项让它的行为更像telnet,所以我没有成功尝试过:
$ { sleep 4; echo foobar; sleep 4; } | nc -T whois.centralnic.net 43
# => No output from nc.
在我的生产系统中,我不会使用netcat或telnet,但似乎有一些奇怪的网络问题在这里发生,我想知道它。任何人都可以了解为什么netcat适用于所有whois服务器,但只有telnet适用于whois.centralnic.net?
答案 0 :(得分:6)
该服务在其请求中需要CRLF
,而不仅仅是LF
;
这是有效的(在Ubuntu上,有多个netcat版本,所以不能为你说话)
$ echo -e "foobar\r\n" | nc whois.centralnic.net 43
DOMAIN NOT FOUND