Насчет trafd и MySQL
Добавлено: 2006-11-03 13:36:20
Добрый день! Настроил связку trafd+MySQL по статье ув.Лиссяры http://www.lissyara.su/?id=1010 и вот появилась необходимость раздельно считать внутренний Украинский (UA-IX) и остальной трафик, т.е. в существующую MySQL таблицу добавить еще 2 ячейки - к примеру uaix и nonuaix (ну это после all_bytes). Нарыл пример скрипта на PHP для проверки принадлежности ip-адресса к точки обмена траффиком UA-IX, и хотелось бы доработать sh-скрипт приведенный Лиссярой, чтобы он проверял и регестировал в таблице сколько и какой пользователь накачал с точки UA-IX и с другиз мест... Но так как в shell я не силен, то прошу Вашей помощи! Вот сам скрипт на ПХП для проверки принадлежности адресса к UA-IX:
в parse_net после sscanf стоит добавить mask = mask ? mask : 24 потому что в некоторых списках иногда отсутствует маска подсети и могут быть проблемы.
Жду ответа!
Код: Выделить всё
#!/usr/bin/php -q
<?
// Для получения списка сетей :
// wget http://www.colocall.net/ua/?list -O ua-list.txt
function parse_net($ip)
{
sscanf ($ip, "%d.%d.%d.%d/%d", $one, $two, $three, $four, $mask);
$addr = $one*pow(2,24) + $two*pow(2,16) + $three*pow(2,8) + $four;
for ($i = 0; $i < round($mask); $i++) $bitmask += 1 << (31 - $i);
return array($addr, $addr+abs($bitmask));
}
function parse_ip($ip)
{
sscanf ($ip, "%d.%d.%d.%d", $one, $two, $three, $four);
return $one*pow(2,24) + $two*pow(2,16) + $three*pow(2,8) + $four;
}
function check_ip($ip)
{
$f=file('ua-list.txt');
$IP=parse_ip($ip);
foreach ($f as $net)
{
list($min,$max)=parse_net(trim($net));
if ($IP>=$min && $IP<$max) return true;
}
return false;
}
$ip=$_SERVER["argv"][1];
if (check_ip($ip)) echo "OK - host '$ip' in UA-IX\n";
else echo "FALSE - host '$ip' NOT in UA-IX\n";
?>
Жду ответа!