« Отговор #6 -: Mar 26, 2002, 09:48 »
Ето и един Perl script, който изпълнява следната задача.
При промяна на MAC adress-a на Lan картата на клиента я записва във файл който може да прегледаме.
1. Най добре е да направите статична ARP таблица
Това става като създадете файла /etc/ethers
Той е във формата:
--------------------------
mac adress hostname
mac adress hostname
2. След което изпълнявате arp -s -f
Ако искате погледнете man arp.
3. Ето и самия script който може да го стартирате от cronа
на всеки 5 или 10 мин.
#!/usr/bin/perl
# събиране на информация за текущите MAC адресите
$ipmc = `/sbin/arp -n | grep ether`;
@ipmc = split("\n", $ipmc);
foreach $str (@ipmc) {
s/\t/ /g;
@strng = split(" ", $str);
$ip_mac{$strng[0]} = $strng[2];
}
# Прочитане на файла с статично описани MAC адреси
$ipmc = `cat /etc/ethers`;
@ipmc = split("\n", $ipmc);
foreach $str (@ipmc) {
($mac_def, $ip_def) = split("\t", $str);
$ip_fix{$ip_def} = $mac_def;
$ipfixip{$mac_def} = $ip_def;
}
# Проверка дали имаме разлика от статично описаните
# и реално ползващите MAC адреси
$set_err = 0;
foreach $ip (sort keys %ip_mac) {
if ($ip_mac{$ip} ne $ip_fix{$ip}) {
$ip_lamer{$ip} = $ip_mac{$ip};
$set_err = 1;
}
}
# Ако имаме то ги записваме във файл.
if ($set_err ne 0) {
$dttoday = `date`;
chop($dttoday);
open (BADUSER, ">>/var/httpd/html/private/badusers");
foreach $ip (sort keys %ip_lamer) {
$madmac = $ip_fix{$ip};
print (BADUSER "$dttoday\t$ipfixip{$madmac}\t$ip_lamer{$ip}\t$ip\n");
print "Defined lame user.\n $dttoday\nFrom: $ipfixip{$madmac}\nMAC:$ip_lamer{$ip}\nTo: $ip\n";
}
close BADUSER;
}
# Ами това е. след което вече може да видите кой е правил магарий !!!