远程获取其他主机信息,适于远程主机管理(实际应用时添加必要的验证、加密、端口过滤等内容)。
server1: srv1200read.pl zclient2200.pl
server45: srv2200read.pl
server1监听1200端口,server45监听2200端口
server1向server45的2200端口发送消息,server45处理后向server1的1200端口返回处理后内容。
#!/usr/bin/perl -w
##srv1200read.pl
use IO::Socket;
use IO::Select;
$socketread = new IO::Socket::INET (LocalHost => 'server45',
LocalPort => 1200,
Proto => 'tcp',
Listen => 5,
Reuse => 1,
);
$read_set = new IO::Select;
$read_set->add($socketread);
while (1) {
($new) = IO::Select->select($read_set, undef, undef, undef);
foreach $sock (@$new) {
if ($sock == $socketread) {
print "########################################## ";
while ($new_sock=$sock->accept()) {
while (defined ($buf=<$new_sock>)) {
#receive and control $buf
print $buf;
}
}
}
}
}
###########################################################################
#!/usr/bin/perl -w
##srv2200read.pl
use IO::Socket;
use IO::Select;
$socketread = new IO::Socket::INET (LocalHost => 'server1',
LocalPort => 2200,
Proto => 'tcp',
Listen => 5,
Reuse => 1,
);
);
$read_set = new IO::Select;
$read_set->add($socketread);
while (1) {
($new) = IO::Select->select($read_set, undef, undef, undef);
foreach $sock (@$new) {
if ($sock == $socketread) {
while ($new_sock=$sock->accept()) {
while (defined ($buf=<$new_sock>)) {
#receive and control $buf
print "RECEIVE COMMAND: ". $buf;
$sock1 = new IO::Socket::INET (PeerAddr => 'server45',
PeerPort => 1200,
Proto => 'tcp'
);
die "Socket could not be created. Reason: $! " unless $sock1;
$aa=`$buf`;
print $sock1 "$aa ";
$sock1->flush();
}
}
}
}
}
##################################################################################
#!/usr/bin/perl -w
#zclient2200.pl
use IO::Socket;
$sock = new IO::Socket::INET (PeerAddr => 'server1',
PeerPort => 2200,
Proto => 'tcp'
);
die "Socket could not be created. Reason: $! " unless $sock;
####send data to srv
while () {
print "[COMMAND]# ";
$_=<STDIN>;
chomp($_);
print $sock "$_ ";
$sock->flush();
print "OK! ";
}