P2P RDP与Python

时间:2011-03-21 17:13:37

标签: .net python rdp

我想用Python编写一个简单的P2P RDP客户端和服务器。 这就是我草绘它的方式。

  1. 以简短的时间间隔截取屏幕截图
  2. 压缩它们并发送到服务器应用程序
  3. 从服务器应用程序获取键盘,鼠标事件。序列化它们并发送给客户端。客户端将反序列化它们并将使用SendInput调用来反映它们
  4. 我需要知道的是

    1. Python中是否存在可以用来简化我的工作的rdp库?
    2. 如何使用Python从Server Operator获取键盘或鼠标事件?
    3. 什么是最容易和最简单的事件序列化方式?
    4. 如何测量Mouseevent的相对X,Y坐标?
    5. 你能提供一些易于理解的例子吗?
    6. 如果两个平台都在使用Microsoft衍生操作系统,那么我听说它的最后一个问题会更容易在.net中完成。这是真的吗?
    7. 我的客户端应用程序将在Windows XP,Vista,7中运行,服务器应用程序将在Windows / Linux上运行 还请提一下如果我遗失了什么。

3 个答案:

答案 0 :(得分:1)

前段时间我写了一些名为easyrfb的东西,它也基于python-vnc-viewer,但我从未发表过它。它并没有完全涵盖你的要求,但它非常相似。希望它可能有所帮助,现在可以在http://hydra.geht.net/easyrfb/

找到部分内容

请注意,那里的文件并不总是处于工作状态,因为文件直接链接到我的工作副本。但我不经常编辑。

现在也可以在GitHub上使用:https://github.com/hilbix/pyrfb/tree/easyrfb

这就是它在我身边做的事情:

  • 连接到本地运行的Xvnc(技术上任何VNC服务器都可以)
  • 将当前屏幕内容连续写入高度压缩的test.jpg
  • 使用AJAX并更新图像的某些网页抓取
  • 鼠标点击
  • 会将鼠标点击该图像转发到VNC服务器
  • 可以使用表单
  • 模拟键盘输入
  • 可以使用无损PNG屏幕截图
  • 有一个edit.html可以根据PNG截图(称为模板)进行模糊匹配
  • Shell脚本可以检查这些模板是否匹配或等待它们匹配。

内部通信是使用TCP,Unix-Sockets和一些文件完成的,因此不难改变它,因为每个组件都在不同的位置运行:

  • VNC服务器(要显示的屏幕)
  • rfbimg.py(执行VNC - >图片并提供控件.sock
  • shell脚本(如果需要,使用sendsock.py.sock交谈)
  • 包含存根的网络服务(AJAXGET图片)(将命令转发至.sock
  • 控制网络客户端(任何浏览器,甚至lynxtelnet都可以)

请不要向我索取文件!使用来源,Luke!

精神健康警告!完整的图片是一个又大又丑陋的不洁净的头发诱发面孔,造成一些大多数无关的随机放置的复杂脚本,错误和误导性的名称,不洁净的副本,没有注释和未完成的半编辑,一切硬编码到一台机器,可能需要一些无证的本地10年的调整到非升级包,甚至旧的东西。所以我不会发布一切。 (即使这听起来很熟悉,但是,我不是在为微软工作。)

答案 1 :(得分:0)

除了“在Python中”之外,听起来你只是在重新发明另一个VNC。大多数现代衍生品都基于TightVNC open source。如果您能理解VNC代码(C ++)及其使用的RFB protocol,您将找到所有问题的答案。

这个python implementation的VNC客户端也可能对您感兴趣。但请注意该页面上的评论:

  

有什么好处?没什么;-)使用   原始的VNC查看器更好   性能

也许您可以通过某种方式重用VNC技术来实现目标? (例如,为VNC C ++代码创建Python绑定和/或使用RFB协议,以便您可以与现有的VNC服务器/客户端进行互操作?)

答案 2 :(得分:0)

根据此GitHub comment,您可以在Python中通过libfreerdp使用ctypes

请参阅:FreeRDP library at GitHub

  

FreeRDP是一个免费的远程桌面协议库和客户http://www.freerdp.com/