论坛登陆 用户: 密码:
联系我们
设为首页
加入收藏
业界新闻 网络编程 程序开发 网页图象 聊天通讯 软件应用 网络安全 硬件学堂 教育频道 站长club
首页>>聊天通讯>>q q专栏>>文章正文

用qq管理你的系统^_^


 日期:2005-7-27 8:46:19     来源:易特网络技术   编辑:黑鹰  点击:
看过abel大哥的帖子--shell/web下发送msn message 很受启发
http://bbs.chinaunix.net/forum/24/050711/575520.html
是利用一个基于命令行的msn客户端实现的
在这里,换个角度,同样可以利用linux下命令行qq客户端 --- testqq来实现对系统的管理
管理员通过自己的qq与服务端的qq进行交流,服务器后台用testqq+expect+bash 就可以实现很多有趣的功能了

testqq下载地址:http://formalin14.org/blog/static.php?page=tq
还要有两个oicq号码,并互相加为好友(一个放在服务端,一个在管理员端)
关于testqq的使用方法在
http://formalin14.org 有说明,
其中在配置文件config.ini 中设置好挂在服务端的qq号,密码和是否隐身等信息

实现起来可以有两种考虑,
第一种是以shell脚本为主,即让shell脚本在系统后台监控,当满足一些条件时,调用expect脚本来控制testqq,向管理员发特定的消息,发完以后,服务端的qq就退出;
比如,1.sh脚本用于检测系统的登陆人数,当登陆人数大于0时,调用1.exp脚本,将who命令的结果发给管理员的qq

简单的举例:
代码:

#!/bin/bash
#flie_name 1.sh
if [ `who | wc -l` -gt 0 ];then
   ./1.exp   #同目录下的exp脚本
fi


代码:

#!/usr/bin/expect
#file_name 1.exp
set qqnum 165165984  #管理员端的qq号
set run /home/wwy/textqq/textqq.sh #textqq的执行文件
#-----------
spawn $run
sleep 1
expect "*"
sleep 3  #如果网速慢,可以加大这些sleep
expect "*"
sleep 3
expect "*"
sleep 3
expect "*"
sleep 5
#-----------
send "/msg $qqnum ready_at_[exec date +%d--%r]\r"
send "[exec who | xargs]\r" #who命令后用到了xargs,是因为textqq不支持换行的原因,在这里 "who | xargs" 可以换成其他脚本或命令,来实现更复杂的功能
expect "*"
expect eof


将1.sh放到计划任务里后,就可以等着来自服务端的消息了

管理员端qq的聊天纪录举例:

代码:

server 19:27:18
ready_at_07/24/05--19:27

server 19:27:18
root pts/0 jul 24 18:48 (cncln.online.ln.cn)




第二种考虑是以expect脚本为主,就是将qq一直挂在服务器后台,一旦满足某些条件,就执行shell脚本,因为expect能控制交互性
这样做就可以实现管理员向服务端qq发消息,消息的内容为shell命令,系统做出反应,并将执行结果以qq消息的形势回复给管理员

比如,2.sh脚本用于检查msg.log,这是textqq聊天纪录的存放文件,提取其中管理员最新说的话(即命令),执行并返回结果;

例如:

代码:

#!/bin/bash
#file_name 2.sh
msg_log=/home/wwy/textqq/msg.log #msg.log文件
file=/home/wwy/textqq/my_msg_log.txt #存放聊天纪录的文件
qqnum=165165984 #管理员端的qq号
cmd=`cat msg.log | grep "\[" | tee -a $file | grep $qqnum | tail -1  | awk -f] '{print $2}'`
#-----------------------
if [ ! "$cmd" ];then
   :
elif [ ! "`eval "$cmd" 2> /dev/null`" ];then
   echo 'sorry, your cmd is no display return.'
elif [ : ];then
   eval "$cmd" | xargs
fi
#-----------------------
> $msg_log #清空msg.log,被清空的内容事先保存在my_msg_log.txt 之中




同时,2.exp文件用于将qq挂在后台,每隔几秒检查一下2.sh是否有结果返回,如果有将结果发给管理员

代码:

#!/usr/bin/expect
set qqnum 165165984 #管理员端的qq号
set shell_script /home/wwy/textqq/2.sh #2.sh文件的位置
set run /home/wwy/textqq/textqq.sh
#-----------
spawn $run
sleep 1
expect "*"
sleep 3
expect "*"
sleep 3
expect "*"
sleep 3
expect "*"
sleep 5
#-----------
send "/msg $qqnum ready,waiting_your_cmd,at_[exec  date +%r--%d]\r"
expect "*"
sleep 1
while {1} {
   set r [exec $shell_script]
   if {$r!=""} {
       send "$r\r"
       expect "*"
   }
   sleep 3  #内隔3秒检查一次2.sh是否有返回结果
}
expect eof


将2.exp放到后台运行即可,等收到server的“ready,waiting_your_cmd...”这个消息后,就可以跟server“聊命令了” .

代码:

./2.exp &



聊天纪录举例:
代码:

server 20:06:27
ready,waiting_your_cmd,at_20:06--07/24/05

wwy 20:01:18
pwd

server 20:07:09
/home/wwy/textqq

wwy 20:01:36
ls

server 20:07:19
1.exp 1.sh 2.exp 2.sh classes config.ini err.log jre jre_u lib msg.log my_msg_log.txt readme.txt setenv.bat textqq.bat textqq.sh

wwy 20:01:54
uptime

server 20:07:39
20:07:39 up 6 days, 11:06, 1 user, load average: 0.00, 0.00, 0.00

wwy 20:02:06
touch tmp

server 20:07:59
sorry, your cmd is no display return.  

wwy 20:02:43
ls tmp

server 20:08:29
tmp

wwy 20:10:24
uname -a

server 20:16:10
linux reinnat 2.4.21-4.elsmp #1 smp fri oct 3 17:52:56 edt 2003 i686 i686 i386 gnu/linux

wwy 20:11:51
iptables -l -n

server 20:17:40
chain input (policy accept) target prot opt source destination drop all -- 0.0.0.0/0 0.0.0.0/0 drop tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:135:139 drop udp -- 0.0.0.0/0 0.0.0.0/0 udp dpts:135:139 drop tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:1433:1434 drop udp -- 0.0.0.0/0 0.0.0.0/0 udp dpts:1433:1434 chain forward (policy accept) target prot opt source destination drop tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:135:139 drop udp -- 0.0.0.0/0 0.0.0.0/0 udp dpts:135:139 drop tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:1433:1434 drop udp -- 0.0.0.0/0 0.0.0.0/0 udp dpts:1433:1434 drop icmp -- 0.0.0.0/0 0.0.0.0/0 chain output (policy accept) target prot opt source destination

wwy 20:17:56
sar 1 1 | sed -n '4p'

server 20:23:53
08:23:53 pm all 0.00 0.00 0.00 3.55 96.45


因为在下expect用的太差,而textqq本身也有很多局限性,所以有很多不完善的地方,比如只能显示单行和非交互式命令的结果,像more,top这样的命令使用起来会出问题,不过,如果不要回显,一般单行命令都会执行,如rm,iptables等...
关于安全方面,权限就是运行textqq时的权限,因为在脚本里有过滤,所以也不用担心别人可以控制服务端的qq,当然,自己的qq被盗了除外.

上一篇:强!用dos命令查qq好友ip地址
下一篇:没有了
[发送给好友] [打印本页] [关闭窗口] [返回顶部转载请注明来源:http://www.iyit.net
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 黑鹰 投稿作者: 易特网络技术
信息来源: 易特网络技术 录入时间: 2005-7-27 8:46:19
浏览次数: 投稿信箱: shtghy@163.com
设置首页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
copyrights ©2004-2005 iyit.net all rights reserved. 网站合作、广告联系qq:147007642、466949678
易特网络技术 点击这里给我发消息