概要

ソース

makeIPBlockList.pl

  • filemakeIPBlockList.zip
    すべてを展開すべてを収束
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
     41
     42
     43
     44
     45
     46
     47
     48
     49
     50
     51
     52
     53
     54
     55
     56
     57
     58
     59
    
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    -
    |
    |
    -
    |
    -
    |
    |
    !
    !
    !
     
     
     
     
    -
    |
    |
    |
    -
    -
    |
    !
    |
    |
    !
    |
    !
     
     
    
    #!/usr/bin/perl
    # makeIPBlockList.pl
    # http://iplist.wave.prohosting.com/ のIPリストから接続をブロックするIPアドレスのリストを作成する。
     
    use strict;
    use warnings;
    use utf8;
    use Encode;
    use Net::IP;
     
    my $fileNameIn = "cn.txt";
    my $fileNameOut = "cn_block.txt";
     
    binmode( STDIN,  ":encoding(CP932)" );
    binmode( STDOUT, ":encoding(CP932)" );
    binmode( STDERR, ":encoding(CP932)" );
     
    $| = 1;
     
    open( my $fin, "<:utf8", encode( 'CP932', $fileNameIn ) ) or die( "$fileNameIn: $!\n" );
    my @body = <$fin>;
    close( $fin );
    chomp( @body );
     
    open( my $fout, ">:utf8", encode( 'CP932', $fileNameOut ) ) or die( "$fileNameOut: $!\n" );
     
    my $max = scalar( @body );
    my $count = 0;
     
    while( @body > 0 ){
        printf STDERR ( "%d/%d\r", ++$count, $max );
        my $line = shift( @body );
        if ( $line =~ /[^:]+:(\d+\.\d+\.\d+\.\d+)-(\d+\.\d+\.\d+\.\d+)/ ){
            my $ip = new Net::IP( "$1-$2" ) or die( Net::IP::Error() );
            foreach ( $ip->find_prefixes() ){
                /([^\/]+)\/([^\/]+)/;
                printf $fout ( "%s/%s\n", $1, makeMask( $2 ) );
            }
        }
    }
     
    close( $fout );
     
    sub makeMask
    {
        my( $x ) = @_;
        my $ret = '';
        my $b = "1";
        while( $x > 0 ){
            if ( $x & 1 ){
                $ret .= $b;
            }
            $b .= $b;
            $x >>= 1;
        }
        return join( '.', unpack( 'C*', pack( 'B32', substr( $ret . "00000000000000000000000000000000", 0, 32 ) ) ) );
    }
     
    # EOF
    

入力

CN:58.14.0.0-58.25.255.255
CN:58.30.0.0-58.63.255.255
CN:58.66.0.0-58.67.255.255
CN:58.68.128.0-58.68.255.255
CN:58.82.0.0-58.83.255.255
CN:58.87.64.0-58.87.127.255
CN:58.99.128.0-58.101.255.255
CN:58.116.0.0-58.119.255.255
CN:58.128.0.0-58.135.255.255
CN:58.144.0.0-58.144.255.255

出力

58.14.0.0/255.254.0.0
58.16.0.0/255.248.0.0
58.24.0.0/255.254.0.0
58.30.0.0/255.254.0.0
58.32.0.0/255.224.0.0
58.66.0.0/255.254.0.0
58.68.128.0/255.255.128.0
58.82.0.0/255.254.0.0
58.87.64.0/255.255.192.0
58.99.128.0/255.255.128.0
58.100.0.0/255.254.0.0
58.116.0.0/255.252.0.0
58.128.0.0/255.248.0.0
58.144.0.0/255.255.0.0

makeIPBlockList2.pl

  • filemakeIPBlockList2.zip
    すべてを展開すべてを収束
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
    
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    -
    |
    -
    |
    |
    !
    !
     
     
     
     
     
    
    #!/usr/bin/perl
    # makeIPBlockList2.pl
    # http://nami.jp/ipv4bycc/mask.txt からアクセス禁止国のIPアドレスを抽出
     
    use strict;
    use warnings;
    use utf8;
    use Encode;
     
    #my $charset_console	= 'UTF-8';
    my $charset_console    = 'CP932';
    my $charset_file    = 'UTF-8';
     
    binmode( STDIN,  ":encoding($charset_console)" );
    binmode( STDOUT, ":encoding($charset_console)" );
    binmode( STDERR, ":encoding($charset_console)" );
     
    my $fileNameIn = 'mask.txt';
    my $fileNameOut = 'block_list.txt';
     
    my @countries = qw( CN KR RU BR );
    my $block_countries = '^(' . join( "|", map{ quotemeta($_); } @countries ) . ')$';
     
    open( my $fin, "<:encoding($charset_file)", encode( $charset_console, $fileNameIn ) )
        or die( "$fileNameIn: $!\n" );
    open( my $fout, ">:encoding($charset_file)", encode( $charset_console, $fileNameOut ) )
        or die( "$fileNameOut: $!\n" );
     
    foreach my $line ( <$fin> ){
        my( $country, $ip ) = split( /\s/, $line );
        if ( $country =~ /$block_countries/i ){
            #$ip =~ s{/}{,};
            printf $fout ( "%s\n", $ip );
        }
    }
     
    close( $fin );
    close( $fout );
     
    # EOF
    

添付ファイル: filemakeIPBlockList2.zip 521件 [詳細] filemakeIPBlockList.zip 553件 [詳細]

リロード   新規 下位ページ作成 編集 凍結 差分 添付 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: Thu, 11 Apr 2013 10:33:41 JST (1925d)