`
kinganpo
  • 浏览: 51296 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

阅读更多
前阵子做了个远程监控的小软件(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
分享到:
评论
7 楼 ouchxp 2011-01-25  
kinganpo 写道
引用
怎么不用teamviewer啊.

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

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

推荐你用teamviewer,内网外网神马的都是浮云...
6 楼 hellostory 2011-01-24  
ouchxp 写道
怎么不用teamviewer啊.

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


确实,我看过有家日本公司的一个叫做供应链看板软件,原理好像也是利用邮箱作为中间传送数据。
5 楼 testu 2011-01-24  
楼主,你做的“远程监控客户端”程序,是否已经都实现了http://wenwen.soso.com/z/q251858126.htm中提到的7点功能?
如果都实现了,考虑开源吗?

因为我们计划4月份也要开始搞这么个监控的项目,想参考一下。
4 楼 nop 2011-01-24  
用飞信应该也还是可以吧,应用不复杂的话思路还是很多的哦
3 楼 kinganpo 2011-01-24  
引用
怎么不用teamviewer啊.

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

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

这样的东西早就做过了....用邮件发指令,没什么新鲜的...
1 楼 popoer 2011-01-23  
楼主你太有才了~~~
话说 有种叫pushmail的东东,不知道是否也是在循环的刷新呢

相关推荐

    利用javamail api实现的邮件发送类

    以上就是利用JavaMail API 实现邮件发送类的基本步骤和关键知识点。这个类提供了发送简单邮件和带附件的邮件,以及设置抄送和密送的功能,满足日常开发需求。在实际项目中,可以根据具体需求对这个类进行扩展和定制...

    Java用Socket实现EMAIL的实例.rar_ javamail_java socket _java socket ema

    本实例主要关注的是通过Java的Socket编程来实现电子邮件的发送,而非通常使用的JavaMail API。JavaMail API虽然更为便捷,但通过Socket编程可以深入理解网络通信的底层机制。 首先,我们来看一下Java中的Socket。...

    JavaMail邮箱验证实现

    本文将详细介绍如何使用JavaMail在JavaWeb应用中实现邮箱验证。 首先,你需要在项目中添加JavaMail的依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>com.sun.mail</groupId> ...

    java socket实现smtp发送邮件,支持SSL

    Java Socket 实现 SMTP 发送邮件是一项常见的编程任务,尤其在自动化通知、系统间通信或用户交互中非常有用。SMTP(Simple Mail Transfer Protocol)是互联网上用于传输电子邮件的标准协议,而Java Socket则是Java...

    利用JavaMail发送邮件示例

    JavaMail 是一个开源库,它允许Java开发者使用标准的SMTP(简单邮件传输协议)或ESMTP(扩展SMTP)协议发送邮件,同时也能通过IMAP(Internet消息访问协议)和POP3(邮局协议)接收邮件。这个示例将详细介绍如何在...

    利用JavaMail实现邮件的收取.doc

    【JavaMail实现邮件收取详解】 JavaMail 是一个用于处理电子邮件的开源库,它提供了发送和接收邮件的功能。本文将详细讲解如何使用JavaMail API来实现邮件的收取。 首先,我们需要了解一些基本配置。在示例代码中...

    Java web中javamail邮件发送实现案例.docx

    在Java Web开发中,使用JavaMail API可以实现邮件的发送和接收功能。JavaMail是一个开源库,它提供了标准的API来处理SMTP(简单邮件传输协议)和其他邮件协议,使得开发者能够在应用程序中方便地发送和接收电子邮件...

    利用javamail发送邮件

    JavaMail 是一个强大的开源库,用于在Java应用程序中发送和...通过阅读和理解代码,你可以学习如何在Java应用程序中利用JavaMail API发送邮件。记得在本地环境中配置正确的SMTP服务器信息,以确保邮件能够成功发送。

    使用jsp实现javaMail邮箱功能开发

    本项目旨在利用JSP和JavaMail API实现在Web应用中发送邮件的功能,主要涉及POP3协议。下面将详细阐述这个过程中的关键知识点。 1. JSP基础: JSP是Java平台上的服务器端脚本语言,它允许开发者在HTML页面中嵌入...

    javaMail 用java实现的邮箱验证,找回密码

    要使用JavaMail实现这些功能,你需要以下步骤: 1. 添加JavaMail依赖:首先,在你的项目中添加JavaMail的依赖库,通常是在Maven的pom.xml文件中引入相关依赖。 2. 配置邮件服务器:设置SMTP(Simple Mail Transfer...

    基于JaVaMail的Web邮件客户端的设计与实现

    - JavaMail集成:利用JavaMail API实现邮件的收发功能。 - 数据持久化:使用数据库存储用户信息、邮件数据等。 - 安全性考虑:加密传输、用户认证机制等。 #### 五、系统架构与关键技术 1. **MVC模式**:Model-...

    利用JavaMail for Android和MailSender实现发送邮件

    本篇文章将详细讲解如何利用这两个工具来实现邮件的发送。 首先,JavaMail for Android是JavaMail API的一个轻量级实现,专为Android平台设计。它提供了处理邮件协议(如SMTP、POP3、IMAP)的功能,而无需依赖Java ...

    JavaMail完全实现

    在Java应用程序中,通过JavaMail我们可以方便地实现SMTP(简单邮件传输协议)发送邮件、POP3(邮局协议)和IMAP(因特网消息访问协议)接收邮件等功能。在结合Spring框架时,JavaMail的使用变得更加灵活和高效。 在...

    在spring利用javamail,quartz定时发送邮件

    本文将详细探讨如何在Spring环境中,利用JavaMail和Quartz库实现定时发送邮件的功能。 #### JavaMail简介 JavaMail API是一个允许Java应用程序读取和发送邮件的工具包。它提供了与不同邮件协议(如SMTP、POP3和...

    基于javamail的电子邮件系统的设计与实现,一整套,工程,word,ppt,直接运行

    这个项目“基于javamail的电子邮件系统的设计与实现”显然涵盖了如何利用JavaMail库构建一个非Web的、基于Java客户端的邮件系统,特别是与腾讯邮件系统对接的部分。 在设计这样的系统时,开发者首先需要理解SMTP...

    简单javamail的实现(HelloWorld)

    这个“简单javamail的实现(HelloWorld)”的教程将引导我们通过创建一个基础的JavaMail应用,这通常被称为“HelloWorld”示例,因为它标志着我们对JavaMail API的初步理解和使用。 JavaMail API 提供了广泛的类和...

    利用JavaMail发邮件

    JavaMail是Java编程语言中用于发送和接收电子邮件的标准API,它提供了一套全面的接口,开发者可以使用这些接口来实现SMTP、POP3、IMAP等邮件协议。在本篇文章中,我们将深入探讨如何利用JavaMail API发送邮件,以及...

    javamail实现邮箱与邮箱发送邮件

    标签“java发送邮件”意味着此示例主要关注Java语言中发送邮件的功能,而“javamail邮箱发送”则表明我们利用JavaMail库来实现这一功能。这个过程涉及到Java网络编程和邮件协议的理解,如SMTP(简单邮件传输协议)和...

    用java socket实现smtp邮件发送,支持SSL

    在实际开发中,为了简化这些操作,我们可以利用JavaMail API,它提供了一个更高级别的接口来处理SMTP邮件发送,同时支持SSL/TLS。不过,直接使用Socket编程能让我们更好地理解邮件发送的底层工作原理。 在提供的...

    利用JavaMail发送邮件

    该程序通过JavaMail是实现邮件的发送,代码经过测试并成功,如果不能成功,请你在outlook下测试,看看你的设置是否正确。其它类包都包含在工程里面,并设置好路径了,你下载后,只要加载到Eclipse下面并修改JRE路径...

Global site tag (gtag.js) - Google Analytics