• Реклама


Считалка трафика

Разработка и Написание программ, вопросы, идеи...

Считалка трафика

Сообщение Вася Триллер 01 дек 2006 20:30

Дело было вечером, делать мне было нечего.
Нет, сабж - не программа. Это всего лишь скрипт. Написан он потому, что на https://np.stat.pike/s/trafs.shtml и других подобных статистических ресурсах Корвета нет пункта "Сумма"/"Итог"/"Всего"/... (или у кого-то всё-таки есть? :))
Так вот. Этот скрипт считает, сколько всего трафика натикало во все стороны. Пока не может самостоятельно брать с сервера данные - их надо вносить в скрипт вручную.
Вот код
Код: Выделить всё
<?php
//error_reporting(E_ERROR|E_WARNING);
$s = 'вместо этого текста сюда нужно скопировать часть таблицы БЕЗ ШАПКИ';
$s = preg_replace('#месяц 200[0-9]-[01][0-9]#is','',$s);
$s = preg_replace('#сутки 200[0-9]-[01][0-9]-[0-3][0-9]#is','',$s);
$s = str_replace('   ',' ',$s);
$s = str_replace("\n",' ',$s);
$s = str_replace("\r",' ',$s);
do {
  $s = str_replace('  ',' ',$s);
} while(strpos($s,'  ')!==false);
$s = trim($s);
$s = str_replace(' ','+',$s);
$s = str_replace('+.','+0.',$s);
if($s[0]=='.'){
  $s = '0'.$s;
}
eval('$t = '.$s.';');
echo $t." MiB, or\n";
echo ($t/1024)." GiB, or\n";
echo ($t/1048576)." TiB\n";
?>

Сохраняем под названием bla-bla-bla.php и запускаем в консоли (php путь/bla.php) или открываем в браузере через сервер с PHP. В итоге получаем кол-во трафика :)
Аватара пользователя
Вася Триллер
Матерый Сетевик
 
Сообщения: 83
Зарегистрирован: 23 сен 2006 12:42
Откуда: punktVideopr-ok-ATA.npnet

Реклама

Сообщение Shurik 02 дек 2006 14:45

Что мешает тянуть с сайта? ;)
http://aliki.npnet.ru Поисковик по Переделкино (!! адрес изменился)
Аватара пользователя
Shurik
Пулеметчик
 
Сообщения: 702
Зарегистрирован: 18 май 2005 22:06
Откуда: Нью-Переделкино
Провайдер\Сеть: QWERTY/Корвет/Корбина

Сообщение RелаXатоR 02 дек 2006 15:07

кстати, попытался все это дело еще летом в excel посчитать- не считает сцукО!!!

PS страница статистик INTS не работает=((
Некоторые люди скрывают свой ум гораздо тщательнее, чем свою глупость. (с)

Изображение
INTS_ICQ: 10507
ICQ: 257347817
Аватара пользователя
RелаXатоR
Пулеметчик
 
Сообщения: 1310
Зарегистрирован: 16 апр 2006 02:52
Откуда: Из Коньково
Провайдер\Сеть: OnLime

Сообщение Вася Триллер 02 дек 2006 15:37

Shurik писал(а):Что мешает тянуть с сайта? ;)

Великий дядя Лень =)
Аватара пользователя
Вася Триллер
Матерый Сетевик
 
Сообщения: 83
Зарегистрирован: 23 сен 2006 12:42
Откуда: punktVideopr-ok-ATA.npnet

Сообщение Ivan.Rybin 02 дек 2006 15:52

RелаXатоR писал(а):PS страница статистик INTS не работает=((


https://10.102.45.194/s/trafs.shtml - работает
We are all just the bricks in the Wall
Аватара пользователя
Ivan.Rybin
ArchitektoR
ArchitektoR
 
Сообщения: 9435
Зарегистрирован: 22 авг 2003 18:24
Откуда: RealMatrix World
Провайдер\Сеть: OnLime

Сообщение Вася Триллер 02 дек 2006 18:35

Для любителей реалтайм-данных выкладываю следующий скрипт. Выводит некоторые суммарные данные (типа трафика в обе стороны). Работает только со помесячной статистикой (посуточная просто игнорируется).
Если есть какие-то идей - не стесняйтесь выкладывать =)
Поменять нужно всего лишь 2-4 строчки для каждого конкретного юзера.
Код: Выделить всё
<?php
//error_reporting(E_ERROR|E_WARNING);
header('Content-type: text/html; charset=koi8-r');
/***********************/
$user = '****'; //логин
$pass = '**********'; //пароль
$ip = 'summary'; //IP, для которого берём статистику. Если нужно для всех - пишем summary
$host = '***.stat.pike'; //сервер статистики. указывается БЕЗ https:// и пути после слеша (да и слеш не нужен)
/***********************/
$req  = "GET /s/".($ip=='summary'?'trafs.shtml':'trafi.shtml?ip='.$ip)." HTTP/1.0\r\n";
$req .= "Host: $host\r\n";
$req .= "Accept: text/html, */*\r\n";
$req .= "User-Agent: Total traffic counter (by 10.107.53.79)/1.0\r\n";
$req .= "Authorization: Basic ".base64_encode($user.':'.$pass)."\r\n\r\n";


$fs = fsockopen('ssl://'.$host,443);
if(!$fs){
  die("error\n");
}
fwrite($fs,$req);
$res = "";
while (!feof($fs)){
  $res .= fgets($fs,2048);
}
fclose($fs);

$res = explode("\r\n\r\n",$res);
array_shift($res);
$res = implode("\r\n\r\n",$res);

$res = preg_replace('#<head>(.*?)</head>#is','',$res);
$res = preg_replace('#<h[12]>(.*?)</h[12]>#is','',$res);
$res = preg_replace('#<hr>(.*?)</body>#is','',$res);
$res = preg_replace('#<body (.*?)>#is','',$res);
$res = str_replace('<html>','',$res);
$res = str_replace('</html>','',$res);
$res = str_replace('<br>',' ',$res);
$res = preg_replace('#<!(.*?)>#is','',$res);
$res = preg_replace('#<code>(.*?)</code>#is','\\1',$res);
$res = preg_replace('#<td align=right>(.*?)</td>#ies','"<td>".trim("\\1")."</td>"',$res);
$res = preg_replace('#<([^>]*?)table([^<]*?)>#is','',$res);
$res = str_replace('<td align=left>','<td>',$res);
$res = preg_replace('#<th(.*?)>(.*?)</th>#is','',$res);
$res = preg_replace('#<tr>(.*?)</tr>#ies','trim("\\1")==""?"":"<tr>\\1</tr>"',$res);
$res = preg_replace('#<tr>      <td>сутки(.*?)</td>(.*?)</tr>#is','',$res);
$res = str_replace("\n",'',$res);
$res = str_replace("\r",'',$res);
$res = str_replace('</tr>',"</tr>\n",$res);
$res = preg_replace('#<tr>([^<]*?)<td>#is','<tr><td>',$res);
$res = preg_replace('#</td>([^<]*?)<td>#is','</td><td>',$res);
$res = preg_replace('#</td>([^<]*?)</tr>#is','</td></tr>',$res);


$res = explode("\n",$res);
$i=0;
foreach($res as $val){
  $val = trim(preg_replace('#<tr><td>месяц([^<]*?)#is','\\1',$val));
  $val = preg_replace('#</td><td>([^<]*?)</td></tr>#is','',$val);
  if(!empty($val)){
    $r[$i] = explode('</td><td>',$val);
    $i++;
  }
}

echo 'Все цифры приведены в Мб (MiB)';
echo '<table border="1">';
echo '<tr><th rowspan="2">Интервал, месяц</th><th colspan="3">Локальный трафик</th><th colspan="3">Российский трафик</th><th colspan="3">Зарубежный трафик</th><th rowspan="2">Всего</th></tr>';
echo '<tr><th>входящий</th> <th>исходящий</th> <th>всего</th> <th>входящий</th> <th>исходящий</th> <th>всего</th> <th>входящий</th> <th>исходящий</th> <th>всего</th></tr>';
foreach($r as $k=>$v){
  echo '<tr>';
  echo '<td>'.$r[$k][0].'</td>';
  echo '<td>'.$r[$k][1].'</td>';
  echo '<td>'.$r[$k][2].'</td>';
  echo '<td>'.($r[$k][1]+$r[$k][2]).'</td>';
  echo '<td>'.$r[$k][3].'</td>';
  echo '<td>'.$r[$k][4].'</td>';
  echo '<td>'.($r[$k][3]+$r[$k][4]).'</td>';
  echo '<td>'.$r[$k][5].'</td>';
  echo '<td>'.$r[$k][6].'</td>';
  echo '<td>'.($r[$k][5]+$r[$k][6]).'</td>';
  echo '<td>'.($r[$k][1]+$r[$k][2]+$r[$k][3]+$r[$k][4]+$r[$k][5]+$r[$k][6]).'</td>';
  echo '</tr>';
}
$t[1] = 0;
$t[2] = 0;
$t[3] = 0;
$t[4] = 0;
$t[5] = 0;
$t[6] = 0;
foreach($r as $k=>$v){
  $t[1] += $r[$k][1];
  $t[2] += $r[$k][2];
  $t[3] += $r[$k][3];
  $t[4] += $r[$k][4];
  $t[5] += $r[$k][5];
  $t[6] += $r[$k][6];
}
echo '<tr><td>Всего</td>';
echo '<td>'.$t[1].'</td>';
echo '<td>'.$t[2].'</td>';
echo '<td>'.($t[1]+$t[2]).'</td>';
echo '<td>'.$t[3].'</td>';
echo '<td>'.$t[4].'</td>';
echo '<td>'.($t[3]+$t[4]).'</td>';
echo '<td>'.$t[5].'</td>';
echo '<td>'.$t[6].'</td>';
echo '<td>'.($t[5]+$t[6]).'</td>';
echo '<td>'.($t[1]+$t[2]+$t[3]+$t[4]+$t[5]+$t[6]).'</td>';
echo '</tr>';
echo '</table>';
?>
Аватара пользователя
Вася Триллер
Матерый Сетевик
 
Сообщения: 83
Зарегистрирован: 23 сен 2006 12:42
Откуда: punktVideopr-ok-ATA.npnet

Сообщение Sokol 02 дек 2006 18:58

Warning: fsockopen() [function.fsockopen]: unable to connect to ssl://ostrov.stat.pike:443
Аватара пользователя
Sokol
Пулеметчик
 
Сообщения: 1488
Зарегистрирован: 05 фев 2006 13:02
Откуда: From the hell...

Сообщение Вася Триллер 02 дек 2006 19:07

МЕДВЕД писал(а):Warning: fsockopen() [function.fsockopen]: unable to connect to ssl://ostrov.stat.pike:443

Или адрес неправильный, или в настройках PHP косяк =)
Отключи safe_mode, если таковой включен, и попробуй вместо ostrov.stat.pike заюзать его IP
Аватара пользователя
Вася Триллер
Матерый Сетевик
 
Сообщения: 83
Зарегистрирован: 23 сен 2006 12:42
Откуда: punktVideopr-ok-ATA.npnet

Сообщение Вася Триллер 02 дек 2006 19:10

Да, и ещё - поскольку эти ресурсы доступны только из Корвета, не надо тестировать скрипт на хостинге в инете (jino-net.ru for example) - он там никогда не заработает =).
Аватара пользователя
Вася Триллер
Матерый Сетевик
 
Сообщения: 83
Зарегистрирован: 23 сен 2006 12:42
Откуда: punktVideopr-ok-ATA.npnet

Сообщение Ivan.Rybin 02 дек 2006 19:40

МЕДВЕД писал(а):ssl://ostrov.stat.pike:443


а чё это за протокол такой, SSL? :-) - https там должно быть
We are all just the bricks in the Wall
Аватара пользователя
Ivan.Rybin
ArchitektoR
ArchitektoR
 
Сообщения: 9435
Зарегистрирован: 22 авг 2003 18:24
Откуда: RealMatrix World
Провайдер\Сеть: OnLime

Сообщение Ivan.Rybin 02 дек 2006 19:41

Ну закиньте куда-нить на big-bossa - пущай будет форма с вводом данных на свой аккаунт и после логина бы выводила статистику
We are all just the bricks in the Wall
Аватара пользователя
Ivan.Rybin
ArchitektoR
ArchitektoR
 
Сообщения: 9435
Зарегистрирован: 22 авг 2003 18:24
Откуда: RealMatrix World
Провайдер\Сеть: OnLime

Сообщение Вася Триллер 02 дек 2006 19:54

ivan s. rybin писал(а):
МЕДВЕД писал(а):ssl://ostrov.stat.pike:443


а чё это за протокол такой, SSL? :-) - https там должно быть

Префикс ssl:// указывает, что нужно использовать шифрование, https:// напрямую заюзать нельзя. Курим маны: http://php.net/fsockopen

Ну закиньте куда-нить на big-bossa

Вопрос: куда конкертно? =) Заводить хостинг ради слегка улучшенной статистики как-то не хочется... =)
Аватара пользователя
Вася Триллер
Матерый Сетевик
 
Сообщения: 83
Зарегистрирован: 23 сен 2006 12:42
Откуда: punktVideopr-ok-ATA.npnet

Сообщение Shurik 02 дек 2006 20:53

Насколько я понимаю, статистика привязана к IP клиента, так что облом ;)
http://aliki.npnet.ru Поисковик по Переделкино (!! адрес изменился)
Аватара пользователя
Shurik
Пулеметчик
 
Сообщения: 702
Зарегистрирован: 18 май 2005 22:06
Откуда: Нью-Переделкино
Провайдер\Сеть: QWERTY/Корвет/Корбина

Сообщение Ivan.Rybin 02 дек 2006 20:57

ну тогда - да, хотя если скрипт будет брать IP у обращающегося к нему и передавать его серверу статистики как "свой" - то должно работать.
We are all just the bricks in the Wall
Аватара пользователя
Ivan.Rybin
ArchitektoR
ArchitektoR
 
Сообщения: 9435
Зарегистрирован: 22 авг 2003 18:24
Откуда: RealMatrix World
Провайдер\Сеть: OnLime

Сообщение Shurik 03 дек 2006 00:24

Ты меня не понял. Эта ссылка безо всякой авторизации подставляет твои данные: https://stat.npnet.pike/order.shtml
http://aliki.npnet.ru Поисковик по Переделкино (!! адрес изменился)
Аватара пользователя
Shurik
Пулеметчик
 
Сообщения: 702
Зарегистрирован: 18 май 2005 22:06
Откуда: Нью-Переделкино
Провайдер\Сеть: QWERTY/Корвет/Корбина

След.

Вернуться в Программирование

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


  • Реклама
cron