LINUX.ORG.RU
ФорумAdmin

arpwatch и коммутатор


0

0

Была проблема(пост ниже,ловля прыгающих ip),посоветывали arpwatch,поставил,ведет лог только тех компов,которые в одной сети,за коммутатор нет.А как быть?и ещё ,а как же тогда правило на соответствие ip и mac у squid проходит,если сам прокси сервер за нескольками коммутаторами стоит.?

ты хотел сказать не коммутатор, а маршрутизатор ? если да , то все правильно,\ arpwatch работает только в одном сегменте. либо ставь в каждый, либо ваяй что-то свое. был насколько помню проект darpwatch именно для таких случаев предназначенный, но имхо он тихо загнулся. а по поводу сквида - ты уверен, что в правиле для данного ip указан mac действительно той машины, а не ближайшего к сквидяре шлюза?

sasha999 ★★★★
()
Ответ на: комментарий от sasha999

конечно маршрутизатор стоит,а свид я не настраивал по привязке,просто вывод сделал,получается и он загнется,если я вдруг захочу привязку сделать.На машрутизаторе виртуальные сети подняты.Выход arp на нем,а вот как типа arpwatch сделать на нем?

Aleksis
() автор топика
Ответ на: комментарий от Aleksis

вместе с arpwatch-ем идет arpsnmp, который делает примерно то же, но в качестве источника данных берет файло, сгенеренное snmpwalk-ом. можешь глянуть на него. либо сам напиши для себя нечто подобное - типа взять раз в n минут arp-таблицу с маршрутизатора, обработать , об изменениях доложить. на перле легко ваяется.

sasha999 ★★★★
()
Ответ на: комментарий от Aleksis

у меня оно собралось с большим напильником, но работать нормально так и не захотело. правда, мне в ряде сегментов надо было , чтобы оно под AIX-ом жило ... ну да ладно, успехов.

sasha999 ★★★★
()
Ответ на: комментарий от sasha999

вроде собрал,а вот с какими параметрами его запускать,что-то не в какую.мащрутизаторы nortell passport,думаю как с них зарулить

Aleksis
() автор топика
Ответ на: комментарий от sasha999

конечно поддерживают,вот только не силен я в перле,если есть возможность на пример ткнуть прошу.

Aleksis
() автор топика
Ответ на: комментарий от Aleksis

вот мой скрипт для этого:
#!/usr/bin/perl
use DBI;
use Mail::Mailer;
use SNMP_Session "0.57";
use BER;
sub out_arp_entry ($$);


$basedir = '/home/sasha/research/arpmon' ;
$router = $ARGV[0] ;
$community = 'xxxxxxxxx' ;
$startoid = '1.3.6.1.2.1.4.22.1.2';
$updatetime = time();
$timenormal = localtime($updatetime);
$dbname = 'LanInfo';
$dbhost = 'g40' ;
$dbuser = 'sasha' ;
$mailtype = 'sendmail' ;
%mailheaders = (
'To' => 'sasha@g40.xxx.yyy.ru',
'From' => 'arpmon@sasha.xxx.yyy.ru',
'Subject' => 'ARP Monitor notification'
);
#
$mailprog = Mail::Mailer->new($mailtype);
#
$ignorekey = '10.1.1.1';
#
open( LOG , ">>$basedir/arpmon-db.log" ) or die $! ;

my $session;
die "Couldn't open SNMP session to $hostname"
unless ($session = SNMP_Session->open ($router, $community, 161));
$session->map_table ([[1,3,6,1,2,1,4,22,1,2]],
\&out_arp_entry);
$session->close ();

##print "ARP table taken.\n";
#
$dbh = DBI->connect("DBI:Pg:dbname=$dbname;host=$dbhost" , "$dbuser" , "");
if (!defined($dbh)) { print LOG "Ooooops!\n"; }
$dbhu = DBI->connect("DBI:Pg:dbname=$dbname;host=$dbhost" , "$dbuser" , "");
if (!defined($dbhu)) { print LOG "Ooooops!\n"; }

foreach $key ( sort keys %mac_current ) {
##print "$key\n";
if (defined ($ignorekey) and $key eq $ignorekey ) { next ; }

$SQL = "select mac from arpmon where ip = \'$key\'" ;
$sth = $dbh->prepare($SQL);
$sth->execute();
if ( $sth->rows == 1 ) {
($mac) = $sth->fetchrow_array;
# print "$key - DB MAC is $mac , real is $mac_current{$key}\n";

if ( $mac ne $mac_current{$key} ) {
$mailprog->open(\%mailheaders);
##print "C";
print LOG "$timenormal - $key - MAC changed from $mac to $mac_current{$key}.\n" ;
print $mailprog "$timenormal - $key - MAC changed from $mac to $mac_current{$key}.\n" ;
$mailprog->close;
$SQL = "update arpmon set mac = \'$mac_current{$key}\' , initial_timestamp =
\'$updatetime\' ,\
timestamp = \'$updatetime\' where ip = \'$key\'" ;
$sthu = $dbhu->prepare($SQL);
$sthu->execute;
}
else {
##print "U";
$SQL = "update arpmon set mac = \'$mac_current{$key}\' , timestamp = \'$updatetime\' where ip = \'$key\'" ;
$sthu = $dbhu->prepare($SQL);
$sthu->execute;

}
}
else {
$mailprog->open(\%mailheaders);
##print "A";
print LOG "$timenormal $key not found in DB - adding \n";
print $mailprog "$timenormal $key not found in DB - adding \n";
$mailprog->close;
$SQL = "insert into arpmon values (?,?,?,?)" ;
$sthu = $dbhu->prepare($SQL);
$sthu->execute($key, $mac_current{$key} , $updatetime , $updatetime);



}
}
undef $sth;
undef $sthu;

$dbh->disconnect;
$dbhu->disconnect;
exit(0);

sub out_arp_entry ($$) {
my ($index, $physAddress) = @_;
my ($ifIndex, $netAddress) = split(/\./, $index, 2);
$physAddress = hex_string ($physAddress);
$mac_current{$netAddress}=$physAddress;
}

sasha999 ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.