Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   fsockopen()+proxy (https://forum.antichat.xyz/showthread.php?t=96557)

preda1or 15.12.2008 20:52

fsockopen()+proxy
 
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);
?>

Вернет:

Код:

X-Powered-By: PHP/5.2.0
Content-type: text/html

HTTP/1.1 200 Connection established

т.е. соединение установлено.

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

P.S. Curl не предлогать

Pashkela 15.12.2008 21:07

Типо здесь чото по теме

preda1or 15.12.2008 21:09

Цитата:

Сообщение от Pashkela

Там GET/POST запросы = это не то.

Pashkela 15.12.2008 21:20

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

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

preda1or 15.12.2008 21:22

Нужно "общение" с POP3 сервером, через прокси, и всё это через сокеты.

Pashkela 15.12.2008 21:29

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);
}
?>


preda1or 15.12.2008 21:31

Как реализовать POP3 аутентификацию я знаю.
Мне нужно это пустить через прокси, с которым я общаюсь через fsockopen();

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

cash$$$ 15.12.2008 21:34

Попробуй так

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); 


bons 15.12.2008 21:35

после того как прокси сообщит, что соединение установлено ты можешь слать ему все как будто это и есть POP3 сервер. И соответственно принимать

Pashkela 15.12.2008 21:35

ну вот тебе проверка 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



Время: 02:03