【问题标题】:Delphi idWHOIS with Web proxy带 Web 代理的 Delphi idWHOIS
【发布时间】:2012-08-23 10:24:41
【问题描述】:

早安,

请举例说明如何通过网络代理使用 idWHOIS? 我想使用免费的网络代理匿名拨打 whois 电话。

为什么 idHTTP 组件具有 ProxyParams 而没有 idWHOIS 却如此简单?

我真的一无所知:)

查看我尝试的代码片段:

procedure TForm2.Button2Click(Sender: TObject);
var
  ProxyHTTP :TIdConnectThroughHttpProxy;
  Proxy :TIdCustomTransparentProxy;
begin
  ProxyHTTP := TIdConnectThroughHttpProxy.Create(Self);
  Proxy := TIdCustomTransparentProxy.Create(Self);
  Try

{    idIOHandler.TransparentProxy := Proxy;

    Proxy.Host := 'whois.ausregistry.net.au';
    Proxy.Port := StrToInt('43');
    Proxy.IPVersion := ID_DEFAULT_IP_VERSION;
//    Proxy.Connect(idIOHandler, edtProxy.Text, StrToInt(edtPort.Text), ID_DEFAULT_IP_VERSION);
//    Proxy.Enabled;

    Proxy.ChainedProxy := ProxyHTTP;
 }

    idIOHandler.TransparentProxy := ProxyHTTP;
    ProxyHTTP.Host := edtProxy.Text;
    ProxyHTTP.Port :=  StrToInt(edtPort.Text);
    ProxyHTTP.IPVersion := ID_DEFAULT_IP_VERSION;
    ProxyHTTP.OnStatus := ProxyHTTPOnStatus;
    ProxyHTTP.Enabled;
    ProxyHTTP.Connect(idIOHandler, edtProxy.Text, StrToInt(edtPort.Text), ID_DEFAULT_IP_VERSION);

    Memo1.Clear;
    Memo1.Update;
    Memo1.Lines.Text := idWhois.WhoIs(edtDomain.Text + '.com.au');
  Finally
    idIOHandler.Close;
    idWhois.Disconnect;
    Proxy.Free;
    ProxyHTTP := TIdConnectThroughHttpProxy.Create(Self);
  End;
end;

【问题讨论】:

  • 您很难获得一个网络代理来与 whois 协议通信。无论如何,这听起来像是虐待行为。许多whois 服务器每天只允许有限数量的查询是有原因的。
  • 但大多数注册商都拥有 WHOIS 数据库的 HTTP 前端。 OTOH 喜欢混淆数据,例如显示图片而不是文本,以防止垃圾邮件收集者使用 whois 数据库。
  • 重新标记:这个问题不是 Delphi 特有的。它涉及一般 Internet 概念,例如端口和协议,以及特定 HTTP 协议功能(HTTP 代理)。
  • whois (RFC3912) 在 TCP 之上运行,而不是在 HTTP 之上。因此那里没有代理的概念,您不应该使用 HTTP 库来进行 whois 查询。

标签: delphi http proxy whois


【解决方案1】:

首先 - 你使用 whois 还是 http 协议?

  • 有本地 whois 服务通过其本地协议工作。
  • 还有 WWW 前端,可让您在 MSIE (Microsoft Internet Explorer) 等 WWW 浏览器中发出 whois 请求并查看结果。

显然,您应该能够通过 HTTP 代理连接到后者。 这里的WWW 是几个相关技术一起使用的绰号:HTTP + SSL/TLS + WebDAV + HTML + CSS + JS 等。因此,HTTP 代理可以被认为是 HTTP 的子集,它是 WWW 的子集 并且无法连接到前者,因为 whois 不是 WWW blob 的一部分。

例如电子邮件也是如此,它也不属于 WWW 领域:

  • 有邮件程序,通过IMAP/POP/SMTP协议和对应端口直接连接,
  • 还有像 Yahoo 和 GMail 这样的 WWW 前端允许通过 MSIE 查看邮件。 WWW 访问通过 HTTP 代理工作,直接访问不是 HTTP 并且不起作用。

例外:某些代理允许 pin-holling。这被视为安全漏洞和错误配置,但有时可以通过 HTTP/SSL 支持命令 CONNECT。但通常不可能连接到每个端口,而只能连接到 :80 和 :443 端口。 whois 协议很少出现在这些端口上,只有 HTTP 或 HTTPS 协议。 一些服务器,如 Jabber、ICQ、GTalk 等许多 Messenger 或 Skype 超级节点,故意滥用这些端口:80 和:443 来提供其非 HTTP 协议,从而帮助这些程序欺骗 HTTP 代理和绕过 NAT 隔离。但我认为你几乎找不到很多 whois 服务器这样做

无论谁,如果您发现配置不当的代理或此类特殊配置的 whois 服务器,您将有机会使用它。 否则,您将只能通过现有的 WWW 前端对 whois 服务器使用 idHTTP。大多数 DNS 名称注册商都提供它们,因此用户无需使用特殊工具,只需使用 WWW 浏览器即可查看数据。

Google 搜索“http 代理 ssl 连接 pinholling”以获取有关这种 HTTP 代理使用的更多详细信息。 谷歌“NAT Traversal”和“Proxy Tunelling”以获得更一般的概念。 有时 VPN 技术被 [mis-] 用于在外部建立隧道。

PS。这并不能回答“我该怎么做”——没有 100% 可靠的方法——但希望能回答“为什么使用具有 ProxyParams 但没有 idWHOIS 的 idHTTP 组件如此简单?”。

如果通过 HTTP 代理向我们发送 idSMTP 或其他电子邮件组件,我猜你会遇到同样的障碍。

PPS。还有更通用的代理 - Socks 代理 - 应该允许转发任何 TCP 类协议。但它们是非常稀有的东西。

【讨论】:

  • 更具体的原生 WHOIS 协议。
  • 我还阅读了一些关于支持 CONNECT 请求的 HTTP 代理也能够服务 WHOIS 请求的信息?这是真的?任何指针或例子? :)
  • 我在“例外:一些代理允许针孔”字样之后写了关于 CONNECT 的文章。我没有什么要补充的。例如,在我的工作中,http 代理允许连接到端口:80 和:443。它拒绝与其他端口的连接。它允许我使用 Jabber Messenger(GTalk 和其他一些)。因为他们的服务器确实滥用了 Jabber 协议的这些端口。我不知道也无法知道您的代理是如何配置的。也没有 whois 服务器滥用 whois 协议的 :80 和 :443 端口。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-23
  • 2018-05-19
相关资源
最近更新 更多