Description
Go Client for Apache Guacamole Protocol.
Why?
Apache Guacamole was created with the goal of making a dedicated client unnecessary. So why create a client?!
The idea is that if you need to control a remote machine from your Go code, you can leverage the Guacamole protocol and the `guacd` server as a bridge. This way you can use any protocol supported by Guacamole (currently RDP and VNC, with X11 coming in the future) to do screen capture and remote control of networked servers/desktop machines.
Bring alternatives and similar packages
Based on the "Networking" category.
Alternatively, view Bring alternatives based on common mentions on social networks and blogs.
-
kcptun
A Stable & Secure Tunnel based on KCP with N:M multiplexing and FEC. Available for ARM, MIPS, 386 and AMD64。N:M 多重化と FEC を備えた KCP に基づく安定した安全なトンネル。 N:M 다중화 및 FEC를 사용하는 KCP 기반의 안정적이고 안전한 터널입니다. Un tunnel stable et sécurisé basé sur KCP avec multiplexage N:M et FEC. -
fasthttp
Fast HTTP package for Go. Tuned for high performance. Zero memory allocations in hot paths. Up to 10x faster than net/http -
gnet
🚀 gnet is a high-performance, lightweight, non-blocking, event-driven networking framework written in pure Go./ gnet 是一个高性能、轻量级、非阻塞的事件驱动 Go 网络框架。 -
Netmaker
Netmaker makes networks with WireGuard. Netmaker automates fast, secure, and distributed virtual networks. -
kcp-go
A Crypto-Secure, Production-Grade Reliable-UDP Library for golang with FEC -
netpoll
A high-performance non-blocking I/O networking framework focusing on RPC scenarios. -
mqttPaho
The Paho Go Client provides an MQTT client library for connection to MQTT brokers via TCP, TLS or WebSockets. -
fortio
Fortio load testing library, command line tool, advanced echo server and web UI in go (golang). Allows to specify a set query-per-second load and record latency histograms and other useful stats. -
go-getter
Package for downloading things from a string URL using a variety of protocols. -
gev
🚀Gev is a lightweight, fast non-blocking TCP network library / websocket server based on Reactor mode. Support custom protocols to quickly and easily build high-performance servers. -
nbio
Pure Go 1000k+ connections solution, support tls/http1.x/websocket and basically compatible with net/http, with high-performance and low memory cost, non-blocking, event-driven, easy-to-use. -
gmqtt
Gmqtt is a flexible, high-performance MQTT broker library that fully implements the MQTT protocol V3.x and V5 in golang -
easytcp
:sparkles: :rocket: EasyTCP is a light-weight TCP framework written in Go (Golang), built with message router. EasyTCP helps you build a TCP server easily fast and less painful. -
peerdiscovery
Pure-Go library for cross-platform local peer discovery using UDP multicast :woman: :repeat: :woman: -
gaio
High performance async-io(proactor) networking for Golang。golangのための高性能非同期io(proactor)ネットワーキング -
raw
Package raw enables reading and writing data at the device driver level for a network interface. MIT Licensed. -
winrm
Command-line tool and library for Windows remote command execution in Go -
arp
Package arp implements the ARP protocol, as described in RFC 826. MIT Licensed. -
go-cleanhttp
Get easily stdlib HTTP client, which does not share any state with other clients. -
buffstreams
A library to simplify writing applications using TCP sockets to stream protobuff messages
Access the most powerful time series database as a service
Do you think we are missing an alternative of Bring or a related project?
Popular Comparisons
README
Bring
Go client library for Apache Guacamole Protocol.
Quick start (tl;dr)
Install the library in your project:
go get github.com/deluan/bring
Create a Client with the NewClient() function. This creates a session with the specified
guacd
serverStart the client with
go client.Start()
Get screen updates with
client.Screen()
Send keystrokes with
client.SendKey()
Send mouse updates with
client.SendMouse()
See the [sample app](sample/main.go) for a working example
Documentation
The API is provided by the the Client struct. The documentation is a work in progress, but the API is very simple and you can take a look at all features available in the [sample app](sample) provided. Here are the steps to run the app:
1) You'll need a working guacd
server in your machine. The easiest way is using docker
and docker-compose. Just call docker-compose up -d
in the root of this project. It
starts the guacd
server and a sample headless linux with a VNC server
2) Run the sample app with make run
. It will connect to the linux container started by docker.
Take a look at the Makefile to learn how to run it in different scenarios.
Why?
Apache Guacamole was created with the goal of making a dedicated client unnecessary. So why create a client?!
The idea is that if you need to control a remote machine from your Go code, you can
leverage the Guacamole protocol and the guacd
server as a bridge. This way you can
use any protocol supported by Guacamole (currently RDP and VNC, with X11 coming in
the future) to do screen capture and remote control of networked servers/desktop
machines from within your Go app.
My use case was to automate some tasks in a VirtualBox VM, but there was no Go support for the VirtualBox XPCOM API on Macs (my host platform), nor a working RDP client implementation in Go. Instead of writing a new RDP client, why not leverage the awesome Guacamole project and get support for multiple protocols?