Source RCON Protocol implementation in Go.
RCON Protocol described in the valve documentation.
Works for any game using the Source RCON Protocol. Tested on:
- Project Zomboid
- Conan Exiles
- Rust (add +rcon.web 0 to the args when starting the server)
- ARK: Survival Evolved
- Counter-Strike: Global Offensive
- Minecraft
- Palworld
- Factorio (start the server with
--rcon-bind
/--rcon-port
and--rcon-password
args)
Open pull request if you have successfully used a package with another game with rcon support and add it to the list.
go get github.com/gorcon/rcon
See Changelog for release details.
package main
import (
"fmt"
"log"
"github.com/gorcon/rcon"
)
func main() {
conn, err := rcon.Dial("127.0.0.1:16260", "password")
if err != nil {
log.Fatal(err)
}
defer conn.Close()
response, err := conn.Execute("help")
if err != nil {
log.Fatal(err)
}
fmt.Println(response)
}
If you wish to initialize a RCON connection with an already initialized net.Conn, you can use the Open
function:
package main
import (
"fmt"
"log"
"net"
"github.com/gorcon/rcon"
)
func main() {
netConn, err := net.Dial("tcp", "127.0.0.1:16260")
if err != nil {
// Failed to open TCP connection to the server.
log.Fatalf("expected nil got error: %s", err)
}
defer netConn.Close()
conn, err := rcon.Open(netConn, "password")
if err != nil {
log.Fatal(err)
}
defer conn.Close()
response, err := conn.Execute("help")
if err != nil {
log.Fatal(err)
}
fmt.Println(response)
}
Go 1.15 or higher
Contributions are more than welcome!
If you think that you have found a bug, create an issue and publish the minimum amount of code triggering the bug, so it can be reproduced.
If you want to fix the bug then you can create a pull request. If possible, write a test that will cover this bug.
MIT License, see LICENSE