MRTG
от ILuxWiki
Това е програма за изчертаване на графики, използва се предимно за изобразяване на трафика преминал през даден интерфейс, но е възможно да се следи и състоятнието на процесора, температура или други данни.
Съдържание |
Линукс
Конфигурация без използването на iptables
/etc/mrtg.cfg
# Global configuration WorkDir: /var/www/stats IconDir: ../ WriteExpires: Yes Title[eth0]: External Interface Target[eth0]: `/root/bin/mrtg_data.sh eth0` PageTop[eth0]: External Interface MaxBytes[eth0]: 10000000 #Options[eth0]: absolute growright Title[eth1]: Internal Interface Target[eth1]: `/root/bin/mrtg_data.sh eth1` PageTop[eth1]: Internal Interface MaxBytes[eth1]: 10000000 #Options[eth1]: absolute growright Title[^]: Traffic Analysis for
mrtg_data.sh
скрипт за извличане на данните от всеки интерфейс
#!/bin/sh
if [ "x$1" != "x" ]; then
LINE=`cat /proc/net/dev | grep -w $1`
echo $LINE | awk '{print $1" "$2}' | awk -F: '{print $2}' | awk '{print $1}'
echo $LINE | awk -F: '{print $2}' | awk '{print $9}'
echo `uptime`
echo `hostname -f`
else
exit 1;
fi
Конфигурация с използването на iptables
mkmrtgcnf
използва се за създаване на mrtg.cfg, погледнете вашия стандартен mrtg.cfg и направете необходимите промени
#!/usr/bin/perl -w
# mkmrtgcnf by Todor Dragnev
$fetchprog = "/g00net/bin/showacc";
$default = "\
##
## autogenerate from $0
##
". '
#
# this is default for interface
#
IconDir: /stats/mrtg
WorkDir: /var/www/htdocs/stats
Interval: 5
';
print $default;
@link = `/sbin/ip li`;
for ( @link ) {
push @devices, $1 if /^\d+:\s+(\w+)/;
}
for (@devices) {
chomp;
print "##\n";
print "## $_\n";
print "##\n";
printf("Target[%s]: `%s %s`\n", $_, $fetchprog, $_);
printf("Title[%s]: Traffic for %s\n", $_, $_);
printf("MaxBytes[%s]: %s\n", $_, 18000);
printf("AbsMax[%s]: %s\n", $_, 18000);
printf("Suppress[%s]: %s\n", $_, "m w y");
printf("PageTop[%s]: %s\n",$_,$_);
printf("Directory[%s]: %s\n", $_, $_);
print "\n";
}
showacc
скрипт за извличане на данните от iptables
#!/usr/bin/perl
# script by Todor Dragnev aka t0d0r
$devname = shift;
$in_devname = "I" . $devname;
$out_devname = "O" . $devname;
@in_traffic = split "\n", `/usr/sbin/iptables -L $in_devname -nvx`;
@out_traffic = split "\n", `/usr/sbin/iptables -L $out_devname -nvx`;
#print $in_traffic[2] ."\n" ;
#print $out_traffic[2] . "\n" ;
if ( $in_traffic[2] =~ /^\s{0,}(\d+)\s+(\d+)/ )
{
$in_bytes = $2;
} else { $in_bytes = 0 ;}
if ( $out_traffic[2] =~ /^\s{0,}(\d+)\s+(\d+)/ )
{
$out_bytes = $2;
} else { $out_bytes = 0; }
print "$in_bytes\n$out_bytes\n"
mkmrtgindex
за създаване на index.html
#!/usr/bin/perl -w
# mkmrtgindex by Todor Dragnev
@link = `/sbin/ip li`;
for ( @link ) {
push @devices, $1 if /^\d+:\s+(\w+)/;
}
print "<html>\n";
print "<body>\n";
print "<center>\n";
print "<table>\n";
for $dev ( sort @devices ) {
print "<tr><td>Interface $dev</td></tr>\n";
print "<tr><td><a href=\"$dev/$dev.html\"><img src=\"$dev/$dev-day.png\" border=0></a></td></tr>\n";
print "<tr><td> </td></tr>\n";
}
print "</table>\n";
print "</center>\n";
print "</body></html>\n";
upmrtgchain
създаване на правилата в iptables
#!/usr/bin/perl -w
# upmrtgchain by Todor Dragnev
@link = `/sbin/ip li`;
push @devices, "ppp0";
for ( @link ) {
push @devices, $1 if /^\d+:\s+(\w+)/;
}
for (@devices) {
`/sbin/iptables -N I$_`;
`/sbin/iptables -A I$_`;
`/sbin/iptables -N O$_`;
`/sbin/iptables -A O$_`;
`/sbin/iptables -A INPUT -i $_ -j I$_`;
`/sbin/iptables -A OUTPUT -o $_ -j O$_`;
}
FreeBSD
IPFW: get_acc.pl - изчитане на трафика по определено IP
#!/usr/bin/perl
# script by Todor Dragnev aka t0d0r
$ip = shift;
$in_reg = sprintf("ip from %s to", $ip);
$out_reg = sprintf("ip from any to %s out", $ip);
#00101 39265 3353279 count ip from 192.168.140.3 to any in via net1
#00101 51047 53545678 count ip from any to 192.168.140.3 out via net1
@rules = `/sbin/ipfw show 100-300`;
$in_bytes = 0;
$out_bytes = 0;
for (@rules) {
if ($_ =~ /$in_reg/) {
($rule, $none, $in_bytes, @none) = split /\s+/, $_;
}
if ($_ =~ /$out_reg/) {
($rule, $none, $out_bytes, @none) = split /\s+/, $_;
}
}
print "$in_bytes\n$out_bytes\n"
--Sysop 12:02, 9 дек 2005 (EET)

