#!/usr/bin/perl
use strict;
my $DOCUMENT_ROOT=$ENV{"DOCUMENT_ROOT"};
my $server_root=$DOCUMENT_ROOT;
$server_root=~ s/\/$//;
my $somecommands="nkf mysql";
my @somecmd=split (" +",$somecommands);
$ENV{"PATH"}="/bin:/usr/bin";
my %serverval;
my %serverinf;
my %clientinf;
my %browserinf;
my %proxyinf;
my @clname;
$clname[0]="#aaaaaa";
$clname[1]="#0000ff";
$clname[2]="#00ff00";
$clname[3]="#00ffff";
$clname[4]="#aa7777";
$clname[5]="#ff00ff";
$clname[6]="#ffff00";
$clname[7]="#ff0000";
my @fptn;
$fptn[0]="noatr";
$fptn[1]="rdonly";
$fptn[2]="wronly";
$fptn[3]="rdwr";
$fptn[4]="exec";
$fptn[5]="exrdonly";
$fptn[6]="exwronly";
$fptn[7]="exrdwr";
my $prsw=255;
my $val;
my $rsn;
my $noinfsw=1;
my $max=0;
my $printlevel;
my $printdir;
my $printdirlevel=0;
sub setComment {
my @args=@_;
my $comlang=$args[0];
while (defined $comlang){
if ($comlang eq "ja"){
$serverinf{"DOCUMENT_ROOT"}="ドキュメントルート";
$serverinf{"GATEWAY_INTERFACE"}="インターフェース";
$serverinf{"PATH"}="コマンド・パス";
$serverinf{"QUERY_STRING"}="クエリ";
$serverinf{"REQUEST_METHOD"}="メソッド";
$serverinf{"REQUEST_URI"}="要求されたページ";
$serverinf{"SCRIPT_FILENAME"}="サーバ内でのファイル名";
$serverinf{"SCRIPT_NAME"}="スクリプト名";
$serverinf{"SERVER_ADDR"}="サーバ IP";
$serverinf{"SERVER_ADMIN"}="サーバ管理者";
$serverinf{"SERVER_NAME"}="サーバホスト名";
$serverinf{"SERVER_PORT"}="サーバーポート";
$serverinf{"SERVER_PROTOCOL"}="プロトコル";
$serverinf{"SERVER_SIGNATURE"}="サーバサイン";
$serverinf{"SERVER_SOFTWARE"}="ソフトウエア名";
$serverinf{"UNIQUE_ID"}="ユニーク ID";
$clientinf{"REMOTE_ADDR"}="ユーザのIPアドレス";
$clientinf{"REMOTE_PORT"}="ユーザがサーバとの通信に使用したポートの番号";
$clientinf{"REMOTE_IDENT"}="ユーザ名(IDENTプロトコルに対応している場合)";
$clientinf{"REMOTE_USER"}="ユーザ認証時のユーザID";
$browserinf{"HTTP_ACCEPT"}="ブラウザがサポートするメディアタイプ・MIMEタイプ";
$browserinf{"HTTP_ACCEPT_CHARSET"}="ブラウザがサポートする文字コードセット";
$browserinf{"HTTP_ACCEPT_ENCODING"}="エンコード方式(gzip,deflate等)";
$browserinf{"HTTP_ACCEPT_LANGUAGE"}="ブラウザがサポートする言語コード(ja,en等)";
$browserinf{"HTTP_CONNECTION"}="接続の状態";
$browserinf{"HTTP_COOKIE"}="このURLに対するcookieの情報";
$browserinf{"HTTP_EXTENSION"}="CompuserveのRPAへの対応を示す拡張ヘッダ";
$browserinf{"HTTP_FROM"}="ブラウザに設定されているE-Mailアドレス";
$browserinf{"HTTP_HOST"}="接続先ホスト名";
$browserinf{"HTTP_KEEP_ALIVE"}="接続先との接続を維持する最長時間";
$browserinf{"HTTP_PRAGMA"}="キャッシュに関する動作方式(HTTP/1.0用)";
$browserinf{"HTTP_REFERER"}="参照(リンク)元のURL";
$browserinf{"HTTP_UA_CPU"}="クライアントのCPU";
$browserinf{"HTTP_UA_OS"}="クライアントのOS";
$browserinf{"HTTP_USER_AGENT"}="ブラウザに関する情報(種類,バージョン等)";
$browserinf{"HTTP_WEFERER"}="Norton製品専用の拡張ヘッダ(Referer関連)";
$browserinf{"HTTP_WSER_AGENT"}="Norton製品専用の拡張ヘッダ(User-Agent関連)";
$proxyinf{"HTTP_CACHE_CONTROL"}="キャッシュに関する制御情報(最長時間等)";
$proxyinf{"HTTP_CACHE_INFO"}="キャッシュの情報";
$proxyinf{"HTTP_CLIENT_IP"}="接続元のIPアドレス(TrafficServerやNetscapeProxyが付加)";
$proxyinf{"HTTP_FORWARDED"}="プロキシのURIおよびクライアントのFQDN";
$proxyinf{"HTTP_IF_MODIFIED_SINCE"}="この時刻以降にコンテンツが更新されていればそのまま返す";
$proxyinf{"HTTP_MAX_FORWARDS"}="経由できるプロキシの最大数";
$proxyinf{"HTTP_PROXY_CONNECTION"}="プロキシの接続形態";
$proxyinf{"HTTP_SP_HOST"}="接続元のIPアドレス";
$proxyinf{"HTTP_TE"}="プロキシ等がサポートする転送エンコード方式";
$proxyinf{"HTTP_VIA"}="プロキシの情報(種類,バージョン等)";
$proxyinf{"HTTP_X_FORWARDED_FOR"}="接続元のIPアドレス";
$proxyinf{"HTTP_X_LOCKING"}="接続元またはプロキシ自身のIPアドレス(DeleGateが付加)";
$proxyinf{"HTTP_XONNECTION"}="CacheFlow製品専用の拡張ヘッダ(Connection関連)";
$proxyinf{"HTTP_XROXY_CONNECTION"}="CacheFlow製品専用の拡張ヘッダ(Proxy-Connection関連)";
} elsif ($comlang eq "en"){
$serverinf{"DOCUMENT_ROOT"}="Document Root";
$serverinf{"GATEWAY_INTERFACE"}="Gateway Interface";
$serverinf{"PATH"}="Path";
$serverinf{"QUERY_STRING"}="Query String";
$serverinf{"REQUEST_METHOD"}="Request Method";
$serverinf{"REQUEST_URI"}="Request Uri";
$serverinf{"SCRIPT_FILENAME"}="Script Filename";
$serverinf{"SCRIPT_NAME"}="Script Name";
$serverinf{"SERVER_ADDR"}="Server Addr";
$serverinf{"SERVER_ADMIN"}="Server Admin";
$serverinf{"SERVER_NAME"}="Server Name";
$serverinf{"SERVER_PORT"}="Server Port";
$serverinf{"SERVER_PROTOCOL"}="Server Protocol";
$serverinf{"SERVER_SIGNATURE"}="Server Signature";
$serverinf{"SERVER_SOFTWARE"}="Server Software";
$serverinf{"UNIQUE_ID"}="Unique Id";
$clientinf{"REMOTE_ADDR"}="Remote Addr";
$clientinf{"REMOTE_PORT"}="Remote Port";
$clientinf{"REMOTE_IDENT"}="Remote Ident";
$clientinf{"REMOTE_USER"}="Remote User";
$browserinf{"HTTP_ACCEPT"}="Http Accept";
$browserinf{"HTTP_ACCEPT_CHARSET"}="Http Accept Charset";
$browserinf{"HTTP_ACCEPT_ENCODING"}="Http Accept Encoding";
$browserinf{"HTTP_ACCEPT_LANGUAGE"}="Http Accept Language";
$browserinf{"HTTP_CONNECTION"}="Http Connection";
$browserinf{"HTTP_COOKIE"}="Http Cookie";
$browserinf{"HTTP_EXTENSION"}="Http Extension";
$browserinf{"HTTP_FROM"}="Http From";
$browserinf{"HTTP_HOST"}="Http Host";
$browserinf{"HTTP_KEEP_ALIVE"}="Http Keep Alive";
$browserinf{"HTTP_PRAGMA"}="Http Pragma";
$browserinf{"HTTP_REFERER"}="Http Referer";
$browserinf{"HTTP_UA_CPU"}="Http Ua Cpu";
$browserinf{"HTTP_UA_OS"}="Http Ua Os";
$browserinf{"HTTP_USER_AGENT"}="Http User Agent";
$browserinf{"HTTP_WEFERER"}="Http Weferer";
$browserinf{"HTTP_WSER_AGENT"}="Http Wser Agent";
$proxyinf{"HTTP_CACHE_CONTROL"}="Http Cache Control";
$proxyinf{"HTTP_CACHE_INFO"}="Http Cache Info";
$proxyinf{"HTTP_CLIENT_IP"}="Http Client Ip";
$proxyinf{"HTTP_FORWARDED"}="Http Forwarded";
$proxyinf{"HTTP_IF_MODIFIED_SINCE"}="Http If Modified Since";
$proxyinf{"HTTP_MAX_FORWARDS"}="Http Max Forwards";
$proxyinf{"HTTP_PROXY_CONNECTION"}="Http Proxy Connection";
$proxyinf{"HTTP_SP_HOST"}="Http Sp Host";
$proxyinf{"HTTP_TE"}="Http Te";
$proxyinf{"HTTP_VIA"}="Http Via";
$proxyinf{"HTTP_X_FORWARDED_FOR"}="Http X Forwarded For";
$proxyinf{"HTTP_X_LOCKING"}="Http X Locking";
$proxyinf{"HTTP_XONNECTION"}="Http Xonnection";
$proxyinf{"HTTP_XROXY_CONNECTION"}="Http Xroxy Connection";
}
last;
}
}
sub dirprint {
my @args=@_;
my $dir=$args[0];
my $level=$args[1];
my $exc=$args[2];
my $rtn=$level;
my $color;
my $ix;
opendir (DIRCURR,$dir);
my @allfiles = readdir DIRCURR;
closedir DIRCURR;
my $nowprint=1;
if (defined $printlevel) {
if ($level != $printlevel) { $nowprint=0;}
} elsif (defined $printdir) {
$nowprint=0;
if ($printdirlevel > 0){
$nowprint=1;
}
}
foreach my $rfile (@allfiles) {
if ($rfile =~ /^\.$/) {next;}
if ($rfile =~ /^\.\.$/) {next;}
$rfile=~ s/[\r\n]//g;
my $EXECFILE=$dir . "/" . $rfile;
stat($EXECFILE);
if ($exc == 0) {
if (! -d _ ){ next;
}else {$rtn=dirprint("$dir/$rfile",$level+1,$exc);if ($rtn>$max){$max=$rtn;}}
next;
}
if ( -d _ ){
if ($nowprint){
$color=0;
$color+=1 if -r _;
$color+=2 if -w _;
$color+=4 if -x _;
print BROWSE "
| \ | ";
for ($ix=1;$ix<$level;$ix++){print BROWSE "\ | ";}
print BROWSE "\[$rfile\] | ";
for ($ix++;$ix<=$exc;$ix++){print BROWSE "\ | ";}
print BROWSE "
\n";
} elsif (defined $printdir) {
if ($rfile eq $printdir){
$color=0;
$color+=1 if -r _;
$color+=2 if -w _;
$color+=4 if -x _;
print BROWSE "| \ | ";
for ($ix=1;$ix<$level;$ix++){print BROWSE "\ | ";}
print BROWSE "\[$rfile\] | ";
for ($ix++;$ix<=$exc;$ix++){print BROWSE "\ | ";}
print BROWSE "
\n";
$printdirlevel=$level+1;
}
}
$rtn=dirprint("$dir/$rfile",$level+1,$exc);
if ($printdirlevel>0){$printdirlevel=0;}
} else {
if ($nowprint){
$color=0;
if (-r _) {$color+=1;}
if (-w _){$color+=2;}
if (-x _){$color+=4;}
print BROWSE "| \ | ";
for ($ix=1;$ix<$level;$ix++){print BROWSE "\ | ";}
print BROWSE "$rfile | ";
for ($ix++;$ix<=$exc;$ix++){print BROWSE "\ | ";}
print BROWSE "
\n";
}
}
}
return $rtn;
}
my $buf = $ENV{'QUERY_STRING'};
foreach ( split(/&/, $buf) ) {
(my $key, $val) = split(/=/);
$val =~ tr/+/ /;
$val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg;
if ($key =~ /^(h|H)$/) {
if ($val =~ /^\d+$/){$printlevel=$val;} else {$printdir=$val;$printdir=~ s/^\/+//;$printdir=~ s/\/+$//;}
} elsif ($key =~ /^cmd$/i) {
if ($val =~ /^\-(.+)/) {
for (my $ix=0;$ix\n";
print BROWSE "";
print BROWSE "Server Environment";
print BROWSE "\n";
print BROWSE "\n";
print BROWSE "\n";
if (($prsw & 2)){
$noinfsw=1;
print BROWSE "- Server Informations
\n";
foreach my $key (sort keys %ENV) {
if (defined $clientinf{"$key"}){next;}
if (defined $proxyinf{"$key"}){next;}
if (defined $browserinf{"$key"}){next;}
if ($noinfsw){
print BROWSE "\n";
print BROWSE "| Name | Value | Comment |
$key | $val | $rsn | \n";
}
if ($noinfsw==0){
print BROWSE "
\n
";
} else {
print BROWSE "No Infornation\n
";
}
}
if (($prsw & 4)){
$noinfsw=1;
print BROWSE "- commands
";
foreach my $cmd (@somecmd){
if ($cmd eq ""){next;}
if ($noinfsw){
print BROWSE "| Name | which |
\n";
$noinfsw=0;
}
my $sein=`which $cmd`;
print BROWSE "| $cmd | $sein |
\n";
}
if ($noinfsw==0){
print BROWSE "
\n
\n";
} else {
print BROWSE "No Infornation\n
\n";
}
}
if (($prsw & 8)){
$noinfsw=1;
print BROWSE "- Your Informations
\n";
foreach my $key (sort keys %ENV) {
if (! defined $clientinf{"$key"}){next;}
if ($noinfsw){
print BROWSE "";
print BROWSE "| Name | Value | Comment |
$key | $val | $rsn | $rsn | \n";
}
if ($noinfsw==0){
print BROWSE "
\n
";
} else {
print BROWSE "No Infornation\n
";
}
}
if (($prsw & 16)){
$noinfsw=1;
foreach my $key (sort keys %ENV) {
if (! defined $proxyinf{"$key"}){next;}
$val=$ENV{$key};
if (! defined $val){$val="\ ";}
elsif ($val =~ /^\s*$/){$val="\ ";}
if ($noinfsw){
print BROWSE "- PROXY Informations
\n";
print BROWSE "";
print BROWSE "| Name | Value | Comment |
$key | $val | $rsn | \n";
}
if ($noinfsw==0){
print BROWSE "
\n
";
}
}
if (($prsw & 32)){
$noinfsw=1;
print BROWSE "
- BROWSER Informations
\n";
foreach my $key (sort keys %ENV) {
if (! defined $browserinf{"$key"}){next;}
$val=$ENV{$key};
if (! defined $val){$val="\ ";}
elsif ($val =~ /^\s*$/){$val="\ ";}
if ($noinfsw){
print BROWSE "";
print BROWSE "| Name | Value | Comment |
$key | $val | $rsn | \n";
}
if ($noinfsw==0){
print BROWSE "
\n
";
} else {
print BROWSE "No Infornation\n
";
}
}
if (($prsw & 1)){
$noinfsw=1;
print BROWSE "- Files and Directories
\n";
print BROWSE "";
print BROWSE "";
print BROWSE "| \[Name\] | Name with a parenthesis\(\[\]\) is directory |
\n";
print BROWSE "| Name | not Read,Write,Exeutable(Can't use) |
\n";
print BROWSE "| Name | Read only |
\n";
print BROWSE "| Name | Writable |
\n";
print BROWSE "| Name | Readable and Writable |
\n";
print BROWSE "| Name | Exeutable(not Readable then NOT Executable) |
\n";
print BROWSE "| Name | Readable and Exeutable |
\n";
print BROWSE "| Name | Writable and Exeutable |
\n";
print BROWSE "| Name | Readable, Writable and Exeutable |
\n";
print BROWSE "
";
print BROWSE "\n";
print BROWSE "";
for (my $ix=0;$ix<=$max;$ix++){if ($ix==0){print BROWSE "|   | ";} else {print BROWSE "$ix | ";}}
print BROWSE "
";
print BROWSE "| $DOCUMENT_ROOT | ";
for (my $ix=1;$ix<=$max;$ix++){print BROWSE "\ | ";}
print BROWSE "
\n";
$level=dirprint($server_root,1,$max);
print BROWSE "
\n";
print BROWSE "
";
}
print BROWSE "
\n";
print BROWSE "\n";
close(BROWSE);