Linux за българи: Форуми

Linux секция за напреднали => Хардуерни и софтуерни проблеми => Темата е започната от: GattaNegra в Sep 04, 2008, 18:11



Титла: Следене на мрежа? С какво?
Публикувано от: GattaNegra в 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.


Титла: Следене на мрежа? С какво?
Публикувано от: Gaara в Sep 04, 2008, 19:12
http://www.cacti.net/
http://martybugs.net/linux/rrdtool/traffic.cgi

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


Титла: Следене на мрежа? С какво?
Публикувано от: GattaNegra в Sep 04, 2008, 21:01
Цитат (Gaara @ Сеп. 04 2008,19:12)
Или да си напишеш собствен скрипт използвайки RRD (препоръчвал пърл, ако се спреш на този вариант).

10x. ще погледна тези.
нема ме много в пърла ... мерси :)


Титла: Следене на мрежа? С какво?
Публикувано от: luda_glawa в Sep 04, 2008, 22:15
Виж дали и WireShark не може да ти свърши работа.

http://www.wireshark.org/

Има го в дебиан ;)


Титла: Следене на мрежа? С какво?
Публикувано от: VladSun в 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.  


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

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





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

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

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





Титла: Следене на мрежа? С какво?
Публикувано от: zeridon в Sep 05, 2008, 11:28
Ей хора малко се отплеснахте ...

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

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


Титла: Следене на мрежа? С какво?
Публикувано от: VladSun в Sep 05, 2008, 11:38
Еми, бая скриптове съм понаписал за мониторинг на мрежа - имах го - дадох го :)

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

Най-добре отговаря на user requirements на Гатето :)





Титла: Следене на мрежа? С какво?
Публикувано от: sdr в Sep 05, 2008, 13:01
@VladSun: Не казвам че твоето решение е лошо или че моето е по-добо - казвам че твойто е може би overkill за простата задача "искам да им покажа на тия от ISP то некаф лог да видят че се чупя" и товя лог е малко по-трудно да обесниш как го правиш - колкото и технически по-добър да е - нали знаеш K.I.S.S.


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

//off

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

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

Кратко и ясно ;)


Титла: Следене на мрежа? С какво?
Публикувано от: alex_c в 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 в Sep 08, 2008, 12:46
малиии..... !!!
Момчета и момичета, много ви благодаря!
Ейй, сядам, отварям и какво.. че вие не ами сте и ми го написали!!
Ау, много много благодаря!


Титла: Следене на мрежа? С какво?
Публикувано от: bulg в Sep 08, 2008, 13:27
Къде па ги виде теа момета, освен тебе, де?  :zzz:


Титла: Следене на мрежа? С какво?
Публикувано от: VladSun в 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.  


Титла: Следене на мрежа? С какво?
Публикувано от: GattaNegra в Sep 09, 2008, 14:40
:D


Титла: Следене на мрежа? С какво?
Публикувано от: VladSun в Sep 09, 2008, 23:19
Малко глупости съм изписал, де :)
Това, последното, би проверявало дали МАК адреса на пингваното ИП е дублиран :) :) :)

По-скоро би трябвало да се арпингва и собственото ИП и ако се получи отговор, тогава да вдига аларма за дублиран МАК.