Если не жалко - поделитесь, пожалуйста.
Учёт трафика с помощью IpTables.
Модератор: /dev/random
-
Electron
- Сообщения: 201
- ОС: Можно Windows написать? :-)
Учёт трафика с помощью IpTables.
Вечер добрый. Создавал ли кто-нибудь скрипты для учёта трафика с помощью IpTables? Что-нибудь вроде: написал правило; скрипт считал количество байт для заданного правила; записал в файл.
Если не жалко - поделитесь, пожалуйста.
Если не жалко - поделитесь, пожалуйста.
Gentoo Linux 2006.0 from Stage3-Pentium4 on Intel Celeron 2.1 Ghz, 512M RAM, NV GeForce 5200FX
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: Учёт трафика с помощью IpTables.
ну у меня достаточно специфичная хреновина... это в /etc/rc.d/rc.firewall а это - скрипт trafstat, который по логам считает потребление.
специфика всего этого - то, что считается только два вида траффика на ppp0 - внутри сети провайдера и наружу. потому как они оплачиваются отдельно. но принцип тут понятен, так что можно обощить для любых правил.
Код: Выделить всё
clear(){
$IPT -F
$IPT -X
$IPT -P INPUT $1
$IPT -P FORWARD $1
$IPT -P OUTPUT $1
######## TRAFFIC COUNTERS!!! DON'T REMOVE ########
$IPT -A INPUT -i $PPP -s xxx.xxx.xxx.xxx/24
$IPT -A OUTPUT -o $PPP -d xxx.xxx.xxx.xxx/24
$IPT -A INPUT -i $PPP ! -s xxx.xxx.xxx.xxx/24
$IPT -A OUTPUT -o $PPP ! -d xxx.xxx.xxx.xxx/24
#################################################
}это скрипт, который по крону запускается для сбора статистики.#!/bin/sh
(
D=`date -Iseconds`
echo $D input `iptables -L -Z INPUT -vnx | awk '{if(NR==3)print "inner: "$2; if(NR==4)print "outer: "$2}'`
echo $D output `iptables -L -Z OUTPUT -vnx | awk '{if(NR==3)print "inner: "$2; if(NR==4)print "outer: "$2}'`
echo
) >> /var/log/ipt_traf_log
Код: Выделить всё
#!/bin/sh
FILE=/var/log/ipt_traf_log
FORMAT=full
function calc(){
awk '
BEGIN {
II=0;
IO=0;
OI=0;
OO=0;
mb=1024*1024;
green="\033[40m\033[1;32m";
red = "\033[40m\033[1;31m";
yell ="\033[40m\033[1;33m";
normal="\033[0m";
}
END {
if(FF == "full"){
printf("Period: %s%s%s\n", green, PERIOD, normal);
printf("\tInner traffic:\n");
printf("\t\tinbound : %8.3f Mb (%10d b)\n",II/mb,II);
printf("\t\toutbound: %8.3f Mb (%10d b)\n",IO/mb,IO);
printf("\tOuter traffic:\n");
printf("\t\tinbound : %8.3f Mb (%10d b)\n",OI/mb,OI);
printf("\t\toutbound: %8.3f Mb (%10d b)\n",OO/mb,OO);
}
if(FF == "compact"){
printf("Inner: ");
printf("%8.3f M ",II/mb);
printf("%8.3f M ||| ",IO/mb);
printf("Outer: ");
printf("%8.3f M ",OI/mb);
printf("%8.3f M\n",OO/mb);
}
}
/input/ {II+=strtonum($4); OI+=strtonum($6);}
/output/ {IO+=strtonum($4); OO+=strtonum($6);}
' PERIOD=$1 FF=$FORMAT
}
function hour(){
HOUR=`date -Ihour | grep -Po "^[^+:]+"`
cat "$FILE" | grep $HOUR | calc Hour
}
function day(){
cat "$FILE" | grep `date -I` | calc Day
}
function month(){
MONTH=`date -Ihour | grep -Po "^\d+-\d+"`
cat "$FILE" | grep $MONTH | calc Month
}
function overall(){
cat "$FILE" | calc Overall
}
while getopts hdmtac opt
do
case "$opt" in
h)FUNC=hour;;
d)FUNC=day;;
m)FUNC=month;;
t)FUNC=overall;;
a)FUNC='hour; day; month; overall';;
c)FORMAT=compact;;
esac
done
eval ${FUNC:-'day'}специфика всего этого - то, что считается только два вида траффика на ppp0 - внутри сети провайдера и наружу. потому как они оплачиваются отдельно. но принцип тут понятен, так что можно обощить для любых правил.
слава роботам!
-
Electron
- Сообщения: 201
- ОС: Можно Windows написать? :-)
Re: Учёт трафика с помощью IpTables.
Огромное спасибо! :P
Gentoo Linux 2006.0 from Stage3-Pentium4 on Intel Celeron 2.1 Ghz, 512M RAM, NV GeForce 5200FX
-
hello
- Сообщения: 3
Re: Учёт трафика с помощью IpTables.
Вопрос к тем кто знает:
Почему выдается следующая ошибка?
Как поправить скрипт чтобы заработал? в мануале то про -P говорится что поддерживается.
Код: Выделить всё
#!/bin/sh
FILE=/var/log/ipt_traf_log
FORMAT=full
function calc(){
awk '
BEGIN {
II=0;
IO=0;
OI=0;
OO=0;
mb=1024*1024;
green="\033[40m\033[1;32m";
red = "\033[40m\033[1;31m";
yell ="\033[40m\033[1;33m";
normal="\033[0m";
}
END {
if(FF == "full"){
printf("Period: %s%s%s\n", green, PERIOD, normal);
printf("\tInner traffic:\n");
printf("\t\tinbound : %8.3f Mb (%10d b)\n",II/mb,II);
printf("\t\toutbound: %8.3f Mb (%10d b)\n",IO/mb,IO);
printf("\tOuter traffic:\n");
printf("\t\tinbound : %8.3f Mb (%10d b)\n",OI/mb,OI);
printf("\t\toutbound: %8.3f Mb (%10d b)\n",OO/mb,OO);
}
if(FF == "compact"){
printf("Inner: ");
printf("%8.3f M ",II/mb);
printf("%8.3f M ||| ",IO/mb);
printf("Outer: ");
printf("%8.3f M ",OI/mb);
printf("%8.3f M\n",OO/mb);
}
}
/input/ {II+=strtonum($4); OI+=strtonum($6);}
/output/ {IO+=strtonum($4); OO+=strtonum($6);}
' PERIOD=$1 FF=$FORMAT
}
function hour(){
HOUR=`date -Ihour | grep -Po "^[^+:]+"`
cat "$FILE" | grep $HOUR | calc Hour
}
function day(){
cat "$FILE" | grep `date -I` | calc Day
}
function month(){
MONTH=`date -Ihour | grep -Po "^\d+-\d+"`
cat "$FILE" | grep $MONTH | calc Month
}
function overall(){
cat "$FILE" | calc Overall
}
while getopts hdmtac opt
do
case "$opt" in
h)FUNC=hour;;
d)FUNC=day;;
m)FUNC=month;;
t)FUNC=overall;;
a)FUNC='hour; day; month; overall';;
c)FORMAT=compact;;
esac
done
eval ${FUNC:-'day'}Почему выдается следующая ошибка?
Код: Выделить всё
./script -h
grep: Ключ -P не поддерживается
Использование: grep [OPTION]... PATTERN [FILE]...
Попробуйте `grep --help' для получения более подробного описания.Как поправить скрипт чтобы заработал? в мануале то про -P говорится что поддерживается.
-
Portnov
- Модератор
- Сообщения: 1786
- Статус: Матёрый линуксоид
- ОС: Debian testing/unstable
Re: Учёт трафика с помощью IpTables.
-P может и не поддерживаться. Юзайте в таком случае pcregrep (это отдельный пакет).
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
-
xorader
- Сообщения: 1030
- Статус: собирающий миры
- ОС: Debian