【问题标题】:PHP fsocketopen Though ProxyPHP fsockopen 通过代理
【发布时间】:2012-09-14 07:59:50
【问题描述】:

我目前正在使用 PHP 打开一个端口 43 连接,以使用此代码直接从注册表中获取 whois 信息。

// connecting to the whois server.  
$handle = fsockopen($server, 43);  
        if (!$handle)  
            return false; // connection failure   


        //asking the server  
        fwrite($handle, $domain_name."\r\n");  


        // getting response  
        $response = '';  
        while (!feof($handle))  
            $response .= fgets($handle, 1024);  

        fclose($handle);

它工作得很好,但是我想通过代理服务器进行连接,所以我通过它路由我的互联网连接。如果这能够使用 cURL,我会使用 curl_setopt($curl_handle, CURLOPT_PROXY, $ip_address . ':4040');但我找不到使用 fsocketopen 的方法。如何使用 cURL 或 fsocketopen() 完成此操作?

【问题讨论】:

    标签: php curl proxy


    【解决方案1】:

    套接字没有代理。只是网关和路由器在中间(如果有的话)。你在谈论 cURL,它有代理——它只使用 http/s 代理服务。例如,如果您在服务器 example.com:8080 上有 http 代理服务,您首先需要在端口 8080 上打开与服务器 example.com(套接字)的连接,然后发送您的请求,代理将转发您的请求并返回响应。在您的情况下,您只需在特定主机上的端口 43 上打开 tcp 连接并直接与目标服务器交换数据。如果您不想直接执行此操作并透露您的 ip(或其他内容),您也需要一些服务。如果您可以访问其他机器,则可以使用它来完成这项工作。如果你想手动完成,你可以使用 ssh 或类似的东西,如果你想让它自动化,你可能需要在你的中间服务器上编写服务,因为你可能找不到任何具有其他协议的公共代理服务器而不是流行的http、ftp、...

    希望这会有所帮助。

    顺便说一句,我认为您没有理由在 whois 服务上使用代理。

    【讨论】:

      【解决方案2】:

      您可以使用SOCKS 代理将 TCP 连接从您的计算机中继到 SOCKS 服务器和 WHOIS 服务器,但您必须通过 fsockopen 实现 SOCKS 通信协议。

      另一种方法是在服务器上使用ProxyChains 并通过PHP 执行它。我在这里回答了一个类似的问题 (How to capture and feed telnet using php and shell scripting?),它展示了如何从 PHP 调用代理链以在远程服务器上执行 WHOIS 命令并读取响应。

      【讨论】:

        猜你喜欢
        • 2011-10-30
        • 2011-08-22
        • 1970-01-01
        • 2014-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-01
        • 1970-01-01
        相关资源
        最近更新 更多