X-RaY™ Posted October 27, 2007 Posted October 27, 2007 Есть Сеть, частный сектор вся на мыльницах, контроля никакого, настройки по DHCP(ISC? FreeBSD6.1) динамически, интернет по PPtP. Сбор маков откладывали, откладывали... Теперь сеть приближается к 1000 абонентов. И появилось необходимость в контроле, для начала хотя бы на магистралях МАК+Ип, что бы пассажиры не грузили ФТП, ДЦ и сеть в общем. Для сбора Мак адресов придумал следующий ход, время от времени те IP адресса, которые DHCP выдал на маки динамически, просто закреплять за абонентами и так постепенно пока все не "закрепятся", потом по логам NAS(MPD) просто сопоставить ИП + лог и получить инфу кто есть кто. Примерно так. Как это лучше и быстрее(более автоматизированно реализовать) ? Есть идеи? Вставить ник Quote
mikevlz Posted October 28, 2007 Posted October 28, 2007 Скрипт, который будет читать лог mpd, находить там пользователя и адрес, с которого произошло поключение. Дальше открывает логи DHCP за все время лизинга адреса, ищет DHCPACK для этого IP, получает MAC. Если сеть все еще плоская(все юзеры в одном сегменте, нет маршрутизации), то просто периодически дергать ARP на серверах, на его основании править dhcpd.conf Вставить ник Quote
X-RaY™ Posted October 28, 2007 Author Posted October 28, 2007 Сеть уже не плоская ( Буду думать про скрипт... Вставить ник Quote
mikevlz Posted October 28, 2007 Posted October 28, 2007 тогда с роутера дергать fdb для L3-свича, ARP для софтового рутера Чем не вариант? Вставить ник Quote
X-RaY™ Posted October 28, 2007 Author Posted October 28, 2007 В ближайшее время как раз собираемся Л3 поставить на место ПС роутера, он же DHCP. fdb - это что? Арп затра начну собирать и просто перебивать в dhcp.conf , а когда соберу маков+IP 400-500 начну их же по NAS базе буду перебивать в биллинг. Какие прелести от Л3 свича можно заиметь кроме роутинга, ДХЦП и ВКЛ,ВЫКЛ по макам+ИП ? Вставить ник Quote
Ivantey Posted October 29, 2007 Posted October 29, 2007 поставь arpwatch на сервак он тебе за 2 суток все маки отловит Вставить ник Quote
mikevlz Posted October 29, 2007 Posted October 29, 2007 зависит от свича. FDB - Forwarding DataBase - база соответствий MAC-Port. Вставить ник Quote
Susanin Posted October 29, 2007 Posted October 29, 2007 Сбор информации о мас-ип-порт-устройство с L2,L3 по snmp - http://forums.cacti.net/viewtopic.php?t=93...asc&start=0 Вставить ник Quote
Ivantey Posted October 29, 2007 Posted October 29, 2007 Вы выше почитайте, у него вся сеть на мыльницах. Вставить ник Quote
Davion Posted October 30, 2007 Posted October 30, 2007 В подобной сети использовал следущую технологию ))) Стояла машинка на винде с службой crond которая исполняла каждые 10 минут сканирование nmap всей сети, а программа IPMON вела статистику записывала маки, отслеживала отсмену ip-mac. Интересует подробнее в аське обьясню. Вставить ник Quote
YuryD Posted October 30, 2007 Posted October 30, 2007 Берете ipguard , запускаете в режиме обучения, через день все маки будут Вставить ник Quote
_djbdb Posted October 31, 2007 Posted October 31, 2007 поставь arpwatch на сервак он тебе за 2 суток все маки отловитсогласен.. в свое время, когда стояла такая задача (да и сейчас в принЦипе тоже иногда пользуюсь) использовал арпвотч и перловый скрипт, распихивающий в БД #!/usr/bin/perl use DBI; use Mail::POP3Client; $dbh = DBI->connect('dbi:Pg:dbname=arp;host=127.0.0.1', 'user', 'passwd', {PrintError=>1, RaiseError=>1}); $pop = new Mail::POP3Client( USER => "arpwatch", PASSWORD => "arpwatch", HOST => "127.0.0.1" ) || die "error"; for( $kk = 1; $kk <= $pop->Count(); $kk++ ) { $body = $pop->Body($kk); $body =~ s/\s/ /g; if ($body =~ /ip address: (\d+\.\d+\.\d+\.\d+).+ethernet address: (\w+:\w+:\w+:\w+:\w+:\w+)/) { $sql = "SELECT user_id, user_mac FROM pron_users WHERE state<>0 AND user_ip='$1'"; $sth = $dbh->prepare($sql); if ($sth) { $sth->execute(); } ($user_id, $user_mac) = $sth->fetchrow_array(); if (defined($user_id)) { if (!defined($user_mac) || $user_mac eq '') { $sql = "UPDATE pron_users SET user_mac='$2' WHERE user_id=$user_id"; $sth = $dbh->prepare($sql); if ($sth) { $sth->execute(); } } else { $sql = "SELECT user_id FROM pron_users WHERE state<>0 AND user_mac='$2'"; $sth = $dbh->prepare($sql); if ($sth) { $sth->execute(); } ($user_id) = $sth->fetchrow_array(); if (!defined($userid)) { print "mac changed. ip: $1, mac: $2\n"; } } } } $pop->Delete($kk); } $pop->Close; смысл заключается в том, что арпвотч шлёт письма на указанный в его конфиге ящик, после чего скрипт проверяет данный ящик, парсит письма и выполняет определенные деиствия.. Вставить ник Quote
azazello Posted November 6, 2007 Posted November 6, 2007 можно проще arp -a > и в базу. типа такого. CREATE TABLE ip_mac ( id int(11) NOT NULL auto_increment, ip int(11) default '0', mac varchar(255) default '', PRIMARY KEY (id) ); #!/usr/bin/perl use DBI(); use Socket; use DBD::mysql; use Time::Local; use Getopt::Std; $database=arp $database_host=localhost $database_sock_path=/var/lib/mysql.sock $database_login=arp $database_password=arp $arp_command = "arp -a"; if($^O =~ m/(linux|freebsd)/){ $arp_command = "arp -na"; }; $DBI_data="DBI:mysql:database=$database;host=$database_host;mysql_socket=$database_sock_path;"; $dbh = DBI->connect("$DBI_data","$database_login","$database_password",{'RaiseError' => 1}); open(MAC,"$arp_command|"); @mac = <MAC>; close (MAC); foreach (@mac){ if ($_ =~ m/[^0-9]*([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)[^0-9]+(.{2}(:|-).{2}(:|-).{2}(:|-).{2}(:|-).{2}(:|-).{2}).+/){ $bin_ip = unpack("N",inet_aton($1)); $bin_ip = $bin_ip > 2147483647 ? ($bin_ip - 0xFFFFFFFF - 1):$bin_ip; my $duplicated = 0; $q = "SELECT ip FROM ip_mac WHERE ip=$bin_ip LIMIT 1"; $sth = $dbh->prepare( $q ); $sth->execute(); while( $zzz = $sth->fetchrow_hashref ) { $duplicated = 1; }; if (!$duplicated){ $dbh->do("INSERT INTO ip_mac (ip, mac) VALUES ($bin_ip, '$2')"); printf ("Inserted ip/mac $1/$2 to database \n"); }; }; }; запускать по крону например каждые 10 минут. потом обычным запросом с применением select inet_ntoa(4294967295 & ip) выковыриваем данные. всё просто и понятно :) Вставить ник Quote
_djbdb Posted November 9, 2007 Posted November 9, 2007 можно проще arp -a > и в базу. можно, но в моем случае именно так, ибо есть еще один скрипт - который строит статическую арп таблиЦу, и блокирует левые связки IP+MAC.. а если мне не изменяет память, то arpwatch использует libpcap, переводящий интерфейс в промискмод, тем самым позволяя сниферить пролетающие мимо (не адресованные серверу) пакеты, что, опять же - в моем случае, очень даже удобно ;) Вставить ник Quote
Reanimator++ Posted November 18, 2007 Posted November 18, 2007 http://www.l2nt.info/ Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.