这个程式是利用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