这个机器有多古老?4.6-RELEASE FreeBSD,没有gcc,没有make,连系统都乱七八糟的,port都不好使,pkg_add -r安装包都会有问题,真是无语了,还好有安装了一个Perl 5.8.8。修理Port花了半天时间,硬是没搞好。想想也不划算,把紧急要用的一些小工具花一会儿功夫自己做一个出来算了,于是有了这个简单的Perl 版NC,不过我没支持-e参数,用不着。
11. #!/usr/bin/perl23. use strict;34. use IO::Socket;45. use IO::Select;56. use Getopt::Std;68. my %option;79. getopts('lp:', %option);811. # listen on local port912. if( defined $option{'l'} )1013. {1114. if( !defined $option{'p'} )1215. {1316. &Usage( );1417. exit( -1 );1518. }87 collapsed lines
1620. my $port = $option{'p'};1721. my $listen = IO::Socket::INET->new(Proto => 'tcp',1822. LocalPort => $port,1923. Listen => 1,2024. Reuse => 1) or die "Listen on port $port error: $!n";2126. while( my $client_sock = $listen->accept() )2227. {2328. &ProcessData( $client_sock );2429. }2530. }2632. # if has no -l argument, maybe want to connect to other host2733. if( @ARGV != 2 )2834. {2935. &Usage( );3036. exit( -1 );3137. }3239. my $client_sock = IO::Socket::INET->new(Proto => 'tcp', PeerHost => $ARGV[0], PeerPort => $ARGV[1] ) || die "Connect to $ARGV[0]:$ARGV[1] error:$!n";3340. &ProcessData( $client_sock );3442. sub ProcessData3543. {3644. my $client_sock = shift;3746. my $select = IO::Select->new( );3848. $select->add( *STDIN );3949. $select->add( $client_sock );4051. my $buffer;4152. while( 1 )4253. {4354. if( ! $select->exists( $client_sock ) )4455. {4556. print "waiting connection....n";4657. last;4758. }4860. my @ready = $select->can_read;4962. for my $tmp_sock(@ready)5063. {5164. if( $tmp_sock eq *STDIN )5265. {5366. if( my $recv_len = sysread( *STDIN, $buffer, 1024 ) )5467. {5568. if( ! syswrite($client_sock, $buffer) )5669. {5770. $select->remove( $client_sock );5871. $select->remove( *STDIN );5972. close( $client_sock );6074. last;6175. }6276. }6377. else6478. {6579. $select->remove( $client_sock );6680. $select->remove( *STDIN );6781. close( $client_sock );6883. last;6984. }7085. }7187. elsif( $tmp_sock eq $client_sock )7288. {7389. if( my $recv_len = sysread( $client_sock, $buffer, 1024*5 ) )7490. {7591. if( ! syswrite( *STDOUT, $buffer) )7692. {7793. $select->remove( $client_sock );7894. $select->remove( *STDIN );7995. close( $client_sock );8097. last;8198. }8299. }83100. else84101. {85102. print "socket disconnected.n";86103. $select->remove( $client_sock );87104. $select->remove( *STDIN );88105. close( $client_sock );89107. last;90108. }91109. }92110. }93111. }94112. }95114. sub Usage96115. {97116. print "simple nc.pl, code by wustyunshu@hotmail.comn";98117. print "this script don't support -e cmd.exe, ^_^n";99118. print "Usage:n";100119. print "t -l -p 99n";101120. print "t 192.168.0.1 80n";102121. }
Author:云舒