first commit
This commit is contained in:
116
networkmanager/networkmanager.go
Normal file
116
networkmanager/networkmanager.go
Normal file
@@ -0,0 +1,116 @@
|
||||
package networkmanager
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os/exec"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
var nmMutex sync.Mutex
|
||||
|
||||
type Networklist struct {
|
||||
SSID string
|
||||
Signal int
|
||||
Channel int
|
||||
Encryption string
|
||||
Connected bool
|
||||
Known bool
|
||||
}
|
||||
|
||||
func ConnectToAccessPoint(ifname string, ssid string, psk string) bool {
|
||||
var pass string
|
||||
Reset()
|
||||
nmMutex.Lock()
|
||||
defer nmMutex.Unlock()
|
||||
log.Println("Connecting to " + ssid)
|
||||
if psk != "" {
|
||||
pass = fmt.Sprintf("password %s", pass)
|
||||
} else {
|
||||
pass = ""
|
||||
}
|
||||
command := fmt.Sprintf("nmcli -t -c no d wifi connect %s password %s ifname %s", ssid, psk, ifname)
|
||||
cmd := exec.Command("sh", "-c", command)
|
||||
|
||||
o, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
log.Fatal("wifi connect: ", err, string(o))
|
||||
}
|
||||
log.Println("Response: " + string(o))
|
||||
if strings.Contains(string(o), "Error") {
|
||||
log.Println("Error connecting to network")
|
||||
log.Println(err)
|
||||
return false
|
||||
}
|
||||
if strings.Contains(string(o), "successfully activated") {
|
||||
log.Println("Connected to " + ssid)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func Reset() {
|
||||
nmMutex.Lock()
|
||||
defer nmMutex.Unlock()
|
||||
cmd := exec.Command("sh", "-c", "nmcli -t -c no c")
|
||||
o, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
log.Fatal("connections: ", err)
|
||||
}
|
||||
networks := strings.Split(string(o), "\n")
|
||||
for _, n := range networks {
|
||||
t := strings.Split(string(n), ":")
|
||||
if len(t) == 4 {
|
||||
if t[2] == "802-11-wireless" {
|
||||
cmd = exec.Command("sh", "-c", "nmcli c delete "+t[1])
|
||||
err = cmd.Run()
|
||||
if err != nil {
|
||||
log.Fatal("Deleting network: ", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func Scan(ifname string, timeout int) []Networklist {
|
||||
var m []Networklist
|
||||
nmMutex.Lock()
|
||||
defer nmMutex.Unlock()
|
||||
// log.Println("Scanning")
|
||||
cmd := exec.Command("sh", "-c", "nmcli d wifi rescan ifname "+ifname)
|
||||
_ = cmd.Run()
|
||||
time.Sleep(time.Duration(timeout) * time.Second)
|
||||
cmd = exec.Command("sh", "-c", "nmcli -t -c no d wifi list ifname "+ifname)
|
||||
n, err := cmd.Output()
|
||||
if err != nil {
|
||||
log.Fatal("Listing: ", err)
|
||||
}
|
||||
networks := strings.Split(string(n), "\n")
|
||||
for _, n := range networks {
|
||||
t := strings.Split(n, ":")
|
||||
if len(t) == 8 {
|
||||
var l Networklist
|
||||
l.SSID = t[1]
|
||||
l.Signal, _ = strconv.Atoi(t[5])
|
||||
l.Channel, _ = strconv.Atoi(t[3])
|
||||
l.Encryption = t[7]
|
||||
if t[0] == "*" {
|
||||
l.Connected = true
|
||||
} else {
|
||||
l.Connected = false
|
||||
}
|
||||
|
||||
m = append(m, l)
|
||||
|
||||
/* if t[0] == "*" {
|
||||
fmt.Print("Currently Connected: ")
|
||||
}
|
||||
|
||||
fmt.Printf("SSID: %s, Rate: %s, Signal: %s, Security: %s\n", t[1], t[4], t[5], t[7])
|
||||
*/
|
||||
}
|
||||
}
|
||||
return m
|
||||
}
|
Reference in New Issue
Block a user