這個程式是利用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