在没有 headers 的情况下卷曲 whois

curl whois without headers

我在 php 中使用 curl 来发出 whois 请求。大多数情况下这工作正常,但偶尔 whois 服务器会拒绝 curl 请求,因为它们使用了无效的格式。

这是一个工作示例:

curl -X "who-is.ga" whois.my.ga:43

另一方面,这不起作用:

curl -X "ikea.eu" whois.eu:43

欧盟 whois 服务器拒绝该格式,因为(看起来)在请求中包含所有 headers,即:

WHOIS ikea.eu / HTTP/1.1User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.21 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2Host: whois.eu:43Accept: /

虽然大多数 whois 服务器会在 \r\n 之前解析请求,但有些服务器会考虑整个请求。

所以我想删除额外的 headers,但只能删除用户代理和主机。

curl -X "ikea.eu" --header "Host:" --header "Accept:" --user-agent "" whois.eu:43

但是headers“/”和"HTTP/1.1"仍然存在。

% WHOIS ikea.eu / HTTP/1.1 -7: %Invalid pattern

关于如何静音所有 headers 的任何建议,有效地仅发送“-X”的内容或如何单独删除不需要的 headers?

注意:我对 whois 请求使用 curl,因为它允许我使用代理。我故意把这部分从上面的例子中去掉。

第一个服务器 whois.eu 似乎可以工作,因为它在遇到空格时停止读取。另一个 whois.eu 从套接字读取所有输入并将其用作您的查询。

最好的办法可能是在 telnet 模式下使用 cURL 发送单个域并读取响应。

这适用于我尝试过的大多数 WHOIS 服务器:

echo ikea.eu | curl telnet://whois.eu:43

需要注意的是,cURL 一次写入一个字节到 telnet 模式的套接字,而不是一次写入所有数据。这可能会导致某些服务器出现问题,这些服务器不等待换行符终止输入(例如 whois.tucows.com:43),而是在接收到任何数据后执行查询。

在这些情况下,您可以使用 netcat:

echo yahoo.com | nc whois.tucows.com 43

它还支持代理:

echo yahoo.com | nc -X5 -x127.0.0.1:1080 whois.tucows.com 43