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) }