perl_nc.pl
2024-10-15 10:58:42
#!/usr/bin/perl use strict;
use IO::Socket;
use IO::Select;
use Getopt::Std; my %option;getopts('lp:', %option);
# listen on local port if( defined $option{'l'} )
{
if( !defined $option{'p'} )
{
&Usage( );
exit( - );
}
my $port = $option{'p'};
my $listen = IO::Socket::INET->new(Proto => 'tcp',
LocalPort => $port,
Listen => ,
Reuse => ) or die "Listen on port $port error: $!n"; while( my $client_sock = $listen->accept() )
{
&ProcessData( $client_sock );
}
} # if has no -l argument, maybe want to connect to other host
if( @ARGV != )
{
&Usage( );
exit( - );
} my $client_sock = IO::Socket::INET->new(Proto => 'tcp',
PeerHost => $ARGV[],
PeerPort => $ARGV[] ) || die "Connect to $ARGV[0]:$ARGV[1] error:$!n";
&ProcessData( $client_sock ); sub ProcessData
{
my $client_sock = shift;
my $select = IO::Select->new( );
$select->add( *STDIN );
$select->add( $client_sock ); my $buffer;
while( )
{
if( ! $select->exists( $client_sock ) )
{
print "waiting connection....n";
last;
} my @ready = $select->can_read; for my $tmp_sock(@ready)
{
if( $tmp_sock eq *STDIN )
{
if( my $recv_len = sysread( *STDIN, $buffer, ) )
{
if( ! syswrite($client_sock, $buffer) )
{
$select->remove( $client_sock );
$select->remove( *STDIN );
close( $client_sock ); last;
}
}
else
{
$select->remove( $client_sock );
$select->remove( *STDIN );
close( $client_sock ); last;
}
} elsif( $tmp_sock eq $client_sock )
{
if( my $recv_len = sysread( $client_sock, $buffer, * ) )
{
if( ! syswrite( *STDOUT, $buffer) )
{
$select->remove( $client_sock );
$select->remove( *STDIN ); close( $client_sock ); last;
}
}
else
{
print "socket disconnected.n";
$select->remove( $client_sock );
$select->remove( *STDIN );
close( $client_sock ); last;
}
}
}
}
} sub Usage
{
print "simple nc.pl, code by wustyunshu@hotmail.comn";
print "this script don't support -e cmd.exe, ^_^n";
print "Usage:n";
print "t -l -p 99n";
print "t 192.168.0.1 80n";
}
最新文章
- iOS开发——高级篇——通讯录
- APP开发:一个APP开发需要哪些技术人员?
- JDBC的应用实例
- 比较X与Y的大小,绝对精准!!!!!!
- PPPoE Server Under Ubuntu/Debian
- [转载]为什么使用%lf读取double型的值,而用%f进行显示?
- UnderScore.jsAPI记录
- cordova的常用命令
- 浅谈final关键字的用法
- 2014年5月16至24日,杨学明老师为深圳创维RGB事业部提供两天的《软件测试管理》内训服务!
- 在git多分支repo仓库中彻底清除大文件
- HDU 5552 Bus Routes(NTT+分治)
- Apache web服务器(LAMP架构)
- Java高并发编程(四)
- 【AUC】二分类模型的评价指标ROC Curve
- 使用4K显示器遇到的坑
- 编写DBCP连接池
- bzoj 4671 异或图——容斥+斯特林反演+线性基
- 基于Ubuntu搭建Linux路由器
- css垂直居中 转