List of telnet.cgi

Thu Apr 25 08:53:58 2024

戻る

TEXTAREA で表示(カット&ペーストむき)

#!/usr/local/bin/perl5
#
# telnet.cgi
#
# 1997/08/18 Ver.0.00
# 1997/08/19 Ver.0.01
# 1997/09/05 Ver.0.02
# 1997/09/17 Ver.0.03   アンダーラインの処理を追加
# 1997/11/11 Ver.0.04   PATH の設定
# 1998/01/23 Ver.0.05   $ownname の自動化
# 1998/01/30 Ver.0.06   PATH の見直しなど
# 1998/03/03 Ver.0.07   多重打ち、リストマークの処理など
#    感謝! yav さん(http://www2s.biglobe.ne.jp/~yav/ )
# 1998/04/06 Ver.0.08   pwd から cwd へ, cd の入力の解釈をちょっと改良
#                       Hi-HO, RIMNET での動作を確認
#
# (c) 1997,1998 がま 
# e-mail addr : gama@mvg.biglobe.ne.jp
# 
# usage:
# ex. 
#       telnet.cgi?date
#
# cgi 自身の名前 -------------------------------------------------------
$ownname="http://$ENV{'SERVER_NAME'}$ENV{'SCRIPT_NAME'}";

# PATH を設定する ------------------------------------------------------
$ENV{'PATH'}    =  '/bin'
                . ':/usr/bin'
                . ':/usr/ucb'
                . ':/etc'
                . ':/usr/etc'
                . ':/usr/lib'
                . ':/usr/local/bin'
                . ':/usr/local/X11R6/bin'
                . ':/usr/local/bin/mh'
                . ':/usr/local/lib'
                . ':/usr/local/lib/mh'
                . ':/usr/local/sbin'
                . ':/usr/local/libexec'
                . ':/usr/local/canna/bin'
                ;

# ----------------------------------------------------------------------
($dir,$cmd)=split('&',$ENV{'QUERY_STRING'});    # & で分離 dir=????&cmd=

$dir =~ s/dir=//;
$dir =~ s/%(..)/pack('c',hex($1))/ge;

$cmd =~ s/cmd=//;
$cmd =~ s/\+/ /g;
$cmd =~ s/%(..)/pack('c',hex($1))/ge;

# ----------------------------------------------------------------------
$|=1;

print "Content-type: text/html\n\n";
print '<HTML><BODY>';
print "<PRE>\n";

# ----------------------------------------------------------------------
chdir("$dir");
$wd=&pwd;
print "Curr Dir:$wd\n";

# ----------------------------------------------------------------------

$cmdpr =        $cmd;
$cmdpr =~       s/&/&amp;/g;
$cmdpr =~       s/</&lt;/g;
$cmdpr =~       s/>/&gt;/g;
print "\n<B>&gt;$cmdpr</B>\n";

# ----------------------------------------------------------------------
if ($cmd =~ /^cd(\s)*/ ) {                      # cd は、内部で処理する。
        unless (chdir($')) {
                print "cd $':not success.\n";
        }
        $dir=&pwd;
        print "Curr Dir:$dir\n";
} else {
        open(PROC,"$cmd 2>&1 |");               # 実行

        while (<PROC>) {                        # 結果を読み出す

                s/</\001/g;                     # 
                s/>/\002/g;                     # 

                s/(.)(\x08\1)+/<B>$1<\/B>/g;    # 多重打ち       : . 08h(BS) .
                s/_\x08(.)/<U>$1<\/U>/g;        # アンダーライン : 5fh(_) 08h(BS)
                s/o\x08\+/<S>X<\/S>/g;          # リストマーク   : 35h(o) 08h(BS) 2bh(+)

                s/<\/(.)><\1>//g;               # </TAG><TAG> を削除

                s/&/&amp;/g;                    # 
                s/\001/&lt;/g;                  # 
                s/\002/&gt;/g;                  # 

                print $_;
        }
        close(PROC);
}
# ----------------------------------------------------------------------
print "</PRE>\n";

print '<HR>';

print '<FORM ACTION="' . $ownname . '" METHOD="GET">';
print '<INPUT TYPE="hidden" NAME="dir" VALUE="' . $dir . '">';
print '<INPUT TYPE="text" NAME="cmd" SIZE=80 VALUE="' . $cmd . '">';
print '<INPUT TYPE="submit" VALUE="Send">';
print '</FORM>';
print '</BODY></HTML>';
exit;
# ----------------------------------------------------------------------
sub pwd {
         use Cwd;
         $wd = Cwd::getcwd();
         unless ($wd) {
            $wd='/';
         }
         return $wd;
}

戻る