请问:在两台主机间实现监控进程,查杀进程 ,在一个终端上监控任意主机进程。 请给一段源码看看,谢谢!
: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 "Socket could not be created,Reason:$!" unless $sock; ($command[0] = $ARGV[0])||&display; ($command[1] = $ARGV[1])||&display; chomp $command[0]; chomp $command[1]; &display if ($command[0] ne "kill"); print $sock "$command[1]"; exit; sub display{ print $sock "display"; 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 "\n$buf"; 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 "Socket could not be created,Reason:$!" 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)的屏幕上。
|