Автоматическая авторизация в MaxDSL через PHP-скрипт, Internet – MoldTelecom


Наверное многим пользователям Internet-провайдера MoldTelecom (Молдова, Кишинев) пакета MaxDSL надоела эта надоедливая картинка:

MaxDSL login

Каждый раз, когда я включаю свой компьютер и пытаюсь зайти в Internet, выскакивает страница с формой авторизации. Честно говоря, мне это поднадоело и я решил автоматизировать процесс авторизации и включения Интернет-сервиса.

MaxDSL Activate

Некоторые просто сохраняют данные полей, но меня и такой способ не устраивает. Мне хотелось бы удаленно включать компьютер, и чтобы он автоматически выходил в Internet без участия человека.

Где-то в просторах Internet я уже встречал похожий скрипт, который был написан на PERL. Но для рядовых пользователей PHP гораздо легче воспринимается, да и информации полно.



Для отсылки Логина и Пароля я использую библиотеку CURL и для удобства его использования, я создал класс для работы с CURL по отсылке POST и GET данных. Возможно кому-то он пригодится.
Не забудьте проверить, у вас должна быть подключена библиотека CURL. (раскомментировать «;extension=php_curl.dll» в php.ini).

Вот собственно сам PHP-код:

<?php
error_reporting(5);
set_time_limit(30);

$username = 'c12345678';
$password = '123321';
$base_url = 'http://86.106.213.186:8080/';

$user_agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
//$_SERVER['HTTP_USER_AGENT']

function set_log($str = '') {
$f = fopen('log.txt', 'a+');
fwrite($f, $str."\r\n");
fclose($f);
echo $str . '</br>';
}

function parsePHPConfig() {
ob_start();
phpinfo(1);
$s = ob_get_contents();
ob_end_clean();
$a = $mtc = array();
if (preg_match_all('/(.*?)<\/td>(.*?)<\/td>(:?(.*?)<\/td>)?<\/tr>/', $s, $mtc, PREG_SET_ORDER))
foreach($mtc as $v){
if($v[2] == 'no value') continue;
$a[trim($v[1])] = $v[2];
}
return $a;
}

if (!extension_loaded('curl')) {
$phpconf = parsePHPConfig();
$str = 'Ошибка! Не загружен модуль "CURL" для PHP.
Откройте файл "'.$phpconf['Configuration File (php.ini) Path'].'" , раскоментируйте строчку "extension=php_curl.dll" (Win32) или "extension=php_curl.so" (Linux/Unix).
Перезапустите Apache Server и проверьте снова.';
set_log($str);
echo $str . 'Загруженные библиотеки:';
print_r(get_loaded_extensions());
exit;
}

class CURL {
var $callback = false;

function setCallback($func_name)
{
$this->callback = $func_name;
}

function doRequest($method, $url, $vars, $timeout = 10)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
if ($method == 'POST') {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);
}
$data = curl_exec($ch);
curl_close($ch);
if ($data) {
if ($this->callback)
{
$callback = $this->callback;
$this->callback = false;
return call_user_func($callback, $data);
} else {
return $data;
}
} else {
return curl_error($ch);
}
}

function get($url, $timeout = 10)
{
return $this->doRequest('GET', $url, 'NULL', $timeout);
}

function post($url, $vars, $timeout = 10)
{
return $this->doRequest('POST', $url, $vars, $timeout);
}
}

set_log('--- '.date('Y-m-d [H:i:s]').' Запуск скрипта ---');
$url_connect = $base_url . 'home';

$a = new CURL();
$html = $a->get($url_connect, 15);
//$r = file_get_contents($url); echo $f;

if(!$html) {
set_log('Ошибка: Нет соединения с '. $url_connect);
exit;
}

if(strstr($html, 'authenticateForm')) {
set_log('Идет авторизация Вашего аккаунта');
$params = 'username='.$username.'&password='.$password;
$res = $a->post($url,$params);
if(strstr($res, 'authenticateForm')) {
set_log('Ошибка: Неверный Логин или Пароль!');
exit;
}
}
else set_log('Авторизация активна');

if(strstr($html, 'serviceOff.gif')) {
set_log('Соединение не активно');
$res = $a->get($base_url . 'serviceStart/refresh/home?service=PrDSL1&group=2');
set_log('Идет активация соединения');
} else set_log('Соединение было активно');

$stat = $a->get($base_url . 'status');
if(strstr($stat, 'Connected')) {
set_log('Соединение успешно установлено');
$rule = '~(.*?)<\/td>\s(.*?)<\/td>\s<\/td>\s
\s<div>(.*)<\/div>\s<\/td>\s<div>(.*)<\/div><\/td>\s
<div>(.*)<\/div><\/td>~siU';
$matches = array();
preg_match($rule, $stat, $matches);
//print_r($matches);
$serv_name	= $matches[1];
$status = $matches[2];
$time	= $matches[3];
$download = round(str_replace(',', '', $matches[4])/(1024*1024), 2);
$upload = round(str_replace(',', '', $matches[5])/(1024*1024), 2);

set_log('Название сервиса: '.$serv_name);
set_log('Время on-line: '.$time);
set_log('Download: '. $download. ' Mb , Upload: '.$upload .' Mb');
} else set_log('Соединение не установлено');
set_log('');
?>

Скачать PHP-скрипт в виде ZIP-архива

Скрипт можно добавить в планировщик заданий и запускать из командной строки. Либо другими способами запуска php – скрипта на локальном компьютере (CRON).
При каждом запуске скрипта, ведется подробный LOG, в котором пишется и информация о статусе, а также размер Upload и Download трафика:

--- 2008-04-22 [00:19:48] Запуск скрипта ---
Авторизация активна
Соединение было активно
Соединение успешно установлено
Название сервиса: MaxDSL Eco (512/512 kbps) gratuit
Время on-line: 04:41:03
Download: 16.1 Mb , Upload: 45.92 Mb

Если будут какие-нибудь идеи или доработки, обращайтесь!

  • Share/Bookmark

Читайте ещё похожие статьи на этом сайте:

  1. MoldTelecom – реклама MaxDSL, не смейтесь :)
  2. 6 способов сломать Internet Explorer
  3. PHP функция для конвертирования размеров файла (*KB, *MB, *GB)
  4. PHP дробная часть числа
  5. Как установить и получить cookie на JavaScript?
1 балл2 балла3 балла4 балла5 баллов (2 голосов, среднее: 5.00 из 5)
Loading ... Loading ...
PHP, Программирование


Если Вам понравилась эта статья, пожалуйста оставьте свой комментарий или подпишитесь на RSS-канал и получайте в будущем статьи на RSS Reader.

Комментарии

22 комментария (ев) для “Автоматическая авторизация в MaxDSL через PHP-скрипт, Internet – MoldTelecom”

Написать комментарий

(обязательно)

(обязательно, не публикуется)