Home FreeBSD FreeBSD Траффик WEB-интерфейс для просмотра статистики интернета

WEB-интерфейс для просмотра статистики интернета

WEB-интерфейс для просмотра статистики интернета

Автор: lissyara.
Оригинал: http://www.lissyara.su/articles/freebsd/traffic_count/web_interface_for_trafd/

В предыдущей статье trafd & MySQL было рассмотрено, как запихнуть траффик собранный trafd в базу данных MySQL. Также был предложен "способ" подсчёта - запросами из консоли :) Нижеприведённый скрипт - это всего лишь "человеческое лицо" к тому самому запросу. И всё :)
<?php
// IP хостов, интерфейсы,
$ip_out_servera = "222.222.222.222"; // внешний IP сервака
$ip_internal_servera = "192.168.0.254"; // внутренний IP сервака
$IF_out_servera = "fxp0"; // название внешнего интерфейса сервака
$IF_internal_servera = "sis0"; // название внутреннего интерфейса сервака
$lan_mask = "192.168."; // маска по которой выбираются IP для подсчёта
//Пароли для подключения к MySQL
$db_host = "localhost";
$db_user = "trafd";
$db_passwd = "trafd";
$db_db = "trafd";
//Пытаемся приконнектится к БД
if(!mysql_connect($db_host,$db_user,$db_passwd))
{
echo "<br><br><BIG><CENTER>
Не могу прислюнявиться к MySQL-серванту!</CENTER></BIG>";
exit;
}
//Выбираем базу данных
mysql_select_db($db_db);
// определяем текущий месяц, и прошлый месяц - для вывода статистики
$curr_month = date(Y,time()) . "-" . date(m,time());
$old_month = date(Y,time()) . "-" . date('m',strtotime("-1 month"));
// строим HTML страничку:
?>
<HEAD>
<title>Страница статистики</title>
<meta http-equiv="Content-Type"
content="text/html; charset=windows-1251">
<STYLE type="text/css">
#main_table .hilightoff {BACKGROUND: white}
#main_table .hilighton {BACKGROUND: #ccbbff}
#cheresstrochnaya_table .hilightoff {BACKGROUND: #88ff88}
#cheresstrochnaya_table .hilighton {BACKGROUND: #ccbbff}
</STYLE>
<BODY>
<BIG><CENTER>СТАТИСТИКА ИНТЕРНЕТА</CENTER></BIG><br><br>
<TABLE border="0" cellspacing="0" cellpadding="0" width="100%">
<TBODY>
<TR>
<TD width="50%" align="center" valign="top">
<TABLE border="1" cellspacing="0" cellpadding="0"
width="80%" id="main_table">
<TBODY>
<TR>
<TD height="20" align="center" colspan="3">
<BIG><CENTER>статистика за текущий месяц
<?php echo $curr_month; ?></CENTER></BIG></TD>
</TR>
<TR>
<TD height="20" width="15%" align="center">
<b>IP - адрес</b></TD>
<TD height="20" width="55%" align="center">
<b>пользователь</b></TD>
<TD height="20" width="30%" align="center">
<b>сколько скачано мегабайт</b></TD>
</TR>
<?php
// вытаскиваем статистику по пользователям из БД
$sql = mysql_query("SELECT to_IP, SUM(bytes) AS `bytes` FROM
`" . $IF_internal_servera . "_" . date(Y,time()) . "` WHERE `date`
LIKE '" . $curr_month . "-%' AND from_IP != '" . $ip_out_servera . "'
AND to_IP != '" . $ip_out_servera . "' AND
`to_IP` != '" . $ip_internal_servera . "'
AND `from_IP` != '" . $ip_internal_servera . "' AND `to_IP`
LIKE '" . $lan_mask . "%' GROUP BY `to_IP` ORDER BY `bytes` DESC");
// Строим табличку по тем кого достали
// вытаскиваем рейтинг страниц из БД
while ($d = mysql_fetch_assoc($sql)) {
// собственно тут вывод результатов.
$bytes = $d['bytes'] /1048576;
$bytes = round($bytes, 2);
if($d['to_IP'] == '192.168.0.21'){$user_name = 'Петров Ф. А.';}
if($d['to_IP'] == '192.168.0.17'){$user_name = 'Сидоров Н. А.';}
if($d['to_IP'] == '192.168.0.13'){$user_name = 'Иванов А.Л.';}
?>
<tr class=hilightoff onmouseover="className='hilighton';"
onmouseout="className='hilightoff';">
<td style="border-bottom: 1px solid #707680;"
width="" align="left"><?php echo $d['to_IP']; ?></td>
<td style="border-bottom: 1px solid #707680;"
width="" align="left"><?php echo $user_name; ?></td>
<td style="border-bottom: 1px solid #707680;"
width="" align="center"><?php echo $bytes; ?></td>
</tr>
<?php
unset ($user_name);
}
?>
</TBODY>
</TABLE>
</TD>
<TD width="50%" align="center" valign="top">
<TABLE border="1" cellspacing="0" cellpadding="0"
width="80%" id="main_table">
<TBODY>
<TR>
<TD height="20" align="center" colspan="3">
<BIG><CENTER>статистика за прошлый месяц
<?php echo $old_month; ?></CENTER></BIG></TD>
</TR>
<TR>
<TD height="20" width="25%" align="center">
<b>IP - адрес</b></TD>
<TD height="20" width="55%" align="center">
<b>пользователь</b></TD>
<TD height="20" width="30%" align="center">
<b>сколько мегабайт</b></TD>
</TR>
<?php
// вытаскиваем статистику по пользователям из БД
$sql = mysql_query("SELECT to_IP, SUM(bytes) AS `bytes` FROM
`" . $IF_internal_servera . "_" . date(Y,time()) . "` WHERE `date`
LIKE '" . $old_month . "-%' AND from_IP != '" . $ip_out_servera . "' AND
to_IP != '" . $ip_out_servera . "' AND `to_IP` != '" . $ip_internal_servera . "'
AND `from_IP` != '" . $ip_internal_servera . "' AND `to_IP` LIKE
'" . $lan_mask . "%' GROUP BY `to_IP` ORDER BY `bytes` DESC");
// Строим табличку по тем кого достали
// вытаскиваем рейтинг страниц из БД
while ($d = mysql_fetch_assoc($sql)) {
// собственно тут вывод результатов.
$bytes = $d['bytes'] /1048576;
$bytes = round($bytes, 2);
if($d['to_IP'] == '192.168.0.21'){$user_name = 'Петров Ф. А.';}
if($d['to_IP'] == '192.168.0.17'){$user_name = 'Сидоров Н. А.';}
if($d['to_IP'] == '192.168.0.13'){$user_name = 'Иванов А.Л.';}
?>
<tr class=hilightoff onmouseover="className='hilighton';"
onmouseout="className='hilightoff';">
<td style="border-bottom: 1px solid #707680;"
width="" align="left"><?php echo $d['to_IP']; ?></td>
<td style="border-bottom: 1px solid #707680;"
width="" align="left"><?php echo $user_name; ?></td>
<td style="border-bottom: 1px solid #707680;"
width="" align="center"><?php echo $bytes; ?></td>
</tr>
<?php
unset ($user_name);
}
?>

</TBODY>
</TABLE>

</TD>
</TR>
</TBODY>
</TABLE>
<br><br>

<?php
// считаем траффик этого месяца
$traffic_curr_month = mysql_fetch_array(mysql_query("SELECT SUM(bytes) AS `bytes`
FROM `" . $IF_out_servera . "_" . date(Y,time()) . "`
WHERE `to_IP` ='" . $ip_out_servera . "' AND `date`
LIKE '" . $curr_month . "-%'"));
$traffic_curr_meg = $traffic_curr_month[bytes] / 1048576;
$traffic_curr_meg = round($traffic_curr_meg, 2);

// считаем траффик прошлого месяца
$traffic_old_month = mysql_fetch_array(mysql_query("SELECT SUM(bytes) AS `bytes`
FROM `" . $IF_out_servera . "_" . date(Y,time()) . "` WHERE
`to_IP` ='" . $ip_out_servera . "' AND `date`
LIKE '" . $old_month . "-%'"));
$traffic_old_meg = $traffic_old_month[bytes] / 1048576;
$traffic_old_meg = round($traffic_old_meg, 2);
?>
Всего было траффика за&nbsp; &nbsp; этот &nbsp; &nbsp;
месяц: &nbsp; <?php echo $traffic_curr_meg; ?> мегабайт<br>
Всего было траффика за прошлый месяц:
<?php echo $traffic_old_meg; ?> мегабайт<br>
</FORM>
</BODY>
</HTML>

<?php ?>



Сложного ничего нету. Если припрёт показывать статистику пользователям, то в простейшем варианте, это будет выглядеть так:
<?php
// IP хостов, интерфейсы,
$ip_out_servera = "222.222.222.222"; // внешний IP сервака
$ip_internal_servera = "192.168.0.254"; // внутренний IP сервака
$IF_out_servera = "fxp0"; // название внешнего интерфейса сервака
$IF_internal_servera = "sis0"; // название внутреннего интерфейса сервака
$lan_mask = "192.168."; // маска по которой выбираются IP для подсчёта
//Пароли для подключения к MySQL
$db_host = "localhost";
$db_user = "trafd";
$db_passwd = "trafd";
$db_db = "trafd";
// достаём IP того кто хочет посмотреть
$ip = $_SERVER['REMOTE_ADDR'];
//Пытаемся приконнектится к БД
if(!mysql_connect($db_host,$db_user,$db_passwd))
{
echo "<br><br><BIG><CENTER>
Не могу прислюнявиться к MySQL-серванту!</CENTER></BIG>";
exit;
}
//Выбираем базу данных
mysql_select_db($db_db);
// определяем текущий месяц, и прошлый месяц - для вывода статистики
$curr_month = date(Y,time()) . "-" . date(m,time());
// строим HTML страничку:
?>
<HEAD>
<title>Страница статистики</title>
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1251">
<STYLE type="text/css">
#main_table .hilightoff {BACKGROUND: white}
#main_table .hilighton {BACKGROUND: #ccbbff}
#cheresstrochnaya_table .hilightoff {BACKGROUND: #88ff88}
#cheresstrochnaya_table .hilighton {BACKGROUND: #ccbbff}
</STYLE>
<BODY>
<BIG><CENTER>СТАТИСТИКА ИНТЕРНЕТА</CENTER></BIG><br><br>
<TABLE border="1" cellspacing="0" cellpadding="0" width="100%" id="main_table">
<TBODY>
<TR>
<TD height="20" align="center" colspan="4">
<BIG><CENTER>статистика за текущий месяц
<?php echo $curr_month; ?></CENTER></BIG></TD>
</TR>
<TR>
<TD height="20" align="center" colspan="4">&nbsp;</TD>
</TR>
<TR>
<TD height="20" width="15%" align="center">
<b>IP - адрес</b></TD>
<TD height="20" width="25%" align="center">
<b>Пользователь</b></TD>
<TD height="20" width="30%" align="center">
<b>сколько скачано, мегабайт</b></TD>
<TD height="20" width="30%" align="center">
<b>сколько осталось мегабайт</b></TD>
</TR>
<TR>
<TD height="20" width="15%" align="center">&nbsp;</TD>
<TD height="20" width="25%" align="center">&nbsp;</TD>
<TD height="20" width="30%" align="center">&nbsp;</TD>
<TD height="20" width="30%" align="center">&nbsp;</TD>
</TR>
<?php
// вытаскиваем статистику по пользователям из БД
$sql = mysql_query("SELECT to_IP, SUM(bytes) AS `bytes` FROM `"
. $IF_internal_servera . "_2005` WHERE `date` LIKE '"
. $curr_month . "-%' AND to_IP != '" . $ip_out_servera .
"' AND `to_IP` != '" . $ip_internal_servera .
"' AND `to_IP` = '" . $ip . "' AND `from_IP` != '"
. $ip_internal_servera . "' GROUP BY `to_IP` ORDER BY
`bytes` DESC");
// Строим табличку по тем кого достали
// вытаскиваем рейтинг страниц из БД
while ($d = mysql_fetch_assoc($sql)) {
// собственно тут вывод результатов.
$bytes = $d['bytes'] /1048576;
$bytes = round($bytes, 2);
// определяем пользователя
if($d['to_IP'] == '192.168.0.21'){$user_name = 'Петров Ф. А.';}
if($d['to_IP'] == '192.168.0.17'){$user_name = 'Сидоров Н. А.';}
if($d['to_IP'] == '192.168.0.13'){$user_name = 'Иванов А.Л.';}
// считаем скока осталось траффику
$bytes_ostalos = 200 - $bytes;
?>
<tr class=hilightoff onmouseover="className='hilighton';"
onmouseout="className='hilightoff';">
<td style="border-bottom: 1px solid #707680;"
width="" align="left"><?php echo $d['to_IP']; ?></td>
<td style="border-bottom: 1px solid #707680;"
width="" align="left"><?php echo $user_name; ?></td>
<td style="border-bottom: 1px solid #707680;"
width="" align="center"><?php echo $bytes; ?></td>
<td style="border-bottom: 1px solid #707680;"
width="" align="center"><?php echo $bytes_ostalos; ?></td>
</tr>
<?php
unset ($user_name);
unset ($bytes);
unset ($bytes_ostalos);
}
?>
</TBODY>
</TABLE>
</BODY>
</HTML>
<?php ?>



То есть, просто определяется IP адрес компьютера с которого был сделан http запрос, и выводится статистика только для этого адреса. Если за одним компьютером работает больше одного пользователя - то надо придумывать что-то дополнительно :(

Обновлено 28.05.2010 12:33  
Интересная статья? Поделись ей с другими:

  • Вопросы по поводу написанных статей можно обсудить в нашем сообществе в Вконтакте / Questions about written articles can be discussed in our community in Vkontakte Вопросы по поводу написанных статей можно обсудить в нашем сообществе в  Вконтакте / Questions about written articles can be discussed in our community in Vkontakte
Яндекс.Метрика