我想用 Python 编写一个简单的 P2P RDP 客户端和服务器。 我就是这样画出来的。
- 短时间截屏
- 压缩它们并发送到服务器应用程序
- 从服务器应用程序获取键盘、鼠标事件。序列化它们并发送给客户端。客户端将反序列化它们并将使用 SendInput 调用来反射(reflect)它们
我需要知道的是
- 是否存在 Python 中的 rdp 库可以用来简化我的工作?
- 如何使用 Python 从服务器运算符(operator)那里获取键盘或鼠标事件?
- 什么是最简单的事件序列化方法?
- 如何测量 Mouseevent 的相对 X、Y 坐标?
- 您能提供任何易于理解的示例吗?
- 还有最后一个问题,我听说如果两个平台都使用 Microsoft 衍生操作系统,在 .net 中做起来会更容易。是真的吗?
我的客户端应用程序将在 Windows XP、Vista、7 中运行,而服务器应用程序将在 Windows/Linux 中运行 如果我遗漏了什么,请提及。
最佳答案
前段时间我写了一个叫做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
对话) - Web 服务(
AJAX
和GET
图像) stub (转发命令到.sock
) - 控制网络客户端(任何浏览器,甚至
lynx
或telnet
都可以)
请不要向我要文档!请使用来源,Luke!
心理健康警告! 完整的画面是一大堆丑陋的、不洁的、令人头痛的面部手掌,创建了一些大多不相关的随机放置的复杂脚本,这些脚本具有错误和误导性的名称、不干净的副本、未注释的和未完成的半编辑,所有内容都硬编码到一台机器上,可能需要对未升级的软件包或什至更旧的东西进行一些未记录的本地 10 年前的调整。所以我不会交出一切。 (即使这听起来很熟悉,不,我不是为 Microsoft 工作。)
关于.net - 使用 Python 的 P2P RDP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5381152/