Arp-сканер на перл
Юзает стандартный БСД-шный арпинг, но с преферансом и куртизанками. Использует SQL-таблицу с полями (id INT, ip VARCHAR(15), mac VARCHAR(17), online INT)
#!/usr/bin/perl -w
#Arping addon by Snake
#http://snake.khd.ru
#2010-10-02
#v0.3
use Shell;
use DBI;
print "Scan 10.12.51.0/24n";
for ($i=1; $i<255; $i++){
my $ip="10.12.51.$i";
my @h5_5=`/usr/local/sbin/arping -i em0 -c 5 -w 5 $ip >> ping.log`;
}
print "Scan 10.12.5.0/24n";
for ($i=1; $i<255; $i++){
my $ip="10.12.5.$i";
my @h5_3=`/usr/local/sbin/arping -i vlan1205 -c 5 -w 5 $ip >> ping.log`;
}
print "Connect to databasen";
my $db = DBI->connect('DBI:mysql:arpbase;host=localhost', 'arpuser', 'arppass'
) || die "Could not connect to database: $DBI::errstr";
open(FH, "do("UPDATE iptable SET online = 0 WHERE online = 1");
my $j;
while(){
my $line=$_;
if (($dstmac,$dstip)=$line=~/60 bytes from (.{17}) ((.*?)): index=d* time=d*.d* msec/){
if ($dstmac ne $oldmac, $dstip ne $oldip){
if($db->do("SELECT ip, mac FROM iptable WHERE ip = '$dstip'")){
$db->do("UPDATE iptable SET mac = '$dstmac', online = 1 WHERE ip = '$dstip'");
}
}
$oldip=$dstip;
$oldmac=$dstmac;
++$j;
}
}
close(FH);
Как-то так. Можнадокому?