core v1
This commit is contained in:
82
client/internal/winapi/winapi.go
Normal file
82
client/internal/winapi/winapi.go
Normal file
@@ -0,0 +1,82 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user