Home

Awesome

sslcon

This is a Golang implementation of the OpenConnect VPN Protocol for client side development.

The released binaries contain a command line program(sslcon) and a VPN service agent(vpnagent), the latter of which should be run as a separate background service with root privileges, so that the front-end UI does not require an administrator authorization every time it starts.

The API is exposed through the WebSocket and JSON-RPC 2.0 protocols, so developers can easily customize a graphical interface that meets their needs.

There is a GUI client example showing how to use this project.

Currently the following servers are supported,

CLI

$ ./sslcon
A CLI application that supports the OpenConnect SSL VPN protocol.
For more information, please visit https://github.com/tlslink/sslcon

Usage:
  sslcon [flags]
  sslcon [command]

Available Commands:
  connect     Connect to the VPN server
  disconnect  Disconnect from the VPN server
  status      Get VPN connection information

Flags:
  -h, --help   help for sslcon

Use "sslcon [command] --help" for more information about a command.

install

sudo ./vpnagent install
# uninstall
sudo ./vpnagent uninstall

the installed service on systemd linux

sudo systemctl stop/start/restart sslcon.service
sudo systemctl disable/enable sslcon.service

the installed service on OpenWrt

/etc/init.d/sslcon stop/start/restart/status

connect

./sslcon connect -s test.com -u vpn -g default -k key

disconnect

./sslcon disconnect

status

./sslcon status

APIs

You can use any WebSocket tool to test the API.

ws://127.0.0.1:6210/rpc

status

{
  "jsonrpc": "2.0",
  "method": "status",
  "id": 0
}

config

{
  "jsonrpc": "2.0",
  "method": "config",
  "params": {
    "log_level": "Debug",
    "log_path": ""
  },
  "id": 1
}

connect

{
  "jsonrpc": "2.0",
  "method": "connect",
  "params": {
    "host": "vpn.test.com",
    "username": "vpn",
    "password": "123456",
    "group": "",
    "secret": ""
  },
  "id": 2
}

disconnect

{
  "jsonrpc": "2.0",
  "method": "disconnect",
  "id": 3
}

reconnect

{
  "jsonrpc": "2.0",
  "method": "reconnect",
  "id": 4
}

stat

{
  "jsonrpc": "2.0",
  "method": "stat",
  "id": 7
}