论坛首页 Java企业应用论坛

利用javamail代替socket实现远程控制

浏览 4820 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-01-22   最后修改:2011-02-18
前阵子做了个远程监控的小软件(http://wenwen.soso.com/z/q251858126.htm)遇到了难题,就是我所在的局域网外网IP是动态的,从而无法用Socket连接外面的客户端了。昨晚无意中翻出了半年前用JavaMail写的邮件收发管理客户端,突然想到了似乎可以用邮箱服务器“代理”。于是兴奋得一夜没合眼,终于尝试着实现了这个想法。根本核心是完全用javamail收发邮件替代了socket通讯。
基本思路是:
  • ①首先实现邮件收发的功能
  • ②其次根据服务器对客户端的控制要求在客户端封装对应的方法
  • 比如“截屏”是用Robot类的createScreenCapture(...)方法实现的。
    还有一些调用外部命令如“CMD”之类的等等
  • ③这些控制方法如何根据收到的邮件来调用了?这就得定义预先一套规则来
  • 截取邮件中的文本内容按照规则来调用对应的方法
    比如“{命令:tasklist > c:/task.txt}”指的是将客户端当前系统的进程列表打印输出保存到C盘根目录下的task.txt文件中。一对  “{...}”代表一条指令,“命令”代表该指令是CMD命令。
  • ④为了客户端实时地被服务器监控,就得另外启动一个线程死循环不断地获取邮件列表,发现服务器发过来的新邮件就自动读取按照规则来处理。
  • ⑤最好为每个动作都分配一个线程来控制,因为不止一条指令,如果单线程的话就得一个个排队等待执行了。
  • ⑥javamail和socket的利与弊
  • 对于本软件而言,用javamail的好处是不需要实现服务器端,只要可以上网收发邮件就行,也可以用手机根据邮件来控制客户端电脑。坏处是实时性差,因为有些邮箱服务器的设置限制了邮件列表的刷新率。今天我共注册了3个163邮箱,两个报废了,因为我把获取邮件列表的刷新率设置为最大值既没有sleep线程等待的方法。导致163邮箱服务器把这两个邮箱的POP给限制了,只能发邮件而不能接收。用socket响应迅速,可以实现远程协助,这是javamail而不能做到的。


下面是几张操作过程中的截图:


图1、向客户端发送邮件指令


图2、客户端接收到指令并相应


图3、客户端向服务器的反馈附件

下面介绍几条指令:
{错误:Ox4fadde9c"指令引用的"Oxffffffff"内存.该内存不能为"read"}在客户端弹出错误对话框“:”后面的是内容,这是模仿windows弹出的内存错误对话框。像此类对话框还有警告、消息等,如是消息则格式为{消息:消息内容}
{命令:md c:/temp}cmd命令创建目录temp
{命令:attrib +h c:/temp}隐藏目录temp
{命令:dir > c:/temp/dir.txt}将当前目录下的子目录和文件列表信息输出到dir.txt中
{命令:netstat -an > c:/temp/port.txt}将客户端系统端口信息写入到port.txt
{命令:taskkill /im QQ.exe /T /F }结束QQ进程
{截图:c:/temp/temp.png}截屏保存为temp.png
{附件:c:/temp/dir.txt;c:/temp/port.txt;c:/temp/temp.png}将这些文件作为附件发往服务器
{命令:rd /q /s c:\temp}删除目录temp

每条指令以“{”开始,并以“}”结束
每条指令的第一个“:”前面是指令的类型

测试的时候闹出了笑话,截取这几张图的时候,狂按十几下QQ截图快捷键竟然没反应。原来是QQ进程已经被干掉了,折腾了好久才发现的,狂汗-_-|||

最后用手机邮箱向我的电脑客户端邮箱发送了一条指令{命令:shutdown -s},结果测试通过了电脑关闭了。

主要知识点:javamail的运用,cmd常见命令等

扩充:增加一个服务器端,客户端也加些东西即客户端程序“注册”随系统启动,启动后自动向服务器邮箱发送上线通知提醒服务器。服务器这边随时监听,收到通知语音提示。

至此花了一天一夜没合眼,总算圆满的完成了,兴奋中……泡杯咖啡,VS杀人去……
  • 大小: 18.8 KB
  • 大小: 16 KB
  • 大小: 6 KB
   发表时间:2011-01-23  
楼主你太有才了~~~
话说 有种叫pushmail的东东,不知道是否也是在循环的刷新呢
0 请登录后投票
   发表时间:2011-01-24  
怎么不用teamviewer啊.

这样的东西早就做过了....用邮件发指令,没什么新鲜的...
0 请登录后投票
   发表时间:2011-01-24  
引用
怎么不用teamviewer啊.

这样的东西早就做过了....用邮件发指令,没什么新鲜的...

因为所在的网络是局域网且外网IP是动态的无法用socket实现,后来突然想到用javamail可以处理。这是不是什么新鲜的,我也不是要搞什么软件要达到什么目的,只是用自己学到的东西自娱自乐而已。。。
0 请登录后投票
   发表时间:2011-01-24  
用飞信应该也还是可以吧,应用不复杂的话思路还是很多的哦
0 请登录后投票
   发表时间:2011-01-24  
楼主,你做的“远程监控客户端”程序,是否已经都实现了http://wenwen.soso.com/z/q251858126.htm中提到的7点功能?
如果都实现了,考虑开源吗?

因为我们计划4月份也要开始搞这么个监控的项目,想参考一下。
0 请登录后投票
   发表时间:2011-01-24  
ouchxp 写道
怎么不用teamviewer啊.

这样的东西早就做过了....用邮件发指令,没什么新鲜的...


确实,我看过有家日本公司的一个叫做供应链看板软件,原理好像也是利用邮箱作为中间传送数据。
0 请登录后投票
   发表时间:2011-01-25  
kinganpo 写道
引用
怎么不用teamviewer啊.

这样的东西早就做过了....用邮件发指令,没什么新鲜的...

因为所在的网络是局域网且外网IP是动态的无法用socket实现,后来突然想到用javamail可以处理。这是不是什么新鲜的,我也不是要搞什么软件要达到什么目的,只是用自己学到的东西自娱自乐而已。。。

推荐你用teamviewer,内网外网神马的都是浮云...
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics