Народ огромная просьба,подскажите реально работающий скрипт для сбора статистики с интерфейса eth0. И передача этой статистики для отрисовки графика в МРТГе без использования snmp. Перепробовал всё что удалось нати на этом форуме на эту тему. С утилитой cban когда указываю cban -i eth0 Отвечает мне илегал параметр. Пробовал запустить через конфиг (cban -i eth0 -m) в логе МРТГ оставляет тотже Илегал параметр :( Скажите есть хоть какой нють скрипт который реально будет рисовать графики :) А то сейчас МРТГ насколько я понимаю работает но загрузка 0 :)
#!/bin/sh
/sbin/ipfw show 50 | /usr/bin/awk {'print $3'}
/sbin/ipfw show 51 | /usr/bin/awk {'print $3'}
echo '/usr/bin/uptime'
echo '/bin/hostname'
echo $ext_ifaceTolko doljno bit count ip from any ........
>#!/bin/sh
>/sbin/ipfw show 50 | /usr/bin/awk {'print $3'}
>/sbin/ipfw show 51 | /usr/bin/awk {'print $3'}
>echo '/usr/bin/uptime'
>echo '/bin/hostname'
>echo $ext_iface
>
>Tolko doljno bit count ip from any ........
гражданин вы наверное не вкурсе что в линуксе нету такого фаервола как ipfw :)
>гражданин вы наверное не вкурсе что в линуксе нету такого фаервола как
>ipfw :)Но суть проблемы это неменяет И она остается проблемой :) Может тогда через iptables можно зделать ? Только вопрос как ?:( Если кто знает подскажите! Если есть способ и без iptables излогайте, буду пробовать всё :)
>>гражданин вы наверное не вкурсе что в линуксе нету такого фаервола как
>>ipfw :)
>
> Но суть проблемы это неменяет И она остается проблемой :) Может
>тогда через iptables можно зделать ? Только вопрос как ?:( Если
>кто знает подскажите! Если есть способ и без iptables излогайте, буду
>пробовать всё :)Хотел найти готовый скриптик и выложить, но быстро не получилось :)
поэтому просто кидаю идею и накинутую реализацию. Работало в FreeBSD, в линуксе тоже вроде возможно.идея проста - использование netstat
-bash-2.05b$ netstat -bI rl0
Name Mtu Network Address Ipkts Ierrs Ibytes Opkts Oerrs Obytes Coll
rl0 1500 <Link#1> 00:05:5d:30:fa:3d 2809921 0 1696493591 2424998 0 1936080392 0
rl0 1500 212.192.122.2 clamav 2682935 - 1641076205 2419102 - 1902279615 -
можно написать чтото вроде:
#!/bin/sh
netstat -bI $1 |grep Link | awk {'print $7'}
netstat -bI $1 |grep Link | awk {'print $10'}
echo '/usr/bin/uptime'
echo $1
есть маленькие замечания:1. были проблемы c ppp интерфейсами в плане того, что поле Address в выводе было незаполненным и awk 'сбивался'
2. можно считать отдельно по алиасу на интерфейсе
3. в чем разница между первой и второй строками в выводе netstat я особо не озадачивался, если честно :) Если ктото пояснит - буду рад.PS: если это не сработает, то можно сделать парсинг вывода ifconfig на ту же тему.
http://www.opennet.me/base/sys/mrtg_install.txt.htmlА вообще:
man cfgmaker
CFGMAKER(1) mrtg CFGMAKER(1)NAME
cfgmaker - Creates mrtg.cfg files (for mrtg-2.12.1)SYNOPSIS
cfgmaker [options] [community@]router [[options] [community@]router
...]В самом начале показано как и что делается. Тем более у вас, насколько я понял стоит SNMPD
а я использую такой скриптик. наверняка можно сделат проще, по-этому не пинать.#!/usr/bin/perl
$if=0;
$i=0;
open (IN, "</usr/local/mrtg-2/lib/mrtg2/eth.tr");
while (<IN>) {
(@rx_old[$i],@tx_old[$i]) = (/RX bytes:(\d+).*?TX bytes:(\d+)/);
$i++;
};
close (IN);
system ("/sbin/ifconfig |grep 'RX bytes' > /usr/local/mrtg-2/lib/mrtg2/eth.tr");
open (IN, "< /usr/local/mrtg-2/lib/mrtg2/eth.tr");
$i=0;
while (<IN>) {
(@rx[$i],@tx[$i]) = (/RX bytes:(\d+).*?TX bytes:(\d+)/);
#print "new:@rx[$i]\t@tx[$i]\n";
@rx[$i]=@rx[$i]-@rx_old[$i];
@tx[$i]=@tx[$i]-@tx_old[$i];
#print "@rx[$i]\n@tx[$i]\n";
$i++;
};
#print "@rx[@ARGV[0]]\n@tx[@ARGV[0]]\n";
@rx[$if]=@rx[$if]/300;
@tx[$if]=@tx[$if]/300;
print "@rx[$if]\n@tx[$if]\n0\nTraff eth0\n";
#print "@ARGV[0]\n";
#print "Traffic eth0\n"
close (IN);
Как вариант с использованием netstat -bin#!/usr/bin/perl
system "netstat -bin|grep xl0 >>./0";
system "tr ' ' '\n'< ./0 > ./1";
system "rm ./0";
open(TRAFFIC,"./1");
@log=<TRAFFIC>;
close TRAFFIC;
$lines=@log;
for($i=0;$i<$lines;++$i)
{
if(@log[$i] ne "\n")
{
if(@log[$i] ne "")
{
@end[$i]=@log[$i];
open(TEMP,">>./temp");
print TEMP @end[$i];
close TEMP;
}
}
}
system "rm ./1";
open(TEMP,"./temp");
@end=<TEMP>;
@dat[1]=@end[6];
close TEMP;
open(TEMP,"./temp");
@end=<TEMP>;
@dat[0]=@end[9];
close TEMP;
system "rm ./temp";
print @dat;
system "uptime >>/var/upt";
open(OPT,"/var/upt");
$upt=<OPT>;
close OPT;
print $upt;
print "Канал: FreeBSD Внешний интерфейс";
У вас так код перегружен вызовами system что думается какая разница, может лучше шелл использовать?
А если серьезно - проверьте свой код - слишком он ненадежный не в плане работоспособности, а безопасности. Если вы пользуете функцию system - то нужно постараться отказаться от двойных кавычек и стараться использовать прямые пути к софту иначе может иметь место подмена. особенно это чревато при вызрве функций вида rm.
Ну всё как всегда по сценарию:) Ктото заводит тему для разгавора в качестве вопроса, а уже после неё идёт обсуждение своих проблем и высказиваний :) Радует что конешно общение касается хотябы косвенно (есть и по теме) тему которая посвящена в више описаном вопросе. Хотелось бы всётаки узнать если комуто несложно то выложите пжалуста реально работающий скрипт под Линукс! Зарание благодарен :)
>
>Хотелось бы всётаки узнать если комуто несложно то выложите пжалуста реально работающий скрипт
>под Линукс! Зарание благодарен :)
#!/bin/bash
/bin/grep "$1" /proc/net/dev |/bin/awk -F ":" ' {print $2 }' |
/bin/awk '{print $1 "\n" $9}'
echo $1
Огромная благодарность всем тем кто помогал мне в этом, уже простом деле как настройка МРТГ. Особое спасибо Xeon за его маленький несмышлённый скрипт который приносить больше пользы чем сам весит вцелом :) Ещё раз огромное спасибо !!! Всё работает :)
> Огромная благодарность всем тем кто помогал мне в этом, уже простом
>деле как настройка МРТГ. Особое спасибо Xeon за его маленький несмышлённый
>скрипт который приносить больше пользы чем сам весит вцелом :) Ещё
>раз огромное спасибо !!! Всё работает :)
За несмышленый ответишь! :)