这个程式是利用perl + 一些系统指令完成的 
主要的资料来源是利用netstat的连线纪录来判断的 
复制程式
#!/usr/bin/perl 
# 防砍站小程式 
# 肉脚梁枫制作 
# v 0.0超级不稳版 
# 制作日期:2003.1.31 
# 版权 GPL 
# 资料设定 
$Max_Connect_Number = 300;       # 最多能有多少连结 
$IPFW_Number = 950;             # 防火墙规则设定在第几条规则 没必要可以不动 
$PATH = '/tmp/'                # 暂存档路径 
$Netstat = 'temp1'             #暂存档1 没必要就不用乱动了! 
$CN = 'temp2'                  #暂存档2 没必要就不用乱动了!C 
#系统设定 
$USR_BIN_PATH = '/usr/bin/' 
$BIN_PATH = '/bin/' 
$SBIN_PATH = '/sbin/' 
#以下就可以不用动了 
system("$USR_BIN_PATH"."netstat -na > $PATH$Netstat"); 
open(IPFW,$PATH.$Netstat); 
open(IPFW2,">$PATH$CN") ||die("can't open IPFW2 file\n"); 
while($line = <IPFW>){ 
        $line =~ s/ +/,/g; 
        print IPFW2 "$line" || die("can't input IPFW2"); 
} 
close IPFW; 
close IPFW2; 
system("$BIN_PATH"."rm -rf $PATH$Netstat"); 
system("$USR_BIN_PATH"."cut -f 1,5 -d , $PATH$CN > $PATH$Netstat"); 
open(IPFW,$PATH.$Netstat); 
open(IPFW2,">$PATH$CN"); 
while(<IPFW>){ 
        ($line[0],$line[1],$line[2]) = split(/,/); 
        chomp($_); 
        chomp($line[0],$line[1]); 
        if($line[0] eq "tcp4"){ 
                ($IP[0],$IP[1],$IP[2],$IP[3]) = split(/\./,$line[1]); 
                if($IP[0] > 1 and $IP[0] != 127){ 
                        if($IP[0] == 61 and $IP[1] == 63 and $IP[2] == 145 and $IP[3] >= 65 and $IP[3] <= 94){}else{ 
                                print IPFW2 "$IP[0].$IP[1].$IP[2].$IP[3]\n"; 
                        } 
                } 
        } 
} 
close IPFW; 
close IPFW2; 
system("$USR_BIN_PATH"."sort $PATH$CN | $USR_BIN_PATH"."uniq -c > $PATH$Netstat"); 
open(IPFW,$PATH.$Netstat); 
open(IPFW2,">$PATH$CN"); 
while($line = <IPFW>){ 
        $line =~ s/ +/,/g; 
        ($IP[0],$IP[1],$IP[2])=split(/\,/,$line); 
        if($IP[1] >= $Max_Connect_Number){ 
                chomp($IP[2]); 
                system("$SBIN_PATH"."ipfw add $IPFW_Number deny all from $IP[2] to any"); 
                system("$SBIN_PATH"."ipfw add $IPFW_Number deny all from any to $IP[2]"); 
                print "$SBIN_PATH"."ipfw add $IPFW_Number deny all from $IP[2] to any\n"; 
        } 
} 
close IPFW; 
close IPFW2; 
system("$BIN_PATH"."rm -rf $PATH$Netstat;rm -rf $PATH$CN"); 
 因为最近会网站一直被砍,所以上网找了一下,刚好梁枫大哥有这个程式
转贴自 
http://phorum.study-area.or...php?t=14953