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);

Как-то так. Можнадокому?

Leave a Reply