PDA

Просмотр полной версии : fsockopen()+proxy


preda1or
15.12.2008, 20:52
<?
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($fp, 10240);
$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
Типо здесь чото по теме (http://forum.inattack.ru/index.php?showtopic=18995&pid=97631&st=0&#entry97631)

preda1or
15.12.2008, 21:09
Типо здесь чото по теме (http://forum.inattack.ru/index.php?showtopic=18995&pid=97631&st=0&#entry97631)
Там 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


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($fp, 512);
if (substr($st, 0, 3)!="+OK")
{
fclose($fp);
return(NULL);
}

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

$st=fgets($fp, 512);
if (substr($st, 0, 3)!="+OK")
{
fclose($fp);
return(NULL);
}

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

$st=fgets($fp, 512);
fclose($fp);
if (substr($st, 0, 3)=="+OK")
return(true);
else if (substr($st, 0, 4)=="+ERR")
return(false);
else
return(NULL);
}
?>

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

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

cash$$$
15.12.2008, 21:34
Попробуй так

$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($fp, base64_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 статуса через прокси, алгоритм должен быть одинаковый, мне лень проверять:)


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_cont, strpos($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

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

<?
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($fp, 10240);
$response = $line;
echo $response;
fputs($fp,"USER login\r\n");
$line = fgets($fp, 10240);
$response = $line;
echo $response;
fclose ($fp);
?>

Не работает...

preda1or
15.12.2008, 21:42
cash$$$
Спасибо, но мне надо именно POP3
Pashkela
Опять же это GET

bons
15.12.2008, 21:49
вместо fgets пиши fread
и чето твой прокси полудохлый, тестируй лучше на локалхосте

Pashkela
15.12.2008, 21:51
Опять же это GET

А что в твоем понимании "не то"??? Чем тебе GET не угодил? Бред какой-то. Скажи КОНКРЕТНО, чо те надо, а то опять напустил тумана. Брутить мыло через прокси собрался? Или что? Чо за тайны мадридского двора?

preda1or
15.12.2008, 21:52
bons
СПАСИБО ОГРОМНОЕ!)

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

bons
15.12.2008, 21:55
А что в твоем понимании "не то"??? Чем тебе GET не угодил? Бред какой-то. Скажи КОНКРЕТНО, чо те надо, а то опять напустил тумана. Брутить мыло через прокси собрался? Или что? Чо за тайны мадридского двора?

для POP3 протокола нужен HTTP CONNECT прокси, одного GET тут не хватит

preda1or
15.12.2008, 21:58
Вот так тупая замена fread на fgets, может отнять целый день, на бесполезное изучение RFC

Pashkela
15.12.2008, 22:00
http://ru2.php.net/pfsockopen

http://php.justinvincent.com/download.php?sappp