CGI Directory Listing

Directory Listing

#!perl

@SI=('','k','M','G','T','P','E');

$dirfile='Header.html';
$routercgi='cgi-bin/dir.pl';

$noshow='"."..".htaccess".htpasswd"HEADER.html"README.html"FOOTER.html"HEADER.shtml"README.shtml"FOOTER.shtml"cgi-bin".exe".cgi".pl"';

print "Content-Type: text/html\n\n";

if (length($ENV{'PATH_INFO'})>0)
{
        $path=substr($ENV{'PATH_INFO'},0,(length($ENV{'PATH_INFO'})-length($dirfile)));
}
else
{
        $path="/files/";
}

if ($path!~/:/)
{
        $path=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; # URL Enc
        opendir(aDIR,"$ENV{'DOCUMENT_ROOT'}$path");@flList=sort readdir(aDIR);closedir(aDIR);

        $mx=0;foreach (@flList){if (length>$mx){$mx=length;}}$mx;

        print "<body bgcolor=white><TABLE align=center bgColor=white border=0 cellPadding=2 cellSpacing=1 width=100%><pre>";
        if ($path ne '/')
        {
                print "<li><a href=\"$path../\"> <b>Parent Directory</b></a></li>\n";
        }
        foreach $fl (@flList)
        {
                if ($noshow !~ /"$fl"/i)
                {
                        @flStat=stat("$ENV{'DOCUMENT_ROOT'}$path$fl");
                        if ($flStat[2] eq "16895" && $flStat[7] eq "0") # MODE & SIZE = folder
                        {
                                $fladdr=$fl;
                                $fladdr=~s/([^a-zA-Z0-9_\-.\~])/uc sprintf("%%%02x",ord($1))/eg;
                                print "<TR><TD bgColor=#f0f0f0><FONT face=Verdana size=2><IMG SRC=http://192.168.196.128/images/folder.gif align=left><a href=\"$path$fladdr/\"><b>$fl/</b></a>\n"
                        }
                        else
                        {
                                push (@flList2,"$fl\t$flStat[7]");
                        }
                }
        }
        print "<TABLE align=center bgColor=white border=0 cellPadding=2 cellSpacing=1 width=100%>";
        foreach $fl (@flList2)
        {
                ($fl,$sz)=split(/\t/,$fl);
                $fladdr=$fl;
                $fladdr=~s/([^a-zA-Z0-9_\-.\~])/uc sprintf("%%%02x",ord($1))/eg;
                print "<TR><TD bgColor=#f0f0f0><FONT face=Verdana size=2><IMG SRC=http://192.168.196.128/images/file.gif align=left><a href=\"$path$fladdr\">$fl</a><TD width=10% bgcolor=#f0f0f0><FONT face=Verdana size=2>";
                print ' ' x int($mx - length($fl));
                print &txtbyte($sz);print "</TD></TR>\n";
        }
        print "</ul></pre></TR></TD></TABLE><P><center><FONT face=Verdana size=1>Copyright <B>192.168.196.128</B> Directory Listing Script</center>";
}
exit;

sub txtbyte{
local($_)=@_;local $mm=0;
while ($_/1024>1){$_=$_/1024;$mm++;}
if ($mm>0){
        ($n,$_)=split(/\./);if (length>2){while(length>2){chop;}}else{while (length($_)<2){$_="$_ ";}}$n=sprintf("%4d",$n);return "$n.$_ $SI[$mm]\B"
}
else{$_=sprintf("%4d",$_);return "$_ <i><FONT size=1>Bytes</i>";}
}