PHP fsockopen通过代理

时间:2012-09-13 22:12:48

标签: php curl proxy

我目前正在使用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);

它工作得很好但是我想通过代理服务器连接,所以我通过它路由我的intertent连接。如果能够使用cURL,我会使用curl_setopt($ curl_handle,CURLOPT_PROXY,$ ip_address。':4040');但我找不到使用fsocketopen做到这一点的方法。我怎样才能用cURL或fsocketopen()实现这个目标?

2 个答案:

答案 0 :(得分:1)

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

希望这有帮助。

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

答案 1 :(得分:0)

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

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