基于QQ远程协助的远程桌面实现

需求:

实验室/办公室一台电脑,寝室一台电脑,很多资料都是不便同步的,比如公司保密政策等。但是又需要随时可操作或者查看这些资料。

最好的办法是远程桌面。思杰有相应的产品,听在里面工作的同学说,可以免费试用一个月。但是一个月显然不够。我是想一直用的。


解决方案:

1、如果在同一个局域网,有很多远程控制类软件可以使用,包括一些比较有名的开源软件,如 tightvnc  等。这类软件最好不要乱下,万一有后门什么的,自己的私人信息泄露不说,公司的机密被泄露了,可就惨了。我需要跨网控制,所以直接用这个软件貌似不行。

2、自己动手写一个。不是有开源的么,自己改改,中间加上一个服务器中转一下。不过这个首先要看懂源码,知道它的协议细节。有这个功夫基本可以自己实现了。

涉及到的技术:

服务端:窗口抓屏,然后把截取的帧发送给中转服务器,并从服务器接受键盘和鼠标事件,然后在本地模拟这些事件。

中转服务器:作为中转站,为服务端和客户端跨网段互相通信提供服务。

客户端:接收中转服务器发来的帧,在本地显示。然后监听客户端键盘和鼠标事件,并把这些事件以一定的格式通过中转服务器发给服务端。

用python实现上面的单个功能,应该不难。但是考虑到不能延迟太严重,最好是用UDP,用UDP的问题是,一帧怎么也是几十或者上百KB,不能一次发送。那么就需要自己定义数据包的格式,编号什么的,如果出现丢失、乱序怎么处理。感觉不简单。一个月的业余时间不一定能搞定。

3、借助QQ远程协助。

QQ远程协助已经完成了最复杂的部分。我需要做的仅仅是在需要的时候,让服务端自动发起远程协助即可。


目前在实习,没有太多时间花这上面,综合考虑,用方案3能够快速实现。工具当然是python。


主要思路:

1、服务端:每个一段时间(比如10s)向中转服务器发送hello,告诉对方自己的存在。

中转服务器回送一个消息,可以是hello,也可以是cmd命令。如果是cmd命令,则启动QQ的远程协助。

从网上查询看到,使用hook启动QQ远程协助比较困难,想想也是,3Q大战后,腾讯对其核心产品的安全性肯定提高了很多。

不过我可以使用程序模拟鼠标点击远程协助按钮。这样还是很简单的。使用win32库,实现起来不难。


2、中转服务器:

主要就是转发消息。开2个线程,一个为客户端服务:接受客户端发来的请求,并回送相应消息;一个为服务端服务:如果客户端发来的消息合法的话就对相应的服务端发送cmd命令,使服务端启动QQ远程协助。


3、客户端:

用户输入命令(密码、服务端名称等其他信息),然后发给中转服务器。

然后就是等待自己的QQ发来的远程协助申请。


关于中转服务器:必须是具有public IP的机器,可以在网上申请一个。比如xx培训机构就对外开放Linux账号申请,我就去申请了一个。虽然不能保证24x7h的服务(每隔10多天都会不定期不定时重启机器),但是对我来说够用了。也可以去申请Amazon的虚拟服务器,免费用一年,也不错,想必国内的x巴巴好的多。



经过几天晚上的测试,基本没什么问题了。

程序源码打包地址:点击这里。




你可能感兴趣的:(network,Python,My,Pencil)