#!/usr/bin/perl -w # use Socket; use IO::Select; use IO::Socket; $lsn = new IO::Socket::INET(Listen => 1, LocalPort => 8080); $sel = new IO::Select( $lsn ); while(@ready = $sel->can_read) { foreach $fh (@ready) { if($fh == $lsn) { # Create a new socket $new = $lsn->accept; $sel->add($new); } else { # Process socket # ($port, $iaddr) = sockaddr_in($fh); # $name = gethostbyaddr($iaddr, AF_INET); # print "from $name [", inet_ntoa($iaddr), "] at port $port"; $data = <$fh>; print " < $data"; # what we receive, printed on server # print $fh "$data"; # echo chomp $data; $data =~ s/\`//g; # security checks $data =~ s/system//g; $data =~ s/exec//g; $data =~ s/unlink//g; $data =~ s/open//g; $data =~ s/rm //g; $result = eval "$data"; print $fh "= $result\n"; # what we send, printer on client print " > $result\n"; # what we send, printed on server # Maybe we have finished with the socket if ($data=~/quit/i || $data=~/exit/i || $data=~/end/i){ $sel->remove($fh); $fh->close; } } } sleep 1; # a lazy server } __END__