From e95393750bd3e73e6ad01dd4a1e2a557a71c11e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Mon, 22 Sep 2025 09:35:59 +0800 Subject: [PATCH] Wifi (macOS): add (B)SSID detection back for Tohoe 26.0 Fixes #1874 --- src/detection/wifi/wifi_apple.m | 60 +++++---------------------------- 1 file changed, 9 insertions(+), 51 deletions(-) diff --git a/src/detection/wifi/wifi_apple.m b/src/detection/wifi/wifi_apple.m index de2a6ff3a..77b661cc4 100644 --- a/src/detection/wifi/wifi_apple.m +++ b/src/detection/wifi/wifi_apple.m @@ -9,48 +9,9 @@ static inline double rssiToSignalQuality(int rssi) return (double) (rssi >= -50 ? 100 : rssi <= -100 ? 0 : (rssi + 100) * 2); } -static bool queryIpconfig(const char* ifName, FFstrbuf* result) -{ - if (@available(macOS 15.6, *)) - { - // ipconfig reports too - return false; - } - - return ffProcessAppendStdOut(result, (char* const[]) { - "/usr/sbin/ipconfig", - "getsummary", - (char* const) ifName, - NULL - }) == NULL; -} - -static bool getWifiInfoByIpconfig(FFstrbuf* ipconfig, const char* prefix, FFstrbuf* result) -{ - // `ipconfig getsummary ` returns a string like this: - // { - // BSSID : - // IPv4 : { - // ... - // } - // IPv6 : { - // ... - // } - // InterfaceType : WiFi - // LinkStatusActive : TRUE - // NetworkID : XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - // SSID : XXXXXX - // Security : WPA2_PSK - // } - - const char* start = memmem(ipconfig->chars, ipconfig->length, prefix, strlen(prefix)); - if (!start) return false; - start += strlen(prefix); - const char* end = strchr(start, '\n'); - if (!end) return false; - ffStrbufSetNS(result, (uint32_t) (end - start), start); - return true; -} +@interface CWNetworkProfile() +@property(readonly, retain, nullable) NSArray *bssidList; +@end const char* ffDetectWifi(FFlist* result) { @@ -85,17 +46,19 @@ const char* ffDetectWifi(FFlist* result) FF_STRBUF_AUTO_DESTROY ipconfig = ffStrbufCreate(); + CWNetworkProfile* networkProfile = inf.configuration.networkProfiles.firstObject; + if (inf.ssid) // https://developer.apple.com/forums/thread/732431 ffStrbufAppendS(&item->conn.ssid, inf.ssid.UTF8String); - else if (ipconfig.length || (queryIpconfig(item->inf.description.chars, &ipconfig))) - getWifiInfoByIpconfig(&ipconfig, "\n SSID : ", &item->conn.ssid); + else if (networkProfile.ssid) + ffStrbufSetStatic(&item->conn.ssid, inf.configuration.networkProfiles.firstObject.ssid.UTF8String); else ffStrbufSetStatic(&item->conn.ssid, ""); // https://developer.apple.com/forums/thread/732431 if (inf.bssid) ffStrbufAppendS(&item->conn.bssid, inf.bssid.UTF8String); - else if (ipconfig.length || (queryIpconfig(item->inf.description.chars, &ipconfig))) - getWifiInfoByIpconfig(&ipconfig, "\n BSSID : ", &item->conn.bssid); + else if (networkProfile.bssidList) + ffStrbufSetStatic(&item->conn.bssid, [networkProfile.bssidList.firstObject[@"BSSID"] UTF8String]); else ffStrbufSetStatic(&item->conn.bssid, ""); @@ -183,11 +146,6 @@ const char* ffDetectWifi(FFlist* result) case 15 /*kCWSecurityOWETransition*/: ffStrbufSetStatic(&item->conn.security, "OWE Transition"); break; - case kCWSecurityUnknown: - // Sonoma? - if (ipconfig.length || (queryIpconfig(item->inf.description.chars, &ipconfig))) - getWifiInfoByIpconfig(&ipconfig, "\n Security : ", &item->conn.security); - break; default: ffStrbufAppendF(&item->conn.security, "Unknown (%ld)", inf.security); break;