Created
April 26, 2013 03:29
-
-
Save CLCL/5464882 to your computer and use it in GitHub Desktop.
UGTopのIP確認くんのまるパクリ 自分で表示したい環境変数とか設定するとか、外部のサイトにつなげると嫌だとか、そういうときに使おう。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/perl | |
use strict; | |
use warnings; | |
use CGI; | |
use File::Spec; | |
use FindBin; # mod_perl環境じゃない場合 | |
#use FindBin::Real; # mod_perlなど | |
use HTML::Template; | |
use Time::Piece; | |
my $q = CGI->new(); | |
my $t = HTML::Template->new( filehandle => *DATA , loop_context_vars => 1 ); | |
# 表示項目、order | |
my @keys = qw ( | |
DATE_LOCAL | |
HTTP_HOST | |
SERVER_PORT | |
REMOTE_ADDR | |
REMOTE_PORT | |
HTTP_X_FORWARDED_FOR | |
REMOTE_HOST | |
HTTP_USER_AGENT | |
HTTP_ACCEPT_LANGUAGE | |
HTTP_FORWARDED | |
REMOTE_USER | |
REMOTE_IDENT | |
HTTP_COOKIE | |
HTTP_REFERER | |
HTTP_VIA | |
PROXY_CONNECTION | |
REQUEST_METHOD | |
CONTENT_TYPE | |
CONTENT_LENGTH | |
HTTP_X_LOCKING | |
HTTP_FROM | |
HTTP_ACCEPT_ENCODING | |
HTTP_ACCEPT | |
); | |
# 辞書 | |
my $dict = { | |
'DATE_LOCAL' => { item => '情報を取得した時間', }, | |
'HTTP_HOST' => { item => '現在接続しているサーバのホスト名', | |
comment => 'httpサーバのドメイン名', }, | |
'SERVER_PORT' => { item => '現在接続しているサーバのポート', | |
comment => 'httpサーバのポート(80番に設定されていることが多い)', }, | |
'REMOTE_ADDR' => { item => '現在接続している場所(現IP)', | |
comment => '(REMOTE_ADDR)', big => 1, }, | |
'REMOTE_PORT' => { item => '現在接続している場所のポート', | |
comment => 'クライアント側のポートは高次ポートになることが多い', }, | |
'HTTP_X_FORWARDED_FOR' => { item => '現在接続している場所(元IP)', | |
comment => '(FORWARDED_FOR)', }, | |
'REMOTE_HOST' => { item => 'プロバイダー名', | |
comment => 'クライアントホスト名(REMOTE_HOST)', | |
big => 1, }, | |
'HTTP_USER_AGENT' => { item => 'ブラウザーとOS', | |
comment => '閲覧者のWeb Browserの種別(HTTP_USER_AGENT)', }, | |
'HTTP_ACCEPT_LANGUAGE' => {item => 'サポート言語', | |
comment => 'jaまたはJPNで日本語サポート', }, | |
'HTTP_FORWARDED' => { item => 'クライアントの場所', | |
comment => '(HTTP_FORWARDED)', }, | |
'REMOTE_USER' => { item => 'クライアントID', | |
comment => 'BASIC認証を経由していれば表示', }, | |
'REMOTE_IDENT' => { item => 'ユーザ名', | |
comment => 'RFC1413認証(IDENT)をサポートしていれば表示', }, | |
'HTTP_COOKIE' => { item => 'クッキー', | |
comment => 'アクセスの度このサーバにCookieの内容を送信しています', }, | |
'HTTP_REFERER' => { item => 'どこのURLから来たか', | |
comment => '直接URLを指定した場合は表示されない (HTTP_REFERER)', }, | |
'HTTP_VIA' => { item => 'proxyのバージョン等', comment => '(HTTP_VIA)', }, | |
'PROXY_CONNECTION'=> { item => 'proxyの効果', comment => '(PROXY_CONNECTION)', }, | |
'REQUEST_METHOD' => { item => 'FORMの情報', | |
comment => 'データの入力方法 (GET or POST)', }, | |
'CONTENT_TYPE' => { item => 'FORMのタイプ', | |
comment => 'Serverに送るMIMEタイプ', }, | |
'CONTENT_LENGTH' => { item => 'FORMのバイト数', | |
comment => 'Serverに送るバイト数', }, | |
'HTTP_ACCEPT_ENCODING' => {item => 'エンコードの仕様', | |
comment => 'サーバ側が対応していればデータ転送量が減ります', }, | |
'HTTP_ACCEPT' => { item => 'MIMEの仕様', }, | |
}; | |
# テーブル用データ用意 | |
my @items; | |
my $time = localtime(); | |
$ENV{DATE_LOCAL} = $time->strftime('%Y年 %m月 %d日 %p %H時 %M分 %S秒'); | |
#foreach my $key ( keys %ENV ) { # 環境変数全部表示する時はこちらを生かす | |
foreach my $key ( @keys ) { | |
my $hash = { | |
key => $key, | |
item => ( $dict->{$key}->{item} or $key ), | |
value => $ENV{$key}, | |
comment => $dict->{$key}->{comment}, | |
}; | |
$hash->{big} = 1 if $dict->{$key}->{big}; | |
push @items, $hash; | |
} | |
# テンプレート適用 | |
$t->param( items => \@items ); | |
$t->param( HTTP_HOST => $ENV{HTTP_HOST} ); | |
#my $source = read_file( FindBin::Real::Script() ); # Findbin::Realのとき | |
my $source = read_file( File::Spec->catfile( $FindBin::RealBin, $FindBin::Script ) ); #FindBinのとき | |
$t->param( source => $source ); | |
print $q->header( -type => 'text/html', -charset => 'UTF-8'); | |
print $t->output(); | |
sub read_file { | |
my $filename = shift; | |
open my $fh, '<', $filename or die $!; | |
my $data = do { local $/; <$fh> }; | |
close $fh; | |
return $data; | |
} | |
exit; | |
# CentOS 6 | |
# yum install perl-CGI perl-HTML-Template perl-Time-Piece | |
# 以降HTML::Template用テンプレート | |
__DATA__ | |
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset="UTF-8"> | |
<title>IP確認君(VIA <tmpl_var escape="html" name="HTTP_HOST">)</title> | |
<script type="text/javascript" src="scripts/shCore.js"></script> | |
<script type="text/javascript" src="scripts/shBrushPerl.js"></script> | |
<link type="text/css" rel="stylesheet" href="styles/shCoreDefault.css"> | |
<link type="text/css" rel="stylesheet" href="styles/shThemeDefault.css"> | |
<script type="text/javascript">SyntaxHighlighter.all();</script> | |
<!--[if lt IE 9]> | |
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js"></script> | |
<![endif]--> | |
<style> | |
header h1 { | |
margin: 20px auto; | |
text-align: center; | |
width: 50%; | |
font-size: large; | |
padding: 4px; | |
font-weight: normal; | |
-webkit-border-radius: 12px; | |
-moz-border-radius: 12px; | |
border-radius: 12px; | |
} | |
header h1, thead th { | |
background: #721C38; | |
background: -webkit-gradient(linear, 0 0, 0 bottom, from(#721C38), to(#1F0A11)); | |
background: -webkit-linear-gradient(#721C38, #1F0A11); | |
background: -moz-linear-gradient(#721C38, #1F0A11); | |
background: -ms-linear-gradient(#721C38, #1F0A11); | |
background: -o-linear-gradient(#721C38, #1F0A11); | |
background: linear-gradient(#721C38, #1F0A11); | |
-pie-background: linear-gradient(#721C38, #1F0A11); | |
behavior: url(/PIE.htc); | |
color: white; | |
} | |
article { | |
padding: 20px; | |
} | |
table { | |
margin: 20px auto; | |
border: 2px solid white; | |
border-collapse: collapse; | |
} | |
td, th { | |
border: 2px solid white; | |
padding: 4px; | |
color: #333; | |
font-size: small; | |
} | |
tbody th, tbody td { | |
background: #FBCAD9; | |
background: -webkit-gradient(linear, 0 0, 0 bottom, from(#FEF6F8), to(#FBCAD9)); | |
background: -webkit-linear-gradient(#FEF6F8, #FBCAD9); | |
background: -moz-linear-gradient(#FEF6F8, #FBCAD9); | |
background: -ms-linear-gradient(#FEF6F8, #FBCAD9); | |
background: -o-linear-gradient(#FEF6F8, #FBCAD9); | |
background: linear-gradient(#FEF6F8, #FBCAD9); | |
-pie-background: linear-gradient(#FEF6F8, #FBCAD9); | |
behavior: url(/PIE.htc); | |
text-align: left; | |
} | |
.even th, .even td { | |
background: #DDDDDD; | |
background: -webkit-gradient(linear, 0 0, 0 bottom, from(#FFFFFF), to(#DDDDDD)); | |
background: -webkit-linear-gradient(#FFFFFF, #DDDDDD); | |
background: -moz-linear-gradient(#FFFFFF, #DDDDDD); | |
background: -ms-linear-gradient(#FFFFFF, #DDDDDD); | |
background: -o-linear-gradient(#FFFFFF, #DDDDDD); | |
background: linear-gradient(#FFFFFF, #DDDDDD); | |
-pie-background: linear-gradient(#FFFFFF, #DDDDDD); | |
behavior: url(/PIE.htc); | |
} | |
tbody th { | |
font-weight: normal; | |
} | |
tbody td { | |
color: #800040; | |
} | |
tbody td.big { | |
font-size: x-large; | |
font-weight: bold; | |
} | |
</style> | |
</head> | |
<body> | |
<header> | |
<h1>あなたの情報(IP確認君 VIA <tmpl_var name="HTTP_HOST">)</h1> | |
</header> | |
<article> | |
<table> | |
<thead> | |
<tr> | |
<th>取得項目</th> | |
<th style="letter-spacing: 1em;">情報</th> | |
<th style="letter-spacing: 1em;">解説</th> | |
</tr> | |
</thead> | |
<tbody> | |
<tmpl_loop name="items"> | |
<tr<tmpl_unless name="__odd__"> class="even"</tmpl_unless>> | |
<th title="<tmpl_var escape="html" name="key" >"> | |
<tmpl_var escape="html" name="item"> | |
</th> | |
<td<tmpl_if name="big"> class="big"</tmpl_if>> | |
<tmpl_var escape="html" name="value" default="(none)"> | |
</td> | |
<th> | |
<tmpl_var escape="html" name="comment"> | |
</th> | |
</tr> | |
</tmpl_loop> | |
</tbody> | |
</table> | |
</article> | |
<article style="padding-left: 0px;"> | |
<pre class="brush: perl;"> | |
<tmpl_var escape="html" name="source"> | |
</pre> | |
</article> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment