IPを返すだけのCGI(ipchk-simple.cgi)
IPv4とIPv6の共存している環境でグローバルIPを取るメモです。
単に環境変数の「REMOTE_ADDR」を返しているだけですが、IPv4でアクセスすればIPv4のIPが、IPv6も同様に取得できます。
ここに到達したあとでIPv4とIPv6を変更することはできないため、次のスクリプトで強制してアクセスします。
#!/usr/bin/perl print "Content-type: text/plain\n\n"; print "$ENV{'REMOTE_ADDR'}"; exit;
このスクリプトは外部のレンタルサーバなどに設置しておきます。
次のスクリプトと別のサーバであればOKです。
curlでアクセスしてJavaScriptとして返すCGI(grobalipreturn_js.cgi)
curlでIPv4とIPv6を強制して先程のスクリプトにアクセスします。
「curl -4」とするとIPv4を強制し、「curl -6」だとIPv6が強制されます。
このスクリプトに「grobalipreturn_js.cgi?mode=4」とアクセスするとIPv4が、「grobalipreturn_js.cgi?mode=6」でアクセスするとIPv6のIPアドレスを返します。
#!/usr/bin/perl # IPを返すだけのスクリプトURL my $url = "https://sakue.com/ipchk-simple.cgi"; my %in = (); my $buf = $ENV{'QUERY_STRING'}; foreach (split(/&/, $buf)) { ($key, $val) = split(/=/); $val =~ tr/+/ /; $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $in{$key} .= $val; } my $result = ""; if($in{'mode'} eq "6") { $result = `curl -6 $url`; } else { $result = `curl -4 $url`; } $result =~ s/\r\n//; $result =~ s/\r//; $result =~ s/\n//; print "Content-type: application/x-javascript\n\n"; print "document.write('$result')\n\n"; exit;
単に表示してみたい場合は以下のように「text/plain」で表示します。
print "Content-type: text/plain\n\n"; print "$result";
2つのスクリプトを同じサーバに置くとサーバのIPが返ってきてしまうので、それぞれ別のサーバに設置してブラウザからアクセスします。
JavaScriptで埋め込み
あとは表示したいhtmlファイルにJavaScriptを設置すればOKです。
設置したページにアクセスすると、現在の自分のIPアドレスが確認できます。
IPv4
末尾のパラメータを「mode=4」にするとIPv4アドレスが取れます。
<script type="text/Javascript" src="https://sakue.com/grobalipreturn_js.cgi?mode=4"></script>
IPv6
同様に「mode=6」にするとIPv6です。
<script type="text/Javascript" src="https://sakue.com/grobalipreturn_js.cgi?mode=6"></script>
htmlの例です
<html lang="ja"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <p>IPv4:<script type="text/Javascript" src="https://sakue.com/grobalipreturn_js.cgi?mode=4"></script></p> <p>IPv6:<script type="text/Javascript" src="https://sakue.com/grobalipreturn_js.cgi?mode=6"></script></p> </body> </html>
コメントフォーム