2

我想用 Python 编写一个简单的 P2P RDP 客户端和服务器。我就是这样画出来的。

  1. 短时间截图
  2. 压缩它们并发送到服务器应用程序
  3. 从服务器应用程序获取键盘、鼠标事件。序列化它们并发送给客户端。客户端将反序列化它们并将使用 SendInput 调用来反映它们

我需要知道的是

  1. Python 中是否存在可用于简化作业的 rdp 库?
  2. 如何使用 Python 从服务器操作员获取键盘或鼠标事件?
  3. 事件序列化的最简单和最简单的方法是什么?
  4. 如何测量 Mouseevent 的相对 X,Y 坐标?
  5. 你能提供任何容易理解的例子吗?
  6. 和我听说的最后一个问题,如果两个平台都使用 Microsoft 衍生操作系统,那么在 .net 中执行此操作会更容易。是真的吗?

我的客户端应用程序将在 Windows XP、Vista、7 中运行,服务器应用程序将在 Windows/Linux 上运行,如果我遗漏了什么,请提及。

4

3 回答 3

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.pyto talk to .sock
  • 带有存根的 Web 服务(AJAXGET图像)(将命令转发到.sock
  • 控制 Web 客户端(任何浏览器,甚至lynx可以telnet做)

请不要向我索要文件! 使用来源,卢克!

心理健康警告!完整的画面是一大堆丑陋的、不干净的、令人头痛的面部手掌,产生了一些大部分不相关的随机放置的复杂脚本,名称错误和误导性,不干净的副本,未注释和未完成的半编辑,所有东西都硬编码到一台机器上,可能需要对未升级的软件包甚至更旧的东西进行一些未记录的本地 10 年前的调整。所以我不会把所有东西都分发出去。(即使这听起来很熟悉,不,我不是为微软工作。)

于 2011-08-07T20:38:12.550 回答
0

除了“in Python”之外,听起来你只是在重新发明另一个VNC。大多数现代衍生产品都基于开源的TightVNC。如果您能理解 VNC 代码 (C++) 和它使用的RFB 协议,您会发现所有问题都已得到解答。

VNC 客户端的这个python 实现可能对您也很有趣。但是,请注意该页面上的评论:

到底有什么好处呢?没有 ;-) 使用原始 VNC 查看器以获得更好的性能。

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

于 2011-03-21T23:00:52.023 回答
0

根据此GitHub 评论,您可以在 Python中使用libfreerdpvia 。ctypes

请参阅:GitHub 上的 FreeRDP 库

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

于 2018-01-07T06:12:22.263 回答