83 lines
2.0 KiB
Go
83 lines
2.0 KiB
Go
package winapi
|
|
|
|
import (
|
|
"bytes"
|
|
"os/exec"
|
|
"strings"
|
|
"syscall"
|
|
)
|
|
|
|
// WifiConnection — SSID + BSSID (MAC) của điểm phát đang kết nối
|
|
type WifiConnection struct {
|
|
SSID string
|
|
BSSID string
|
|
}
|
|
|
|
// GetWifiSSID trả về SSID Wifi đang kết nối
|
|
func GetWifiSSID() string {
|
|
return GetWifiConnection().SSID
|
|
}
|
|
|
|
// GetWifiConnection đọc SSID và BSSID từ netsh (Windows)
|
|
func GetWifiConnection() WifiConnection {
|
|
cmd := exec.Command("netsh", "wlan", "show", "interfaces")
|
|
cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
|
|
|
|
var out bytes.Buffer
|
|
cmd.Stdout = &out
|
|
if err := cmd.Run(); err != nil {
|
|
return WifiConnection{}
|
|
}
|
|
|
|
var conn WifiConnection
|
|
for _, line := range strings.Split(out.String(), "\n") {
|
|
trimmed := strings.TrimSpace(line)
|
|
lower := strings.ToLower(trimmed)
|
|
if strings.HasPrefix(lower, "ssid") && !strings.Contains(lower, "bssid") {
|
|
if v := valueAfterColon(trimmed); v != "" {
|
|
conn.SSID = v
|
|
}
|
|
}
|
|
// Windows: "AP BSSID" (EN) hoặc dòng có chứa "bssid" (locale khác)
|
|
if strings.Contains(lower, "bssid") {
|
|
if v := valueAfterColon(trimmed); v != "" {
|
|
conn.BSSID = normalizeMAC(v)
|
|
}
|
|
}
|
|
}
|
|
return conn
|
|
}
|
|
|
|
func valueAfterColon(line string) string {
|
|
idx := strings.Index(line, ":")
|
|
if idx < 0 {
|
|
return ""
|
|
}
|
|
return strings.TrimSpace(line[idx+1:])
|
|
}
|
|
|
|
func normalizeMAC(mac string) string {
|
|
var hex []rune
|
|
for _, c := range strings.ToLower(mac) {
|
|
if (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') {
|
|
hex = append(hex, c)
|
|
}
|
|
}
|
|
if len(hex) != 12 {
|
|
return strings.TrimSpace(mac)
|
|
}
|
|
return string(hex[0:2]) + ":" + string(hex[2:4]) + ":" + string(hex[4:6]) + ":" +
|
|
string(hex[6:8]) + ":" + string(hex[8:10]) + ":" + string(hex[10:12])
|
|
}
|
|
|
|
// BSSIDKey chuẩn hóa MAC để so khớp (12 ký tự hex)
|
|
func BSSIDKey(bssid string) string {
|
|
var hex []rune
|
|
for _, c := range strings.ToLower(bssid) {
|
|
if (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') {
|
|
hex = append(hex, c)
|
|
}
|
|
}
|
|
return string(hex)
|
|
}
|