|
perl скрипт соответствия ip и mac адресов
|
|||
---|---|---|---|
#18+
не хочет сцука работать. дожен брать из файлы ип и мак адреса, сравнивать с тем, что есть сейчас и блокировать тех пользователей, у которых мак и ип не совпадут с теми, что указаны в файле. Ни разу не выполняется условие выделенное жирным. вот собственно скрипт: #!/usr/bin/perl use POSIX qw(strftime); $dtnow = strftime "%Y-%m-%e\t%H:%M:%S", localtime($^T); %mac=(); open(FDAT,"<ipmac_open.dat"); foreach $s (<FDAT>) { chomp $s; ($di,$dm) = split /[\t\s]+/,$s; $mac{$di} = uc($dm); } close(FDAT); %bad = (); open(FC,">ipmac_close.dat"); @arp = qx{arp -an}; foreach (@arp) { ($s1,$ui,$s2,$um,$s3,$s4,$s5,$s6) = split /\s\(\)+/, $_; $um = uc($um); if ((! exists $mac{ uc($ui) } )||(!($um eq $mac{uc($ui)}))) { print FC "$ui\t$um\n"; $bad{$ui} = $um; print "bad"; print "$ui\t$um\n"; } } print @bad; close(FC); system("ipfw -f 555 delete ;"); %cl=(); foreach $ui (keys %bad) { $s = qx(arping -c 1 $ui ); chomp $s; ($b1,$b2,$b3,$cm,$ci,$b6,$b7,$b8) = split /[\t\s\(\)]+/,$s; $cm = uc($cm); if ((exists $bad{uc($ci)})&&($cm eq $bad{uc($ui)})) { $cl{$ui} = $cm; } else { print "$dtnow\topen addr\t$ui\t$cm\n"; } } $s=''; foreach $ui (keys %cl) { print "$dtnow\tclose addr\t$ui\t$cl{$ui}\n"; $s .= "ipfw 555 add deny ip from $ui to any ; \n"; $s .= "ipfw 555 add deny ip from any to $ui ; \n"; } if (length($s) == 0) { print "$dtnow\tnothing found\n"; } system($s); ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2004, 11:15 |
|
|
start [/forum/topic.php?fid=23&fpage=501&tid=1479361]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
28ms |
get tp. blocked users: |
2ms |
others: | 319ms |
total: | 428ms |
0 / 0 |