Сори за задержку - не было меня долго.
>Ну вот собрался я выделенку ставить. Оплата по трафику. И надо мне
видеть
>сколько я уже накачал и сколько осталось. Если не трудно давай скрипт.
В приват пришло еще несколько просьб на скриптец, так что решил на
подписку кинуть.
Вот скрипт если кому еще интересен. Простой как три копейки. Суть:
опрашивает ipcad и складывает траффик в отдеждьный файл удобный для
обработки всем чем угодно (этот кусок можно переписать под себя и сразу
в базу класть, например). Кстати, ipcad использует формат сисок, так что
данный скрипт легко адаптировать под сбор статитсики не только ipcada.
Для больших сетей вообще можно сделать финт ушами дабы не грузить машину
почем зря: ставим ipcad на раутерах так, чтобы каждый считал трафик
только своего сегмента. Далее регулярно собираем сумарную информацию на
главный хост. Ну в общем смысл понятен.
#!/usr/bin/perl
# Requests data from cisco routers (or software that simulates the
protocol) and stores result as preparsed logs
# Author: Pavel Tsibulin
# File version: 1.0
# Modified by: Igor Zavoichinsky at 13.VII.2003
# File version: 1.1
use Getopt::Std;
# Settings
$logpath = '/var/log/traffic'; # path to folder where the logs should
be stored
getopt( "rc" );
@all_routers_ips = split( /\,/, $opt_r );
if ( $opt_c eq "" ) {
$cisco_get_command = '/usr/bin/rsh $router_ip clear ip
accounting;/usr/bin/rsh $router_ip show ip accounting checkpoint';
} else {
$cisco_get_command = $opt_c;
}
if ( $opt_r eq "" ) {
print "UTM ver 2.0 \n";
print "(c) NetUP Systems \n";
print " \n usage: get_from_cisco -r ip_cisco \n\n";
exit (1);
};
$current_time = time();
foreach $router_ip ( @all_routers_ips ) {
#print " o Gazering data from router: $router_ip \n";
unless( open( ROUTER, eval( "\"$cisco_get_command |\"" ) ) ) {
print STDERR "Can't get data from $router_ip: $!\n";
next;
}
@router_data = <ROUTER>;
# GET traffic data age
foreach(@router_data) {
if( /^*(Accounting data age is)\s+(\d+)*$/ ) { $ftime =
$current_time - $2; }
}
# PARSE fetched data and write it to file
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
localtime();
$year += 1900;
$mon = sprintf('%02i', $mon + 1);
$mday = sprintf('%02i', $mday);
$hour = sprintf('%02i', $hour);
$min = sprintf('%02i', $min);
open (LOG, ">$logpath/$year$mon$mday\_$hour$min.log");
foreach( @router_data ) {
if
(/^\s*(\d+\.\d+\.\d+\.\d+)\s+(\d+\.\d+\.\d+\.\d+)\s+(\d+)\s+(\d+)\s*$/)
{
$ip_from = $1;
$ip_to = $2;
$packets = $3;
$bytes_all = $4;
print LOG "$ip_from $ip_to $bytes_all $bytes_all
$ftime $current_time\n";
} elsif (/^Accounting threshold exceeded/) {
print STDERR;
}
}
close LOG;
close ROUTER;
}
-*Название листа Linux: разрешение вопросов, перспективы и общение
Архив Листа - http://subscribe.ru/archive/comp.soft.linux.discuss
Адрес правил листа comp.soft.linux.discuss-rules@subscribe.ru
Номер письма: 3689
Адрес сайта рассылки: http://www.linuxrsp.ru
Количество участников: 996
-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Отписаться: mailto:comp.soft.linux.discuss--unsub@subscribe.ru
http://subscribe.ru/ mailto:ask@subscribe.ru