Автор Тема: Следене на мрежа? С какво?  (Прочетена 4088 пъти)

GattaNegra

  • Напреднали
  • *****
  • Публикации: 648
  • Distribution: SoluxOS
  • Window Manager: Gnome
    • Профил
    • WWW
Следене на мрежа? С какво?
« -: Sep 04, 2008, 18:11 »
Здравейте. Имам едно питанийце, значи, ето го, с малко предистория.

Интернет доставчикът ми (въздушни кабели) ме посъветва да сключа договор с фирмата, с която той се обединява, и да ми пуснат оптика за почти същите пари.
Речено-Сторено.
Само че сега оптиката и до съседния блок, а за мен новия кабел идва подземно, и пак си е старата боза.

В къщи схемата е следната:
ISP -> DEBIAN router/firewall (apache2, mysql,iptables) -> Wireless Router (ползвам го като суич и за лаптопа) -> Windows XP (главната машина на родителското тяло)

Къде е проблемът :
Със стария кабел нета е бавен, както винаги, като вали го няма, но инак е стабилен като скала.
С новия кабел просто "изчезва" за по пет минути през час-два, което е ултра дразнещо.
Искам да го докажа на ISP, защото те твърдят, че всичко е на ред, а то не е.
С обикновено MRTG  не могат да се следят лесно нещата по минути, а ако го пусна да логва така  ще клекне машината.

Нещо като Big Brother ми трябва май, но по-опростено и за Debian?

Уточнения:
IPTABLES firewall-a NAT-ва и вдига TTL.
Има ДВА реда, които засягат ETH0.
Mашините зад рутера са към ETH1.
Активен

Мразя Gnome 3!!!

Gaara

  • Напреднали
  • *****
  • Публикации: 631
  • Distribution: Debian
  • Window Manager: E17
    • Профил
Следене на мрежа? С какво?
« Отговор #1 -: Sep 04, 2008, 19:12 »
http://www.cacti.net/
http://martybugs.net/linux/rrdtool/traffic.cgi

Или да си напишеш собствен скрипт използвайки RRD (препоръчвал пърл, ако се спреш на този вариант).
Активен

Last night, Darth Vader came down from planet Vulcan and told me that if you don't install Debian, he'd melt your brain.

GattaNegra

  • Напреднали
  • *****
  • Публикации: 648
  • Distribution: SoluxOS
  • Window Manager: Gnome
    • Профил
    • WWW
Следене на мрежа? С какво?
« Отговор #2 -: Sep 04, 2008, 21:01 »
Цитат (Gaara @ Сеп. 04 2008,19:12)
Или да си напишеш собствен скрипт използвайки RRD (препоръчвал пърл, ако се спреш на този вариант).

10x. ще погледна тези.
нема ме много в пърла ... мерси '<img'>
Активен

Мразя Gnome 3!!!

luda_glawa

  • Напреднали
  • *****
  • Публикации: 650
  • Distribution: Kubuntu
  • Window Manager: KDE
    • Профил
    • WWW
Следене на мрежа? С какво?
« Отговор #3 -: Sep 04, 2008, 22:15 »
Виж дали и WireShark не може да ти свърши работа.

http://www.wireshark.org/

Има го в дебиан '<img'>
Активен

С Уважение:

Luda Glawa ;-)

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Следене на мрежа? С какво?
« Отговор #4 -: Sep 04, 2008, 22:18 »
pingwatch.pl
Код
GeSHi (Perl):
  1. #! /usr/bin/perl
  2. use POSIX;
  3.  
  4. $destIP = "192.168.2.254";
  5.  
  6. $onlineDelay = 60; # in seconds
  7. $offlineDelay = 20; # in seconds
  8.  
  9. $pingCmd = "/bin/ping";
  10.  
  11. $state = -1;
  12.  
  13. $SIG{INT} = $SIG{TERM} = 'dieHandler';
  14.  
  15. sub dieHandler
  16. {
  17.    logger("Monitoring stopped [".$destIP."]");
  18.    exit;
  19. }
  20.  
  21. sub logger
  22. {
  23.    my ($msg) = @_;
  24.  
  25.    $now = strftime("%Y.%m.%d %R", localtime(time));
  26.    print STDOUT "\n".$now."\t".$msg;
  27. }
  28.  
  29. sub demonize
  30. {
  31.    defined (my $tpid = fork) or die "Could not demonize";
  32.    if ($tpid)
  33.    {
  34.        exit;
  35.    }
  36.    else
  37.    {
  38.        POSIX::setsid() or die "Could not demonize";
  39.        open STDOUT, '>>/var/log/pingwatch.log' or die "Could not demonize";
  40.        open STDIN, '>>/var/log/pingwatch.log' or die "Could not demonize";
  41.    }  
  42. }
  43.  
  44. print "\n[+] Going in background\n\n";
  45. &demonize();
  46.  
  47. logger("Monitoring started [".$destIP."]");
  48.  
  49. while (1)
  50. {
  51.   $pingResult = `$pingCmd $destIP -q -c4 -f`;
  52.   $offline = ($pingResult =~ m/(100%)/);
  53.  
  54.   if (!$offline && $state != 1)
  55.   {
  56.       logger("Connection up!");
  57.       $state = 1;
  58.   }
  59.   elsif ($offline && $state != 0)
  60.   {
  61.       logger("Connection down!");
  62.       $state = 0;
  63.   }
  64.   sleep($offline ? $offlineDelay : $onlineDelay );
  65. }
  66.  
« Последна редакция: Jul 14, 2009, 19:25 от VladSun »
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

sdr

  • Напреднали
  • *****
  • Публикации: 655
    • Профил
Следене на мрежа? С какво?
« Отговор #5 -: Sep 05, 2008, 11:10 »
Бах перл ... един тъп шел скрипт който дописва (>>) некаф файл и се стартира от кронтаб-а с */1 и получаваш статистика с гранулярност минута.

п.с. Бих ползвал апринг -б вместо нормалния пинг - ако има игра с крадене на ип-та/апр поизънинг ще си проличи



Активен

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Следене на мрежа? С какво?
« Отговор #6 -: Sep 05, 2008, 11:20 »
Цитат (sdr @ Сеп. 05 2008,11:10)
Бах перл ... един тъп шел скрипт който дописва (>>) некаф файл и се стартира от кронтаб-а с */1 и получаваш статистика с гранулярност минута.

Еми, ако беше разгледал малко скрипта сам щеше да видиш разликите:
- правиш за 24 часа лог-файл с 24*60 реда - ходи разбери какво е ставало;
- трябва да имаш стартиран crond/atd и т.н. (особено при условие, че можеш сам да си пуснеш процеса в background);
- в следствие от предишното - старт/стопа на процесът е доста по-"ненормален";
- резолюцията с cron-a е фиксирана (т.е. не зависи от текущото състояние на връзката) и >= 1 минута;

Е ... ако оправиш всичко това в bash script-a ти едва ли ще стане по-малко "бах" от моя Перл '<img'>



Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

zeridon

  • Killmode enabled
  • Administrator
  • Напреднали
  • *****
  • Публикации: 1398
  • Distribution: Debian/Ubuntu
  • Window Manager: console/Gnome
  • BOfH
    • Профил
    • WWW
Следене на мрежа? С какво?
« Отговор #7 -: Sep 05, 2008, 11:28 »
Ей хора малко се отплеснахте ...

Най кроткото решение (което съм виждал до момента) е darkstat ... грануларност 1 мин, почти никакви зависимости. Кактито страда от ограниченията на ррд (не че са много ама ...)

Друг вариант е ntop
Активен

Внмимавай имам клещи за кабел
http://www.netsecad.com/
http://theregister.co.uk/odds/bofh/

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Следене на мрежа? С какво?
« Отговор #8 -: Sep 05, 2008, 11:38 »
Еми, бая скриптове съм понаписал за мониторинг на мрежа - имах го - дадох го '<img'>

Иначе, най-уместно в случая ми се вижда използването на SmokePing - http://oss.oetiker.ch/smokeping/

Най-добре отговаря на user requirements на Гатето '<img'>



Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

sdr

  • Напреднали
  • *****
  • Публикации: 655
    • Профил
Следене на мрежа? С какво?
« Отговор #9 -: Sep 05, 2008, 13:01 »
@VladSun: Не казвам че твоето решение е лошо или че моето е по-добо - казвам че твойто е може би overkill за простата задача "искам да им покажа на тия от ISP то некаф лог да видят че се чупя" и товя лог е малко по-трудно да обесниш как го правиш - колкото и технически по-добър да е - нали знаеш K.I.S.S.
Активен

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Следене на мрежа? С какво?
« Отговор #10 -: Sep 05, 2008, 13:38 »
Цитат (sdr @ Сеп. 05 2008,13:01)
@VladSun: Не казвам че твоето решение е лошо или че моето е по-добо - казвам че твойто е може би overkill за простата задача "искам да им покажа на тия от ISP то некаф лог да видят че се чупя" и товя лог е малко по-трудно да обесниш как го правиш - колкото и технически по-добър да е - нали знаеш K.I.S.S.

//off

Аз не мисля, че е overkill - вади точно резултата, който иска Гатето и нищо повече, спазен е KISS принципът в самия скрипт, а той самият е написан по възможно (за мен) най-културния начин.
Освен това се използва самостоятелно, без никакви зависимости (ако Perl инсталацията не се счита за зависимост '<img'> ).

Форматът на лога е ясен -
време, промяна на състоянието на връзката.

Кратко и ясно '<img'>
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

alex_c

  • Напреднали
  • *****
  • Публикации: 122
    • Профил
Следене на мрежа? С какво?
« Отговор #11 -: Sep 05, 2008, 23:08 »
Ето и моите (не знам там колко бяха) цента  ':p'

ping-peers скрипт, който се стртира през cron

----------------------------------------------------------------

#!/bin/bash

#ping-peers script

P=`ping -c60 -W60 $1|egrep rtt\|%`

TST=`echo $P|grep "errors"`
if [ -z "$TST" ]
then
        LOSS=`echo $P|cut -d"%" -f1|cut -d" " -f6`
        AVG=`echo $P|cut -d" " -f14|cut -d"/" -f2|cut -d"." -f1`
else
        LOSS=`echo $P|cut -d"%" -f1|cut -d" " -f8`
        if [ "$LOSS" -eq 100 ]
        then
                AVG=' '
        else
                AVG=`echo $P|cut -d" " -f16|cut -d"/" -f2|cut -d"." -f1`
        fi
fi

echo "$AVG|$LOSS|`date +'%D %H:%M:%S'`" >> $2

----------------------------------------------------------------


а ето и реда в /etc/cron.d/ping-peers

0-59/1 * * * * root /usr/local/sbin/ping-peer IP_адреса_който_се_пингва /var/log/ping-лог_файла_за_този_адрес.log

А ето и вида на лог-файла:


1|0|08/17/08 13:14:59
1|0|08/17/08 13:16:00
1|1|08/17/08 13:17:00
1|0|08/17/08 13:18:00
2|0|08/17/08 13:18:59
1|0|08/17/08 13:20:00
1|0|08/17/08 13:20:59
1|0|08/17/08 13:21:59
1|0|08/17/08 13:23:00
1|45|08/17/08 13:24:00
 |100|08/17/08 13:25:59
 |100|08/17/08 13:26:59
 |100|08/17/08 13:28:00
506|96|08/17/08 13:28:02
113|55|08/17/08 13:29:03
2|0|08/17/08 13:29:59
2|0|08/17/08 13:30:59
1|0|08/17/08 13:32:00
1|0|08/17/08 13:32:59
4|0|08/17/08 13:34:01

Верно е, че е по-малко информативен от варианта на VladSun, но пък за сметка на това скриптът е по-прост.

P.S. Скриптът е писан за рутер с Debian - за други дистрибуции форматът, връщан от командата PING, може да е по-различен, така че имайте едно наум.
Активен

GattaNegra

  • Напреднали
  • *****
  • Публикации: 648
  • Distribution: SoluxOS
  • Window Manager: Gnome
    • Профил
    • WWW
Следене на мрежа? С какво?
« Отговор #12 -: Sep 08, 2008, 12:46 »
малиии..... !!!
Момчета и момичета, много ви благодаря!
Ейй, сядам, отварям и какво.. че вие не ами сте и ми го написали!!
Ау, много много благодаря!
Активен

Мразя Gnome 3!!!

bulg

  • Напреднали
  • *****
  • Публикации: 916
  • Distribution: *bsd/linux
  • Животът е тръпка... иначе живот ли е това...
    • Профил
    • WWW
Следене на мрежа? С какво?
« Отговор #13 -: Sep 08, 2008, 13:27 »
Къде па ги виде теа момета, освен тебе, де?  ':zzz:'
Активен

http://www.youtube.com/watch?v=9rX8Fn-YJpI
---------------------------------------------------------------------
http://cleargreen.com

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Следене на мрежа? С какво?
« Отговор #14 -: Sep 09, 2008, 14:29 »
Тъй като и аз споделям мнението на <b>sdr</b> за използването на arping:
Код
GeSHi (Perl):
  1. #!/usr/bin/perl
  2. use POSIX;
  3.  
  4. $destIP = "192.168.2.1";
  5.  
  6. $onlineDelay = 20; # in seconds
  7. $offlineDelay = 20; # in seconds
  8.  
  9. $pingCmd = "/usr/sbin/arping";
  10.  
  11. $state = -1;
  12.  
  13. $SIG{INT} = $SIG{TERM} = 'dieHandler';
  14.  
  15. sub dieHandler
  16. {
  17.   logger("Monitoring stopped [".$destIP."]");
  18.   exit;
  19. }
  20.  
  21. sub logger
  22. {
  23.   my ($msg) = @_;
  24.  
  25.   $now = strftime("%Y.%m.%d %R", localtime(time));
  26.   print STDOUT "\n".$now."\t".$msg;
  27. }
  28.  
  29. sub demonize
  30. {
  31.   defined (my $tpid = fork) or die "Could not demonize";
  32.   if ($tpid)
  33.   {
  34.       exit;
  35.   }
  36.   else
  37.   {
  38.       POSIX::setsid() or die "Could not demonize";
  39.       open STDOUT, '>>/var/log/pingwatch.log' or die "Could not demonize";
  40.       open STDIN, '>>/var/log/pingwatch.log' or die "Could not demonize";
  41.   }
  42. }
  43.  
  44. print "\n[+] Going in background\n\n";
  45. &demonize();
  46.  
  47. logger("Monitoring started [".$destIP."]");
  48.  
  49. while (1)
  50. {
  51.   $pingResult = `$pingCmd $destIP -c4 -w1000`;
  52.   $offline = ($pingResult =~ m/(100%)/);
  53.  
  54.   if ($pingResult =~ m/(-\d+%)/)
  55.   {
  56.       logger("Duplicated MAC address!");
  57.   }
  58.  
  59.   if (!$offline && $state != 1)
  60.   {
  61.       logger("Connection up!");
  62.       $state = 1;
  63.   }
  64.   elsif ($offline && $state != 0)
  65.   {
  66.       logger("Connection down!");
  67.       $state = 0;
  68.   }
  69.   sleep($offline ? $offlineDelay : $onlineDelay );
  70. }
  71.  
« Последна редакция: Jan 05, 2009, 16:20 от VladSun »
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P