#!/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";
}

最新文章

  1. iOS开发——高级篇——通讯录
  2. APP开发:一个APP开发需要哪些技术人员?
  3. JDBC的应用实例
  4. 比较X与Y的大小,绝对精准!!!!!!
  5. PPPoE Server Under Ubuntu/Debian
  6. [转载]为什么使用%lf读取double型的值,而用%f进行显示?
  7. UnderScore.jsAPI记录
  8. cordova的常用命令
  9. 浅谈final关键字的用法
  10. 2014年5月16至24日,杨学明老师为深圳创维RGB事业部提供两天的《软件测试管理》内训服务!
  11. 在git多分支repo仓库中彻底清除大文件
  12. HDU 5552 Bus Routes(NTT+分治)
  13. Apache web服务器(LAMP架构)
  14. Java高并发编程(四)
  15. 【AUC】二分类模型的评价指标ROC Curve
  16. 使用4K显示器遇到的坑
  17. 编写DBCP连接池
  18. bzoj 4671 异或图——容斥+斯特林反演+线性基
  19. 基于Ubuntu搭建Linux路由器
  20. css垂直居中 转

热门文章

  1. BZOJ4735 你的生命已如风中残烛(组合数学)
  2. CentOS 挂载(U盘NTFS格式,新硬盘,增加交换分区,扩展根分区等)
  3. [洛谷P2774]方格取数问题
  4. Android Appliction 使用解析
  5. apply的理解和数组降维
  6. spring 整合 redis 单机版
  7. Parcelable序列化对象
  8. C++ 什么是多态
  9. Getting Private/Public IP address of EC2 instance using AWS-cli [closed]
  10. css常见水平居中