fsockopen()+proxy

Discussion in 'PHP' started by preda1or, 15 Dec 2008.

  1. preda1or

    preda1or Member

    Joined:
    27 Oct 2008
    Messages:
    167
    Likes Received:
    96
    Reputations:
    6
    PHP:
    <?
    set_time_limit(0);
    $host '189.47.129.62';
    $port '6588';
    $fp fsockopen("tcp://".$host$port) or die ("ERROR: Could not connect to proxy server $host on port $port");
    fputs($fp"CONNECT pop3.mail.ru:110 HTTP/1.0\r\n\r\n");
    $response '';
    $line fgets($fp10240);
    $response $line;
    echo 
    $response;

    fclose ($fp);
    ?>
    Вернет:

    Code:
    X-Powered-By: PHP/5.2.0
    Content-type: text/html
    
    HTTP/1.1 200 Connection established
    т.е. соединение установлено.

    Как дальше продолжить общение, через сокет (естественно через прокси), с pop3.mail.ru?

    P.S. Curl не предлогать
     
    #1 preda1or, 15 Dec 2008
    Last edited: 15 Dec 2008
  2. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
  3. preda1or

    preda1or Member

    Joined:
    27 Oct 2008
    Messages:
    167
    Likes Received:
    96
    Reputations:
    6
  4. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    "Как дальше продолжить общение, через сокет (естественно через прокси), с pop3.mail.ru?"

    конкретизируй задачу, ТС, а то туманно всё как-то
     
  5. preda1or

    preda1or Member

    Joined:
    27 Oct 2008
    Messages:
    167
    Likes Received:
    96
    Reputations:
    6
    Нужно "общение" с POP3 сервером, через прокси, и всё это через сокеты.
     
  6. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    http://ru2.php.net/fsockopen

    CTRL+F "prox"

    вроде там всё есть. Задачу ты конкретизировал конкретно:) А вот пример работы с pop3

    PHP:
    The following function performs pop3 authentication. Returns NULL on error, or true/false to indicate username/password matching:

    $address is the hostname of the server and $ssl is a boolean that indicates whether an SSL connection is requested.

    <?php
    function pop3authCheck($username$password$address$ssl)
    {
        if (
    $ssl)
            
    $uri="ssl://$address:995";
        else
            
    $uri="tcp://$address:110";

        
    $fp=fsockopen($uri);

        if (!
    $fp)
            return(
    NULL);

        
    $st=fgets($fp512);
        if (
    substr($st03)!="+OK")
        {
            
    fclose($fp);
            return(
    NULL);
        }

        
    $st="USER $username\n";
        if (
    fwrite($fp$st)!=strlen($st))
        {
            
    fclose($fp);
            return(
    NULL);
        }

        
    $st=fgets($fp512);
        if (
    substr($st03)!="+OK")
        {
            
    fclose($fp);
            return(
    NULL);
        }

        
    $st="PASS $password\n";
        if (
    fwrite($fp$st)!=strlen($st))
        {
            
    fclose($fp);
            return(
    NULL);
        }

        
    $st=fgets($fp512);
        
    fclose($fp);
        if (
    substr($st03)=="+OK")
            return(
    true);
        else if (
    substr($st04)=="+ERR")
            return(
    false);
        else
            return(
    NULL);
    }
    ?>
     
    #6 Pashkela, 15 Dec 2008
    Last edited: 15 Dec 2008
  7. preda1or

    preda1or Member

    Joined:
    27 Oct 2008
    Messages:
    167
    Likes Received:
    96
    Reputations:
    6
    Как реализовать POP3 аутентификацию я знаю.
    Мне нужно это пустить через прокси, с которым я общаюсь через fsockopen();

    Я не знаю что посылать прокси серверу через сокет, чтобы он посылал и принимал команды от POP3 сервера.
     
  8. cash$$$

    cash$$$ Banned

    Joined:
    6 Jan 2008
    Messages:
    385
    Likes Received:
    246
    Reputations:
    10
    Попробуй так

    PHP:
    $mailserver "сервер"

          
    $user "логин"

          
    $pass "пасс"

          
    $mailto "мыло"


     
    $host '189.47.129.62';  
    $port '6588';  
    $id=Base64_Encode("login:pass"); 
    $fp fsockopen($host$port
    or die (
    "ERROR: Could not connect to proxy server $host on port $port"); 

    fputs($fp"CONNECT $mailserver:25 HTTP/1.0 \r\n"); 
    fputs($fp"Proxy-Authorization: Basic $id\r\nConnection: close\r\n\r\n");   
    fputs($fp"EHLO nm.ru\r\n"); 
    fputs($fp"AUTH LOGIN\r\n"); 
    fputs($fpbase64_encode($user)."\r\n".base64_encode($pass)."\r\n"); 
    fputs($fp"MAIL FROM: $user\r\n"); 
    fputs($fp"RCPT TO: $mailto\r\n"); 
    fputs($fp"DATA\r\n"); 

    fputs($fp"Subject: bla\r\n"); 
    fputs($fp"From: логин <login@nm.ru>\r\n\r\n"); 
    fputs($fp"text.\r\n\r\n"); 
    fputs($fp".\r\n"); 
    echo 
    fread($fp,1024)."<br>"
    fputs($fp"QUIT\r\n");   
     
    /* 
     */ 
    fclose ($fp);
     
  9. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    после того как прокси сообщит, что соединение установлено ты можешь слать ему все как будто это и есть POP3 сервер. И соответственно принимать
     
  10. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    ну вот тебе проверка ICQ статуса через прокси, алгоритм должен быть одинаковый, мне лень проверять:)

    PHP:
    Additional ICQ status request over proxy
    <?php
    function icq_uin($uin)
    {
        if (! 
    is_numeric($uin))
            return 
    false;
        
    $proxy_name 'proxy.mydomain.de';
        
    $proxy_port 8080;
        
    $proxy_user "";
        
    $proxy_pass "";
        
    $proxy_cont '';
        
    $request_url "http://status.icq.com/online.gif?icq=$uin";

        
    $proxy_fp fsockopen($proxy_name$proxy_port);
        if (!
    $proxy_fp)
            return 
    false;
        
    fputs($proxy_fp"GET $request_url HTTP/1.0\r\nHost: $proxy_name\r\n");
        
    fputs($proxy_fp"Proxy-Authorization: Basic "base64_encode ("$proxy_user:$proxy_pass")."\r\n\r\n");
        while(!
    feof($proxy_fp)){
            
    $proxy_cont .= fread($proxy_fp,4096);
        }
        
    fclose($proxy_fp);
        
    $proxy_cont substr($proxy_contstrpos($proxy_cont,"\r\n\r\n")+4);
        if (
    strstr($proxy_cont'online1'))
            return 
    'online';
        if (
    strstr($proxy_cont'online0'))
            return 
    'offline';
        if (
    strstr($proxy_cont'online2'))
            return 
    'disabled';
    }
    echo 
    "User is ".icq_uin(123456789012345);
    ?>
    Based on http://de2.php.net/manual/de/function.fopen.php#53090
    Thanx
     
  11. preda1or

    preda1or Member

    Joined:
    27 Oct 2008
    Messages:
    167
    Likes Received:
    96
    Reputations:
    6
    PHP:
    <?
    set_time_limit(0);
    $host '213.55.69.124';
    $port '6588'// 4480 is the default HTTP proxy port
    $fp fsockopen("tcp://".$host$port) or die ("ERROR: Could not connect to proxy server $host on port $port");
    fputs($fp"CONNECT pop3.mail.ru:110 HTTP/1.0\r\n\r\n");
    $response '';
    $line fgets($fp10240);
    $response $line;
    echo 
    $response;
    fputs($fp,"USER login\r\n");
    $line fgets($fp10240);
    $response $line;
    echo 
    $response;
    fclose ($fp);
    ?>
    Не работает...
     
  12. preda1or

    preda1or Member

    Joined:
    27 Oct 2008
    Messages:
    167
    Likes Received:
    96
    Reputations:
    6
    cash$$$
    Спасибо, но мне надо именно POP3
    Pashkela
    Опять же это GET
     
  13. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    вместо fgets пиши fread
    и чето твой прокси полудохлый, тестируй лучше на локалхосте
     
    1 person likes this.
  14. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    А что в твоем понимании "не то"??? Чем тебе GET не угодил? Бред какой-то. Скажи КОНКРЕТНО, чо те надо, а то опять напустил тумана. Брутить мыло через прокси собрался? Или что? Чо за тайны мадридского двора?
     
  15. preda1or

    preda1or Member

    Joined:
    27 Oct 2008
    Messages:
    167
    Likes Received:
    96
    Reputations:
    6
    bons
    СПАСИБО ОГРОМНОЕ!)

    p.s.
    Pashkela
    Все поняли, только ты не понял)
     
  16. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    для POP3 протокола нужен HTTP CONNECT прокси, одного GET тут не хватит
     
  17. preda1or

    preda1or Member

    Joined:
    27 Oct 2008
    Messages:
    167
    Likes Received:
    96
    Reputations:
    6
    Вот так тупая замена fread на fgets, может отнять целый день, на бесполезное изучение RFC
     
  18. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    http://ru2.php.net/pfsockopen

    http://php.justinvincent.com/download.php?sappp
     
    #18 Pashkela, 15 Dec 2008
    Last edited: 15 Dec 2008