{"id":13526788,"url":"https://github.com/vprix/vncproxy","last_synced_at":"2025-04-01T08:30:20.418Z","repository":{"id":37295611,"uuid":"498223763","full_name":"vprix/vncproxy","owner":"vprix","description":"This is a VNC proxy program, fully resolved the RFB protocol, support VNC proxy, record playback video, record operations as a log file, and support log file playback.","archived":false,"fork":false,"pushed_at":"2023-07-18T11:49:32.000Z","size":1231,"stargazers_count":223,"open_issues_count":5,"forks_count":37,"subscribers_count":6,"default_branch":"main","last_synced_at":"2024-11-02T11:34:55.625Z","etag":null,"topics":["rfb","vnc","vnc-proxy","vncproxy"],"latest_commit_sha":null,"homepage":"http://vncproxy.vprix.com/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vprix.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"security/security_none.go","support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2022-05-31T07:03:56.000Z","updated_at":"2024-09-25T01:09:26.000Z","dependencies_parsed_at":"2024-01-17T04:51:57.948Z","dependency_job_id":null,"html_url":"https://github.com/vprix/vncproxy","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vprix%2Fvncproxy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vprix%2Fvncproxy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vprix%2Fvncproxy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vprix%2Fvncproxy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vprix","download_url":"https://codeload.github.com/vprix/vncproxy/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246607039,"owners_count":20804508,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["rfb","vnc","vnc-proxy","vncproxy"],"created_at":"2024-08-01T06:01:34.903Z","updated_at":"2025-04-01T08:30:19.996Z","avatar_url":"https://github.com/vprix.png","language":"Go","funding_links":[],"categories":["Go","Libraries and Plugins","运维管理平台"],"sub_categories":[],"readme":"# VncProxy [![GitHub release](https://img.shields.io/github/v/release/vprix/vncproxy.svg?style=flat-square)](https://github.com/vprix/vncproxy/releases) [![report card](https://goreportcard.com/badge/github.com/vprix/vncproxy?style=flat-square)](http://goreportcard.com/report/vprix/vncproxy) [![github issues](https://img.shields.io/github/issues/vprix/vncproxy.svg?style=flat-square)](https://github.com/vprix/vncproxy/issues?q=is%3Aopen+is%3Aissue) [![github closed issues](https://img.shields.io/github/issues-closed-raw/vprix/vncproxy.svg?style=flat-square)](https://github.com/vprix/vncproxy/issues?q=is%3Aissue+is%3Aclosed) [![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg?style=flat-square)](http://godoc.org/github.com/vprix/vncproxy) [![view examples](https://img.shields.io/badge/learn%20by-examples-00BCD4.svg?style=flat-square)](https://github.com/vprix/vncproxy/tree/main/examples)\n## VncProxy简介\n\n`VncProxy` 是使用`Golang`实现的`Vnc`远程桌面代理组件，完全解析`rfb`协议，支持远程桌面代理，rbs文件录屏，rbs文件回放，截图，录制视频.\n\n* 全协议支持的vnc proxy。\n  * 支持Tcp代理\n  * 支持Websocket代理\n* 屏幕录像，保存为`RBS`文件\n* 重播服务器，支持vnc客户端链接，播放`RBS`文件。\n* 支持实时录制视频\n* 支持通过`RBS`文件录制视频。\n* 支持屏幕截图\n\n## 支持的编码格式\n\n- [x] Raw\n- [x] CopyRect\n- [x] CoRRE\n- [x] rre\n- [x] Hextile\n- [x] Tight\n- [x] TightPng\n- [x] ZLib\n- [x] Zrle\n- [x] CursorPseudo\n- [x] CursorWithAlphaPseudo\n- [x] DesktopNamePseudo\n- [x] DesktopSizePseudo\n- [x] ExtendedDesktopSizePseudo\n- [x] LedStatePseudo\n- [x] CursorPosPseudo\n- [x] XCursorPseudo\n- [ ] jpeg\n- [ ] jrle\n- [ ] trle\n\n## 组件说明\n\n### Proxy\n\n1. 启动`server`接受`vnc viewer`的链接.\n2. 启动`client`连接到指定的`vnc server`.\n3. 为`vnc viewer`和`vnc server`之间建立起消息转发通道。\n4. 因为`rfb`协议被完全解析，可以针对通信的消息进行转发处理，产生了后续的功能。\n\n### Recorder\n\n1. 启动`client`连接到指定的`vnc server`.\n2. 发送帧缓冲区更新消息`FramebufferUpdateRequest`到`vnc server`。\n3. 处理`vnc server`回复的界面更新消息`FramebufferUpdate`。\n4. 把这一过程以`rbs`文件格式记录下来。\n\n### Player\n\n1. 启动`server`接受`vnc viewer`的链接.\n2. 读取`rbs`文件，并按格式生成`FramebufferUpdate`消息发送给`vnc viewer`。\n3. `vnc viewer`的界面就会回放动作。\n\n### Video\n\n1. 支持`Proxy`,`Recorder`和`rbs`文件作为输入源。\n2. 把`FramebufferUpdate`消息转换为视频文件。\n\n### Screenshot\n\n1. 支持`Proxy`,`Recorder`和`rbs`文件作为输入源。\n2. 把当前的界面视图转换为图片文件。\n\n## 使用说明\n\n`vncProxy`项目有多种应用场景。\n可以作为单独的应用程序编译，也可以作为库被其他应用程序引用。\n接下来，分别介绍各种场景下的使用方式。\n### 编译\n\n```shell\n# 使用方式:\n# build.sh [-s app_name] [-v version] [-g go_bin]\n# app_name 需要编译的应用名称\n#          选项: proxy,player,recorder,video,screenshot.\n#          默认是所有应用,多个应用可以逗号分割.\n# version  编译后的文件版本号,默认为当前git的commit id.\n# go_bin   使用的golang程序\n\n# 编译所有应用\n$ ./build \n\n# 编译proxy\n$ ./build -s proxy -v v0.1.0\n\n# 编译player,recorder\n$ ./build -s player,recorder -v v0.1.0\n```\n\n编译后的二进制文件在`./bin/`目录\n\n### Proxy\n\n代码路径在`./cmd/proxy`,如果单独编译该组件，也可以到该目录下自行执行`go build`命令编译\n\n#### 获取帮助信息\n```shell\n# 查看帮助信息\n$ ./proxy --help\n\n# 查看版本信息\n$ ./proxy version\n\n```\n\n#### 启动tcp服务\n```shell\n\n# 启动tcp server接受vnc viewer的连接\n# vncHost  vnc服务器host\n# vncPort  vnc服务器port\n# vncPassword  vnc服务器密码\n# tcpHost  本地监听的地址\n# tcpPort  本地监听的端口\n# proxyPassword  vnc连接的密码\n# debug  使用debug模式启动服务\n\n$ ./proxy start tcpServer --vncHost=192.168.1.2 \\     \n                          --vncPort=5901 \\           \n                          --vncPassword=vprix \\       \n                          --tcpHost=0.0.0.0 \\        \n                          --tcpPort=8989 \\           \n                          --proxyPassword=12345612 \\  \n                          --debug                    \n```\n\n#### 启动WebSocket服务\n```shell\n\n# 启动ws server接受novnc的连接\n# vncHost  vnc服务器host\n# vncPort  vnc服务器port\n# vncPassword  vnc服务器密码\n# wsHost  本地监听的地址\n# wsPort  本地监听的端口\n# wsPath  websocket连接的地址\n# proxyPassword  vnc连接的密码\n# debug  使用debug模式启动服务\n\n$ ./proxy start wsServer  --vncHost=192.168.1.2 \\      \n                          --vncPort=5901         \\     \n                          --vncPassword=vprix \\       \n                          --wsHost=0.0.0.0 \\          \n                          --wsPort=8988    \\           \n                          --wsPath=/websockify \\         \n                          --proxyPassword=12345612 \\    \n                          --debug              \n```\n\n### Recorder\n\n代码路径在`./cmd/recorder`,如果单独编译该组件，也可以到该目录下自行执行`go build`命令编译\n#### 获取帮助信息\n```shell\n# 查看帮助信息\n$ ./recorder --help\n\n# 查看版本信息\n$ ./recorder version\n\n```\n\n#### 启动Recorder服务\n```shell\n\n# rbsFile  要保存的rbs文件路径(必填)\n# vncHost  vnc服务器host\n# vncPort  vnc服务器port\n# vncPassword  vnc服务器密码\n# debug  使用debug模式启动服务\n\n$ ./recorder start --rbsFile=/path/to/foo.rbs\n\t\t\t\t\t\t\t--vncHost=192.168.1.2 \n\t\t\t\t\t\t\t--vncPort=5901\n\t\t\t\t\t\t\t--vncPassword=vprix\n\t\t\t\t\t\t\t--debug             \n```\n\n### Player\n\n代码路径在`./cmd/player`,如果单独编译该组件，也可以到该目录下自行执行`go build`命令编译\n#### 获取帮助信息\n```shell\n# 查看帮助信息\n$ ./player --help\n\n# 查看版本信息\n$ ./player version\n```\n\n#### 启动Player Tcp服务\n```shell\n\n# rbsFile  要保存的rbs文件路径(必填)\n# tcpHost   本地监听的tcp协议地址 默认0.0.0.0\n# tcpPort  本地监听的tcp协议端口 默认8989\n# proxyPassword  连接到proxy的密码   不传入密码则使用auth none\n# debug  使用debug模式启动服务\n\n$ ./player start tcpServer  --rbsFile=/path/to/foo.rbs\n                            --tcpHost=0.0.0.0\n                            --tcpPort=8989\n                            --proxyPassword=12345612\n                            --debug             \n```\n\n#### 启动Player WS服务\n```shell\n\n# rbsFile  要保存的rbs文件路径(必填)\n# wsHost   启动websocket服务的本地地址  默认 0.0.0.0\n# wsPort   启动websocket服务的本地端口 默认8988\n# wsPath   启动websocket服务的url path 默认'/'\n# proxyPassword  连接到proxy的密码   不传入密码则使用auth none\n# debug  使用debug模式启动服务\n\n$ ./player start wsServer --rbsFile=/path/to/foo.rbs\n                          --wsHost=0.0.0.0\n                          --wsPort=8989\n                          --wsPath=/\n                          --proxyPassword=12345612\n                          --debug             \n```\n### Screenshot\n代码路径在`./cmd/screenshot`,如果单独编译该组件，也可以到该目录下自行执行`go build`命令编译\n#### 获取帮助信息\n```shell\n# 查看帮助信息\n$ ./screenshot --help\n\n# 查看版本信息\n$ ./screenshot version\n```\n\n#### 启动Screenshot 获取vnc服务器的屏幕截图\n```shell\n\n# imageFile  要生成的截图地址,暂时只支持jpeg格式(必填)\n# vncHost   要连接的vnc服务端地址(必填)\n# vncPort   要连接的vnc服务端端口(必填)\n# vncPassword  要连接的vnc服务端密码，不传则使用auth none\n\n$ ./screenshot --imageFile=./screen.jpeg --vncHost=127.0.0.1 --vncPort=5900 --vncPassword=12345612       \n```\n\n## 项目参考\n\n本项目参考了以下项目完成。\n* [vncproxy](https://github.com/amitbet/vncproxy)\n* [vnc2video](https://github.com/amitbet/vnc2video)\n* [rfbproto](https://github.com/rfbproto/rfbproto)\n\n## 交流\n\n我在做这个项目的过程中碰到了很多问题，查遍了互联网，缺少中文资料，大部分信息都是雷同的。\n所以我萌生了开源的想法，帮助更多有需要的人。\n\n我建立了一个可供交流的微信群，以便大家在使用的过程中碰到疑问，能有解答的地方。\n当然，如果你对vnc有兴趣，也可以加我微信，多多交流。\n欢迎各位贡献代码。\n\n![微信二维码](/docs/images/5bb8dbe702ce04b0bdde8c26583b152.jpg)\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvprix%2Fvncproxy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvprix%2Fvncproxy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvprix%2Fvncproxy/lists"}