ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
PHP POP3 Interface [Proxy Support] |

09.01.2010, 16:53
|
|
Участник форума
Регистрация: 05.01.2010
Сообщений: 127
Провел на форуме: 587522
Репутация:
61
|
|
PHP POP3 Interface [Proxy Support]
PHP POP3 Interface [Proxy Support]
Описание: Набор функций для работы с POP3(RFC 1939). Текущий список функций (будут дополняться по Вашим просьбам): - pop3_connect()
- pop3_disconnect()
- pop3_login()
- pop3_stat()
- pop3_list()
- pop3_retr()
- pop3_dele()
- pop3_rset()
=====================================
Функция pop3_connect()Устанавливает подключение с сервером и возвращает идентификатор соединения при успешном подключении. При ошибке возвращает FALSE pop3_connect($host, $proxy=FALSE, $phost='', $pport='', $port='110', $timeout='20') - $host - адрес POP3-сервера
- $proxy - использование Proxy-сервера при подключении (TRUE/FALSE)
- $phost - IP-адрес Proxy-сервера
- $pport - порт Proxy-сервера
- $port - порт POP3-сервера
- $timeout - таймаут соеденения
PHP код:
function pop3_connect($host, $port='110', $proxy=FALSE, $phost='', $pport='', $timeout='20')
{
if($proxy)
{
$patern_ip="^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$";
$patern_port="^([0-9]{2,5})$";
if(ereg($pattern_ip, $phost) AND ereg($pattern_port, $pport))
{
$s=fsockopen("tcp://".$phost, $pport);
if($s)
{
stream_set_timeout($s, $timeout);
fputs($s, "CONNECT $host:$port HTTP/1.0\r\n\r\n");
$line = fread($s, 256);
if(eregi("200", $line))
{
fputs($s, "NOOP\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
return $s;
}
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
} else {
$s=fsockopen($host, $port);
if($s)
{
stream_set_timeout($s, $timeout);
fputs($s, "NOOP\r\n");
$line=fread($s, 256);
if(eregi("\+OK", $line))
{
return $s;
} else {
return false;
}
} else {
return false;
}
}
}
Функция pop3_login()Авторизует пользователя на POP3-сервере, при успешной авторизации возвращает TRUE, при ошибке возвращает FALSE pop3_login($s, $login, $password) - $s - идентификатор соединения
- $login - имя пользователя для авторизации
- $password - пароль для авторизации
PHP код:
function pop3_login($s, $login, $password)
{
if($s)
{
fputs($s, "NOOP\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
fputs($s, "USER $login\r\n");
$line=fread($s, 256);
if(eregi("\+OK", $line))
{
fputs($s, "PASS $password\r\n");
$line=fread($s, 256);
if(eregi("\+OK",$line))
{
return true;
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
}
Функция pop3_disconnect()Закрывает соединение с POP3-сервером, возвращает TRUE при успешном закрытии соединения,и FALSE при ошибке pop3_disconnect($s) - $s - идентификатор соединения
PHP код:
function pop3_disconnect($s)
{
if($s)
{
fputs($s, "NOOP\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
fputs($s, "QUIT\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
unset($s);
return true;
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
}
Функция pop3_stat()Возвращает массив, 1ый элемент которого - количество писем в ящике, 2ой - размер всех писем в байтах. Возвращает FALSE при ошибке pop3_stat($s) - $s - идентификатор соединения
PHP код:
function pop3_stat($s)
{
if($s)
{
fputs($s, "NOOP\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
fputs($s, "STAT\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
$reply=explode(" ",$line);
return array($reply[1], $reply[2]);
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
}
Функция pop3_list()Возвращает массив, ключи которого - идентификаторы писем, значения - размер письма. Возвращает FALSE при ошибке pop3_list($s) - $s - идентификатор соединения
PHP код:
function pop3_list($s)
{
if($s)
{
fputs($s, "NOOP\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
fputs($s, "LIST\r\n");
while(!feof($s)) {
$line.=fread($s, 256);
$stream_meta_data=stream_get_meta_data($s);
if($stream_meta_data['unread_bytes']<=0) break;
}
if(eregi("\+OK", $line))
{
preg_match_all('#([0-9]{1,})\s+([0-9]{3,10})#i', $line, $reply);
unset($reply[0]);
$result=array_combine($reply[1], $reply[2]);
ksort($result);
return $result;
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
}
Функция pop3_retr()Возвращает полное содержание письма, по его идентификатору. Возвращает FALSE при ошибке pop3_retr($s,$mid) - $s - идентификатор соединения
- $mid - идентификатор письма
PHP код:
function pop3_retr($s,$mid)
{
if($s)
{
fputs($s, "NOOP\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
$mids=array_keys(pop3_list($s));
if(in_array($mid,$mids))
{
fputs($s, "RETR $mid\r\n");
while(!feof($s)) {
$line.=fread($s, 256);
$stream_meta_data=stream_get_meta_data($s);
if($stream_meta_data['unread_bytes']<=0) break;
}
return $line;
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
}
Функция pop3_dele()Удаляет письмо по его идентификатору, при успешном удалении возвращает TRUE, при ошибке возвращает FALSE pop3_dele($s,$mid) - $s - идентификатор соединения
- $mid - идентификатор письма
PHP код:
function pop3_dele($s,$mid)
{
if($s)
{
fputs($s, "NOOP\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
fputs($s, "DELE $mid\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
return true;
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
}
Функция pop3_rset()Восстанавливает "удаленные письма" текущего соединения, при успешном восстановлении возвращает TRUE, при ошибке возвращает FALSE pop3_rset($s) - $s - идентификатор соединения
PHP код:
function pop3_rset($s)
{
if($s)
{
fputs($s, "NOOP\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
fputs($s, "RSET\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
return true;
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
}
=====================================
В ближайшем времени (по приоритету): - функция обработки письма полученного с помощью pop3_retr()
- функция скачивания всех писем с ящика
- функция удаления всех писем
- функция действий со списком e-mail`ов
- функция "брутфорсер"

Скрипт(и последующие его версии) Вы можете скачать с сайта: http://dmtn.ru/develop/pop3_interface/ Пример использования:
PHP код:
include('mail.php');
$s=pop3_connect('pop.yandex.ru');
if(pop3_login($s, 'egorka@yandex.ru', 'preved'))
{
//действия при успешной авторизации
} else {
//ошибка авторизации
}
pop3_disconnect($s);
Буду рад советам, пожеланиям, критике
Последний раз редактировалось CPU0; 11.01.2010 в 17:01..
|
|
|

11.01.2010, 04:40
|
|
Участник форума
Регистрация: 05.01.2010
Сообщений: 127
Провел на форуме: 587522
Репутация:
61
|
|
11.01.2010
Добавлены функции:
# pop3_stat()
# pop3_list()
# pop3_retr()
# pop3_dele()
# pop3_rset()
Последний раз редактировалось CPU0; 11.01.2010 в 05:00..
|
|
|

11.01.2010, 06:24
|
|
Reservists Of Antichat - Level 6
Регистрация: 07.07.2009
Сообщений: 324
Провел на форуме: 1585404
Репутация:
564
|
|
залей куда нить готовый скрипт в одном архиве
|
|
|

11.01.2010, 16:46
|
|
Участник форума
Регистрация: 05.01.2010
Сообщений: 127
Провел на форуме: 587522
Репутация:
61
|
|
Сообщение от shell_c0de
залей куда нить готовый скрипт в одном архиве
http://dmtn.ru/develop/pop3_interface/0.1b/mail.zip
|
|
|

13.01.2010, 16:15
|
|
Познающий
Регистрация: 10.03.2009
Сообщений: 33
Провел на форуме: 63816
Репутация:
0
|
|
Сообщение от CPU0
http://dmtn.ru/develop/pop3_interface/0.1b/mail.zip
error404
|
|
|

13.01.2010, 18:03
|
|
Участник форума
Регистрация: 05.01.2010
Сообщений: 127
Провел на форуме: 587522
Репутация:
61
|
|
Сообщение от maximka555
error404
Вообщето 403.
Вечером восстановлю.
|
|
|

03.02.2010, 04:00
|
|
Участник форума
Регистрация: 05.01.2010
Сообщений: 127
Провел на форуме: 587522
Репутация:
61
|
|
Данный топик интересен кому-либо из присутствующих?
Если нет - не вижу смысла продолжать разработку.
|
|
|

03.02.2010, 10:40
|
|
Moderator - Level 7
Регистрация: 04.02.2007
Сообщений: 554
Провел на форуме: 7518056
Репутация:
1089
|
|
Сообщение от CPU0
Данный топик интересен кому-либо из присутствующих?
Если нет - не вижу смысла продолжать разработку.
продолжай конечно, кому надо- тому интересно, просто невсякий знает как довести до ума данные функции (кстати какие еще наработки планируеш?)
|
|
|

28.02.2010, 22:20
|
|
Познающий
Регистрация: 30.11.2009
Сообщений: 46
Провел на форуме: 159271
Репутация:
1
|
|
$logined = pop3_login($s, $user, $pass);
if($logined===FALSE){exit("pop3_login error");}
Все время pop3_login error
добавлено через 5 мин
NOOP -ERR Invalid command.
спусия еще 10 мин
почикал везде
PHP код:
fputs($s, "NOOP\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
Теперь виснет на
pop3_retr()
спусия еще 10 мин
Для получения ответа от сервера использую
PHP код:
function get_data($pop_conn){
$data="";
while (!feof($pop_conn)) {
$buffer = chop(fgets($pop_conn,1024));
$data .= "$buffer\r\n";
if(trim($buffer) == "."){ break;}
}
return $data;
}
Так скрипт не виснет!
Последний раз редактировалось Alexander89; 28.02.2010 в 23:08..
|
|
|

28.02.2010, 23:32
|
|
Познающий
Регистрация: 30.11.2009
Сообщений: 46
Провел на форуме: 159271
Репутация:
1
|
|
Вот что получилось после моего шаманства
Файл func.php
PHP код:
<?php
function pop3_connect($host, $port='110', $proxy=FALSE, $phost='', $pport='', $timeout='20')
{
if($proxy)
{
$patern_ip="^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$";
$patern_port="^([0-9]{2,5})$";
if(ereg($pattern_ip, $phost) AND ereg($pattern_port, $pport))
{
$s=fsockopen("tcp://".$phost, $pport);
if($s)
{
stream_set_timeout($s, $timeout);
fputs($s, "CONNECT $host:$port HTTP/1.0\r\n\r\n");
$line = fread($s, 256);
if(eregi("200", $line))
{
fputs($s, "NOOP\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
return $s;
}
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
} else {
$s=fsockopen($host, $port, $errno, $errstr, $timeout);
if($s)
{
$line=fgets($s,1024);
stream_set_timeout($s, $timeout);
return $s;
} else {
return false;
}
}
}
function pop3_login($s, $login, $password)
{
if($s)
{
fputs($s, "USER $login\r\n");
$line=fread($s, 256);
//echo "USER $login\r\n";
//echo $line;
if(eregi("\+OK", $line))
{
fputs($s, "PASS $password\r\n");
$line=fread($s, 256);
//echo "PASS $password\r\n";
//echo $line;
if(eregi("\+OK",$line))
{
return true;
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
}
function pop3_disconnect($s)
{
if($s)
{
fputs($s, "QUIT\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
unset($s);
return true;
} else {
return false;
}
} else {
return false;
}
}
function pop3_stat($s)
{
if($s)
{
fputs($s, "STAT\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
$reply=explode(" ",$line);
return array($reply[1], $reply[2]);
} else {
return false;
}
} else {
return false;
}
}
//Возвращает массив, ключи которого - идентификаторы писем, значения - размер письма. Возвращает FALSE при ошибке
//$s - идентификатор соединения
function pop3_list($s)
{
if($s)
{
fputs($s, "LIST\r\n");
while(!feof($s)) {
$line.=fread($s, 256);
$stream_meta_data=stream_get_meta_data($s);
if($stream_meta_data['unread_bytes']<=0) break;
}
//echo "LIST\r\n";
//echo "$line\r\n";
if(eregi("\+OK", $line))
{
preg_match_all('#([0-9]{1,})\s+([0-9]{3,10})#i', $line, $reply);
unset($reply[0]);
$result=array_combine($reply[1], $reply[2]);
ksort($result);
return $result;
} else {
return false;
}
} else {
return false;
}
}
//Возвращает полное содержание письма, по его идентификатору. Возвращает FALSE при ошибке
function pop3_retr($s,$mid){
if($s === FALSE){
return false;
}
fputs($s, "RETR $mid\r\n");
return get_data($s);
}
//Удаляет письмо по его идентификатору, при успешном удалении возвращает TRUE, при ошибке возвращает FALSE
//$s - идентификатор соединения
//$mid - идентификатор письма
function pop3_dele($s,$mid)
{
if($s)
{
fputs($s, "DELE $mid\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
return true;
} else {
return false;
}
} else {
return false;
}
}
//Восстанавливает "удаленные письма" текущего соединения, при успешном восстановлении возвращает TRUE, при ошибке возвращает FALSE
function pop3_rset($s)
{
if($s)
{
fputs($s, "RSET\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
return true;
} else {
return false;
}
} else {
return false;
}
}
function get_data($pop_conn){
$data="";
while (!feof($pop_conn)) {
$buffer = chop(fgets($pop_conn,1024));
$data .= "$buffer\r\n";
if(trim($buffer) == "."){ break;}
}
return $data;
}
?>
Ну и пример использования
PHP код:
<?php
include('func.php');
$host = 'site.ru';
$proxy = FALSE;
$phost = '';
$pport = '';
$port = 110;
$timeout= 10;
$user = 'username';
$pass = 'password';
$s = pop3_connect($host, $port, $proxy=FALSE, $phost, $pport, $timeout);
if($s===FALSE){exit("\r\npop3_connect error\r\n");}
$logined = pop3_login($s, $user, $pass);
if($logined===FALSE){exit("\r\npop3_login error\r\n");}
$list = pop3_list($s);
if($list===FALSE){exit("pop3_list error");}
foreach($list as $mid => $msize){
$mtext = pop3_retr($s,$mid);
//pop3_dele($s,$mid);
echo "<br />\r\n------------------------------------------------------\r\n<br />";
echo str_replace("\r\n", "<br />",$mtext);
echo "<br />\r\n------------------------------------------------------\r\n<br />";
}
pop3_disconnect($s);
?>
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|