« mysqlパスワード忘れ | メイン | vncのwindowにコマンドラインからfirefox »
2019年10月01日
hosts.allow日本のみ
めえっちゃくちゃ原始的なやり方です・・・すんげー時間かかるwww<?PHP
//$dat = file_get_contents("http://ftp.apnic.net/stats/apnic/delegated-apnic-latest");
$dat = file_get_contents("delegated-apnic-latest.txt");
$lines = explode("\n",$dat);
$fp = fopen("ip.txt","w");
foreach($lines as $line){
if(strpos($line,"apnic|JP|ipv4|") !== false){
$parts = explode("|",$line);
$ips = explode(".",$parts[3]);
$start_num = hexdec(dechex($ips[0]).sprintf ("%02x",$ips[1]).sprintf ("%02x",$ips[2]).sprintf ("%02x",$ips[3]));
for($i=0;$i<$parts[4];$i++){
$this_num = $start_num + $i;
$dex = (string)(dechex($this_num));
if(strlen($dex) == 7){
$dex = "0".$dex;
}
//2文字づつ
$iparr = str_split($dex, 2);
fwrite($fp, hexdec($iparr[0]).".".hexdec($iparr[1]).".".hexdec($iparr[2]).".".hexdec($iparr[3])."\n");
}
}
}
fclose($fp);
//2番めまでのIPが256*256あれば
system("cat ip.txt |awk -F \".\" '{print $1\".\"$2}'|sort | uniq -c > sorted.txt");
$jp_host_arr = array();
$dat = file_get_contents("sorted.txt");
$lines = explode("\n",$dat);
foreach($lines as $line){
$tmp = explode(" ",trim($line));
if($tmp[0] == 65536){
$jp_host_arr[] = $tmp[1];
}
}
//65536の場合を抜いてip.txtを作り直す
//一時ファイルの量に耐えられるならgrep -v 使ったほうが早いと思う。
$fpr = fopen("ip.txt","r");
$fp = fopen("ip2.txt","w");
while($line = fgets($fpr)){
$is_in = false;
foreach($jp_host_arr as $jpip){
if(strpos($line,$jpip) === 0){
$is_in = true;
break;
}
}
if($is_in === false){
fwrite($fp,$line);
}
}
fclose($fpr);
fclose($fp);
//3番目までのIPが256あれば
system("cat ip2.txt |awk -F \".\" '{print $1\".\"$2\".\"$3}'|sort | uniq -c > sorted2.txt");
$dat = file_get_contents("sorted2.txt");
$jp_host_arr2 = array();
$lines = explode("\n",$dat);
foreach($lines as $line){
$tmp = explode(" ",trim($line));
if($tmp[0] == 256){
$jp_host_arr2[] = $tmp[1];
}
}
//256の場合を抜いてhosts.txt
$fpr = fopen("ip2.txt","r");
$fp = fopen("hosts.txt","w");
while($line = fgets($fpr)){
$is_in = false;
foreach($jp_host_arr2 as $jpip){
if(strpos($line,$jpip) === 0){
$is_in = true;
break;
}
}
if($is_in === false){
fwrite($fp,"in.proftpd : ".$line);
}
}
foreach($jp_host_arr as $line){
fwrite($fp,"in.proftpd : ".$line.".\n");
}
foreach($jp_host_arr2 as $line){
fwrite($fp,"in.proftpd : ".$line.".\n");
}
fclose($fpr);
fclose($fp);
投稿者 muuming : 2019年10月01日 19:10