Skip to content

Implementation of the wpa_supplicant / hostapd control interface for Go

License

Notifications You must be signed in to change notification settings

hdiniz/wpa_supplicant-go

Repository files navigation

wpa_supplicant-go

GoDoc Go Report Card codecov License

Implementation of the wpa_supplicant / hostapd control interface in Go (no CGO).

Installation

go get github.com/hdiniz/wpa_supplicant-go

Examples

For complete examples, check the examples' folder.

package main

import (
	"context"
	"fmt"
	"os"
	"time"
	
	"github.com/hdiniz/wpa_supplicant-go"
)

func main() {
	ctrl, err := wpa_supplicant.Connect("/run/wpa_supplicant/wlan0")
	if err != nil {
		fmt.Printf("failed to connect to wpa_supplicant: %s\n", err)
		os.Exit(1)
	}
	
	ctx := context.TODO()

	// ask hostapd to start a scan
	res, err := ctrl.SendRequest(ctx, "SCAN")
	if res != "OK\n" {
		fmt.Println("failed to request scan", res)
		os.Exit(1)
	}

	time.Sleep(2 * time.Second) // give some time to scan channels

	res, err = ctrl.SendRequest(ctx, "SCAN_RESULTS")
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}
}
package main

import (
	"context"
	"fmt"
	"os"
	
	"github.com/hdiniz/wpa_supplicant-go"
)

func main() {
	ctrl, err := wpa_supplicant.Connect("/run/wpa_supplicant/wlan0")
	if err != nil {
		fmt.Printf("failed to connect to wpa_supplicant: %s\n", err)
		os.Exit(1)
	}
	
	ctx := context.TODO()

	err := ctrl.Listen(ctx, func(event wpa_supplicant.Event) {
        fmt.Println(event.Priority, event.Data)
	})
	if err != nil {
		fmt.Printf("failed to listen: %s\n", err)
		os.Exit(1)
	}
}

Permissions

To communicate with the wpa_supplicant/hostapd daemon, the process must have permission to access the socket path. Likewise, wpa_supplicant/hostapd must have permissions to access the socket created by this library.

For example, if hostapd is running as a less privileged user (e.g. network) and the application as root (e.g. sshed into a OpenWRT shell). The application will be able to send requests to hostapd, but hostapd will not be able to send replies. This can be fixed by running as the same user or by setting file permissions on the local socket path.

About

Implementation of the wpa_supplicant / hostapd control interface for Go

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published