web上でIPアドレスから国名を調べる
IP::country::fast (ローカルサーバー上のみ)
perlで書いたcgiは以下のとおり
#!/usr/bin/perl -w # # 2020/9/12 OK # /cgi-bin/ip_country-200912.cgi # 2020/9/13 ---> # 国コードだけでなく # 国名も表示するように変更 # 2020/9/14 OK # file name : test-ip_country-200914-cgi-ok.txt # use strict; # 宣言した変数以外を使えなくする use lib '/home/user/.cpanm/work/1598918143.133026/IP-Country-2.28/lib/'; use IP::Country::Fast; # 国コードと国名のデータ --------------------------------- my $c_code_file="/home/user/ipaddress/c_code_data.txt"; my $c_name_file="/home/user/ipaddress/c_name_data.txt"; my $i_count; my $i_count2; my $i_max=260; my $ip_line; my @c_code; my @c_name; my $country_name; my $country_code; my $ip_addr ; my $ip_addr2; $ip_addr = <STDIN> $ip_addr =~/\d+\.\d+\.\d+\.\d+/ ; # IP addressを パターンマッチ ex 192.168.0.1 $ip_addr2=$& ; my $reg = IP::Country::Fast->new(); my $country= $reg->inet_atocc($ip_addr2) ; # country code を 読み込む ---------------------------- open IN, "<",$c_code_file || die "Error: data file not existed $!\n" ; #ファイルを入力で開く $i_count=0; while ($ip_line = <IN>) { # 記録されているIPアドレスを1行読み込む 空行でない場合、以下を実行 $i_count=$i_count + 1 ; $c_code[$i_count]=$ip_line; } close IN ; # country name を 読み込む ---------------------------- open IN, "<",$c_name_file || die "Error: data file not existed $!\n" ; #ファイルを入力で開く $i_count=0; while ($ip_line = <IN>) { # 記録されているIPアドレスを1行読み込む 空行でない場合、以下を実行 $i_count=$i_count + 1 ; $c_name[$i_count]=$ip_line; } close IN ; # --------- 国コードから国名を求める ------------------ $i_count2=0; for ($i_count=1 ; $i_count<=$i_max ;$i_count++ ) { $country_code =$c_code[$i_count]; $country_code =~ s/\x0D?\x0A?$//; # 改行を除く if ( $country eq $country_code ) { $i_count2=$i_count; last; } } if ( $i_count2==0 ) { $country_name="Error:該当する国名なし"; } else { $country_name=$c_name[$i_count2]; } # # ここからHTML出力 ########################## # print "Content-type: text/html\n\n"; print <<EOM; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>IPから国名を調べる</title> </head> <body> IPから国名を調べる<br><br> IP:$ip_addr2<br> 国名コード:$country<br> 国名:$country_name<br> <br><br><br> <a href="/analog/ip_country-200912.html" target="MAIN">IPから国名を調べる画面へ戻る</a><br><br> </body> </html> EOM