首页 > 学技术 > 技术网文 > Perl > 正文

[精华] 如何实现远程操作??


来源 chinaunix.net kuqin整理

请问:在两台主机间实现监控进程,查杀进程 ,在一个终端上监控任意主机进程。
请给一段源码看看,谢谢!

 :em13: 



 addwin 回复于:2002-02-24 11:45:52

用perl 的telnet模块,可以方便的对远程主机进行控制,
看一下Net:Telnet就可以了


 activeport 回复于:2002-02-25 10:53:51

随手写的,在SUNOS上进行初步测试,可能还会有些问题的............
ps:这个论坛可能会过滤一些符号,要用的话先调试一下........
先在远程机器上运行listen.pl 
在自己的机器上运行sender.pl得到远程机器的进程列表,sender.pl kill pid则终止进程。
<sender.pl>;
#
# by Locust 2002/in china
#            icq:46741881
#
#!/usr/bin/perl
my $ipaddr='211.94.33.133';
my $port='3333';
my $selfport='3334';
use IO::Socket;
$sock = new IO::Socket::INET (PeerAddr =>; $ipaddr,
                              PeerPort =>; $port,
                              Proto    =>; 'tcp',);
die &quot;Socket could not be created,Reason:$!&quot; unless $sock;
($command[0] = $ARGV[0])||&amp;display;
($command[1] = $ARGV[1])||&amp;display;
chomp $command[0];
chomp $command[1];
&amp;display if ($command[0] ne &quot;kill&quot;);
print $sock &quot;$command[1]&quot;;
exit;
sub display{
print $sock &quot;display&quot;;
close ($sock);
$resock = new IO::Socket::INET (LocalHost =>; '127.0.0.1',
                             LocalPort =>; $selfport,
                             Proto     =>; 'tcp',
 Listen    =>; 5,
 Reuse     =>; 1,);
while ($new_sock = $resock->;accept()) {
while (defined ($buf = <$new_sock>;)){
print &quot;\n$buf&quot;;
exit if ($buf);
}}};


<listen.pl>;
#
# by Locust 2002/in china
#            icq:46741881
#
#!/usr/bin/perl
use IO::Socket;
my $port=3333;
my $selfadr='127.0.0.1';
my $selfport=3334;
$sock = new IO::Socket::INET (LocalHost =>; '127.0.0.1',
                             LocalPort =>; $port,
                             Proto     =>; 'tcp',
 Listen    =>; 5,
 Reuse     =>; 1,);
die &quot;Socket could not be created,Reason:$!&quot; unless $sock;
while ($new_sock = $sock->;accept()) {
while (defined ($buf = <$new_sock>;)){
exit if ($buf eq 'exit'); 
if ($buf eq 'display') {
@display=`ps -f`;

$sendsock = new IO::Socket::INET (PeerAddr =>; $selfadr,
                              PeerPort =>; $selfport,
                              Proto    =>; 'tcp',);
#print @display;
  print $sendsock @display;
                              $buf=0;
}elsif ($buf){
@tmp=`kill -9 $buf`;
$buf=0;
}}}
exit;


 pike 回复于:2002-02-27 15:19:58

非常感谢!!!
我正进行测试,(的确有一些问题),我平时要监控四台sco前置机,
每台挂大约三十台终端,如能使用,就会很方便!!


 activeport 回复于:2002-02-27 20:10:36

faint.........这么多机器,好羡慕啊!其实用PERL来做这个应该是个好选择,说实话,我写上面的那段代码的时候一直不知道有什么用:),所以就写的简单,而且没有仔细的考虑和测试,如果你有了完善的代码或解决方案了,希望能通知我,一起提高:)


 ycxing 回复于:2002-03-01 13:55:35

good!


 wind0521 回复于:2002-03-02 17:41:58

这个程序不错呀!不过要自己改动一下呀!才能适合自己的需要呀


 activeport 回复于:2002-03-07 15:09:02

faint.............现在看看那段程序简直是垃圾,如果顶楼的还需要的话,我可以给你写段正式一点的。


 pike 回复于:2002-03-22 17:31:07

其实用sh的远程命令rcmd或rsh也可以实现,但我想用perl实现,perl真的很有意思!
你的程序有些问题,不过我现在刚调到郑州省行,这里的s80 没有perl,没办法调试。
我希望看到更好的源码,谢谢你!!pi.ke@371.net



 activeport 回复于:2002-03-22 20:25:24

呵呵,PERL是很有意思的,最近我也比较忙,忙着学C++,如果你需要远程杀进程的PERL代码的话,可以用MSN:unest@hotmail.com  找我,这样也许我能比较清楚你具体的要求。


 pike 回复于:2002-03-29 15:03:38

谢谢!我收到你的回复,要解决问题的话,还是要在服务端再建一个socket对话,和你上面的写法差不多。


 pike 回复于:2002-03-29 15:09:46

能简单说一下控制端的netcat吗?


 activeport 回复于:2002-03-29 20:33:28

netcat是个老工具了,你可以在GOOGLE里搜一下,有很多相关资料,在FANQIANG里也有。http://www.fanqiang.com/a5/b6/20010910/1500001268.html

你可以用他来对指定的IP的指定断口发数据包,比如用我的那个PERL脚本在10.10.10.1的2001断口进行监听,然后你可以用nc 10.10.10.1 2001这个命令进行连接,然后可以输入命令,那个脚本接受到命令后执行,并把命令执行后的结果返回到控制端(也就是NETCAT)的屏幕上。




原文链接:http://bbs.chinaunix.net/viewthread.php?tid=15884
转载请注明作者名及原文出处



收藏本页到: