Просмотр полной версии : 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 сервера.
Попробуй так
$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);
после того как прокси сообщит, что соединение установлено ты можешь слать ему все как будто это и есть 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
вместо fgets пиши fread
и чето твой прокси полудохлый, тестируй лучше на локалхосте
Pashkela
15.12.2008, 21:51
Опять же это GET
А что в твоем понимании "не то"??? Чем тебе GET не угодил? Бред какой-то. Скажи КОНКРЕТНО, чо те надо, а то опять напустил тумана. Брутить мыло через прокси собрался? Или что? Чо за тайны мадридского двора?
preda1or
15.12.2008, 21:52
bons
СПАСИБО ОГРОМНОЕ!)
p.s.
Pashkela
Все поняли, только ты не понял)
А что в твоем понимании "не то"??? Чем тебе 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
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot