#!/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 "
  1. 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 "\n"; } if ($noinfsw==0){ print BROWSE "
    NameValueComment$key $val$rsn
    \n

  2. "; } else { print BROWSE "No Infornation\n
    "; } } if (($prsw & 4)){ $noinfsw=1; print BROWSE "
  3. commands
    "; foreach my $cmd (@somecmd){ if ($cmd eq ""){next;} if ($noinfsw){ print BROWSE "\n"; $noinfsw=0; } my $sein=`which $cmd`; print BROWSE "\n"; } if ($noinfsw==0){ print BROWSE "
    Namewhich
    $cmd $sein
    \n

  4. \n"; } else { print BROWSE "No Infornation\n
    \n"; } } if (($prsw & 8)){ $noinfsw=1; print BROWSE "
  5. Your Informations
    \n"; foreach my $key (sort keys %ENV) { if (! defined $clientinf{"$key"}){next;} if ($noinfsw){ print BROWSE ""; print BROWSE "\n"; } if ($noinfsw==0){ print BROWSE "
    NameValueComment$key $val$rsn$rsn
    \n

  6. "; } 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 "
  7. PROXY Informations
    \n"; print BROWSE ""; print BROWSE "\n"; } if ($noinfsw==0){ print BROWSE "
    NameValueComment$key $val$rsn
    \n

  8. "; } } if (($prsw & 32)){ $noinfsw=1; print BROWSE "
  9. 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 "\n"; } if ($noinfsw==0){ print BROWSE "
    NameValueComment$key $val$rsn
    \n

  10. "; } else { print BROWSE "No Infornation\n
    "; } } if (($prsw & 1)){ $noinfsw=1; print BROWSE "
  11. Files and Directories
  12. \n"; print BROWSE "
    "; print BROWSE ""; print BROWSE "\n"; print BROWSE "\n"; print BROWSE "\n"; print BROWSE "\n"; print BROWSE "\n"; print BROWSE "\n"; print BROWSE "\n"; print BROWSE "\n"; print BROWSE "\n"; print BROWSE "
    \[Name\]    Name with a parenthesis\(\[\]\) is directory
    Name    not Read,Write,Exeutable(Can't use)
    Name    Read only
    Name    Writable
    Name    Readable and Writable
    Name    Exeutable(not Readable then NOT Executable)
    Name    Readable and Exeutable
    Name    Writable and Exeutable
    Name    Readable, Writable and Exeutable
    "; print BROWSE "\n"; print BROWSE ""; for (my $ix=0;$ix<=$max;$ix++){if ($ix==0){print BROWSE "";} else {print BROWSE "";}} print BROWSE ""; print BROWSE ""; for (my $ix=1;$ix<=$max;$ix++){print BROWSE "";} print BROWSE "\n"; $level=dirprint($server_root,1,$max); print BROWSE "
     $ix
    $DOCUMENT_ROOT
    \n"; print BROWSE "
    "; } print BROWSE "
\n"; print BROWSE "\n"; close(BROWSE);