Wifi: support macOS

This commit is contained in:
李通洲
2022-11-28 16:34:56 +08:00
parent 57b794cbd9
commit b3e635a923
6 changed files with 167 additions and 38 deletions
+2 -1
View File
@@ -437,7 +437,7 @@ elseif(APPLE)
src/detection/terminalshell/terminalshell_linux.c
src/detection/uptime/uptime_bsd.c
src/detection/users/users_linux.c
src/detection/wifi/wifi_nosupport.c
src/detection/wifi/wifi_apple.m
src/detection/wmtheme/wmtheme_apple.m
src/util/apple/cf_helpers.c
src/util/apple/osascript.m
@@ -641,6 +641,7 @@ if(APPLE)
PRIVATE "-framework OpenGL"
PRIVATE "-framework OpenCL"
PRIVATE "-framework Cocoa"
PRIVATE "-framework CoreWLAN"
PRIVATE "-weak_framework MediaRemote -F /System/Library/PrivateFrameworks"
)
elseif(WIN32)
+1 -2
View File
@@ -26,8 +26,7 @@ struct FFWifiSecurity
{
bool enabled;
bool oneXEnabled;
FFstrbuf authAlgo;
FFstrbuf cipherAlgo;
FFstrbuf algorithm;
};
typedef struct FFWifiResult
+132
View File
@@ -0,0 +1,132 @@
#include "wifi.h"
#import <CoreWLAN/CoreWLAN.h>
const char* ffDetectWifi(const FFinstance* instance, FFlist* result)
{
FF_UNUSED(instance);
NSArray<CWInterface*>* interfaces = CWWiFiClient.sharedWiFiClient.interfaces;
if(!interfaces)
return "CWWiFiClient.sharedWiFiClient.interfaces is nil";
if(interfaces.count == 0)
return "No wifi interfaces found";
for(CWInterface* inf in interfaces)
{
FFWifiResult* item = (FFWifiResult*)ffListAdd(result);
ffStrbufInit(&item->inf.description);
ffStrbufInit(&item->inf.status);
ffStrbufInit(&item->conn.status);
ffStrbufInit(&item->conn.ssid);
ffStrbufInit(&item->conn.macAddress);
ffStrbufInit(&item->conn.phyType);
item->conn.signalQuality = 0.0/0.0;
item->conn.rxRate = 0.0/0.0;
item->conn.txRate = 0.0/0.0;
item->security.enabled = false;
item->security.oneXEnabled = false;
ffStrbufInit(&item->security.algorithm);
ffStrbufAppendS(&item->inf.description, inf.interfaceName.UTF8String);
ffStrbufAppendS(&item->inf.status, inf.powerOn ? "Power On" : "Power Off");
if(!inf.powerOn)
continue;
ffStrbufAppendS(&item->conn.status, inf.serviceActive ? "Active" : "Inactive");
if(!inf.serviceActive)
continue;
ffStrbufAppendS(&item->conn.ssid, inf.ssid.UTF8String);
ffStrbufAppendS(&item->conn.macAddress, inf.hardwareAddress.UTF8String);
switch(inf.activePHYMode)
{
case kCWPHYModeNone:
ffStrbufAppendS(&item->conn.phyType, "none");
break;
case kCWPHYMode11a:
ffStrbufAppendS(&item->conn.phyType, "802.11a");
break;
case kCWPHYMode11b:
ffStrbufAppendS(&item->conn.phyType, "802.11b");
break;
case kCWPHYMode11g:
ffStrbufAppendS(&item->conn.phyType, "802.11g");
break;
case kCWPHYMode11n:
ffStrbufAppendS(&item->conn.phyType, "802.11n (Wi-Fi 4)");
break;
case kCWPHYMode11ac:
ffStrbufAppendS(&item->conn.phyType, "802.11ac (Wi-Fi 5)");
break;
case kCWPHYMode11ax:
ffStrbufAppendS(&item->conn.phyType, "802.11ax (Wi-Fi 6)");
break;
case 7 /*kCWPHYMode11be?*/:
ffStrbufAppendS(&item->conn.phyType, "802.11be (Wi-Fi 7)");
break;
default:
ffStrbufAppendF(&item->conn.phyType, "Unknown (%ld)", inf.activePHYMode);
break;
}
item->conn.signalQuality = inf.rssiValue >= -50 ? 100 : inf.rssiValue <= -100 ? 0 : (inf.rssiValue + 100) * 2;
item->conn.txRate = inf.transmitRate;
item->security.enabled = inf.security != kCWSecurityNone;
switch(inf.security)
{
case kCWSecurityNone:
ffStrbufAppendS(&item->security.algorithm, "None");
break;
case kCWSecurityWEP:
ffStrbufAppendS(&item->security.algorithm, "WEP");
break;
case kCWSecurityWPAPersonal:
ffStrbufAppendS(&item->security.algorithm, "WPA Personal");
break;
case kCWSecurityWPAPersonalMixed:
ffStrbufAppendS(&item->security.algorithm, "WPA Persional Mixed");
break;
case kCWSecurityWPA2Personal:
ffStrbufAppendS(&item->security.algorithm, "WPA2 Personal");
break;
case kCWSecurityPersonal:
ffStrbufAppendS(&item->security.algorithm, "Personal");
break;
case kCWSecurityDynamicWEP:
ffStrbufAppendS(&item->security.algorithm, "Dynamic WEP");
break;
case kCWSecurityWPAEnterprise:
ffStrbufAppendS(&item->security.algorithm, "WPA Enterprise");
break;
case kCWSecurityWPAEnterpriseMixed:
ffStrbufAppendS(&item->security.algorithm, "WPA Enterprise Mixed");
break;
case kCWSecurityWPA2Enterprise:
ffStrbufAppendS(&item->security.algorithm, "WPA2 Enterprise");
break;
case kCWSecurityEnterprise:
ffStrbufAppendS(&item->security.algorithm, "Enterprise");
break;
case kCWSecurityWPA3Personal:
ffStrbufAppendS(&item->security.algorithm, "WPA3 Personal");
break;
case kCWSecurityWPA3Enterprise:
ffStrbufAppendS(&item->security.algorithm, "WPA3 Enterprise");
break;
case kCWSecurityWPA3Transition:
ffStrbufAppendS(&item->security.algorithm, "WPA3 Transition");
break;
case 14 /*kCWSecurityOWE*/:
ffStrbufAppendS(&item->security.algorithm, "OWE");
break;
case 15 /*kCWSecurityOWETransition*/:
ffStrbufAppendS(&item->security.algorithm, "OWE Transition");
break;
default:
ffStrbufAppendF(&item->security.algorithm, "Unknown (%ld)", inf.security);
break;
}
}
return NULL;
}
+28 -28
View File
@@ -88,8 +88,7 @@ const char* ffDetectWifi(const FFinstance* instance, FFlist* result)
item->conn.txRate = 0.0/0.0;
item->security.enabled = false;
item->security.oneXEnabled = false;
ffStrbufInit(&item->security.authAlgo);
ffStrbufInit(&item->security.cipherAlgo);
ffStrbufInit(&item->security.algorithm);
ffStrbufSetWS(&item->inf.description, ifInfo->strInterfaceDescription);
convertIfStateToString(ifInfo->isState, &item->inf.status);
@@ -168,85 +167,86 @@ const char* ffDetectWifi(const FFinstance* instance, FFlist* result)
switch (connInfo->wlanSecurityAttributes.dot11AuthAlgorithm)
{
case DOT11_AUTH_ALGO_80211_OPEN:
ffStrbufAppendS(&item->security.authAlgo, "802.11 Open");
ffStrbufAppendS(&item->security.algorithm, "802.11 Open");
break;
case DOT11_AUTH_ALGO_80211_SHARED_KEY:
ffStrbufAppendS(&item->security.authAlgo, "802.11 Shared");
ffStrbufAppendS(&item->security.algorithm, "802.11 Shared");
break;
case DOT11_AUTH_ALGO_WPA:
ffStrbufAppendS(&item->security.authAlgo, "WPA");
ffStrbufAppendS(&item->security.algorithm, "WPA");
break;
case DOT11_AUTH_ALGO_WPA_PSK:
ffStrbufAppendS(&item->security.authAlgo, "WPA-PSK");
ffStrbufAppendS(&item->security.algorithm, "WPA-PSK");
break;
case DOT11_AUTH_ALGO_WPA_NONE:
ffStrbufAppendS(&item->security.authAlgo, "WPA-None");
ffStrbufAppendS(&item->security.algorithm, "WPA-None");
break;
case DOT11_AUTH_ALGO_RSNA:
ffStrbufAppendS(&item->security.authAlgo, "RSNA");
ffStrbufAppendS(&item->security.algorithm, "RSNA");
break;
case DOT11_AUTH_ALGO_RSNA_PSK:
ffStrbufAppendS(&item->security.authAlgo, "RSNA with PSK");
ffStrbufAppendS(&item->security.algorithm, "RSNA with PSK");
break;
case 8 /* DOT11_AUTH_ALGO_WPA3 */:
ffStrbufAppendS(&item->security.authAlgo, "WPA3");
ffStrbufAppendS(&item->security.algorithm, "WPA3");
break;
case 9 /* DOT11_AUTH_ALGO_WPA3_SAE */:
ffStrbufAppendS(&item->security.authAlgo, "WPA3-SAE");
ffStrbufAppendS(&item->security.algorithm, "WPA3-SAE");
break;
case 10 /* DOT11_AUTH_ALGO_OWE */:
ffStrbufAppendS(&item->security.authAlgo, "OWE");
ffStrbufAppendS(&item->security.algorithm, "OWE");
break;
case 11 /* DOT11_AUTH_ALGO_WPA3_ENT */:
ffStrbufAppendS(&item->security.authAlgo, "OWE-ENT");
ffStrbufAppendS(&item->security.algorithm, "OWE-ENT");
break;
default:
ffStrbufAppendF(&item->security.authAlgo, "Unknown (%u)", (unsigned)connInfo->wlanSecurityAttributes.dot11AuthAlgorithm);
ffStrbufAppendF(&item->security.algorithm, "Unknown (%u)", (unsigned)connInfo->wlanSecurityAttributes.dot11AuthAlgorithm);
break;
}
ffStrbufAppendS(&item->security.algorithm, " - ");
switch (connInfo->wlanSecurityAttributes.dot11CipherAlgorithm)
{
case DOT11_CIPHER_ALGO_NONE:
ffStrbufAppendS(&item->security.cipherAlgo, "None");
ffStrbufAppendS(&item->security.algorithm, "None");
break;
case DOT11_CIPHER_ALGO_WEP40:
ffStrbufAppendS(&item->security.cipherAlgo, "WEP-40");
ffStrbufAppendS(&item->security.algorithm, "WEP-40");
break;
case DOT11_CIPHER_ALGO_TKIP:
ffStrbufAppendS(&item->security.cipherAlgo, "TKIP");
ffStrbufAppendS(&item->security.algorithm, "TKIP");
break;
case DOT11_CIPHER_ALGO_CCMP:
ffStrbufAppendS(&item->security.cipherAlgo, "CCMP");
ffStrbufAppendS(&item->security.algorithm, "CCMP");
break;
case DOT11_CIPHER_ALGO_WEP104:
ffStrbufAppendS(&item->security.cipherAlgo, "WEP-104");
ffStrbufAppendS(&item->security.algorithm, "WEP-104");
break;
case 0x06 /* DOT11_CIPHER_ALGO_BIP */:
ffStrbufAppendS(&item->security.cipherAlgo, "BIP-CMAC-128");
ffStrbufAppendS(&item->security.algorithm, "BIP-CMAC-128");
break;
case 0x08 /* DOT11_CIPHER_ALGO_GCMP */:
ffStrbufAppendS(&item->security.cipherAlgo, "GCMP-128");
ffStrbufAppendS(&item->security.algorithm, "GCMP-128");
break;
case 0x09 /* DOT11_CIPHER_ALGO_GCMP_256 */:
ffStrbufAppendS(&item->security.cipherAlgo, "GCMP-256");
ffStrbufAppendS(&item->security.algorithm, "GCMP-256");
break;
case 0x0a /* DOT11_CIPHER_ALGO_CCMP_256 */:
ffStrbufAppendS(&item->security.cipherAlgo, "CCMP-256");
ffStrbufAppendS(&item->security.algorithm, "CCMP-256");
break;
case 0x0b /* DOT11_CIPHER_ALGO_BIP_GMAC_128 */:
ffStrbufAppendS(&item->security.cipherAlgo, "BIP-GMAC-128");
ffStrbufAppendS(&item->security.algorithm, "BIP-GMAC-128");
break;
case 0x0c /* DOT11_CIPHER_ALGO_BIP_GMAC_256 */:
ffStrbufAppendS(&item->security.cipherAlgo, "BIP-GMAC-256");
ffStrbufAppendS(&item->security.algorithm, "BIP-GMAC-256");
break;
case 0x0d /* DOT11_CIPHER_ALGO_BIP_CMAC_256 */:
ffStrbufAppendS(&item->security.cipherAlgo, "BIP-CMAC-256");
ffStrbufAppendS(&item->security.algorithm, "BIP-CMAC-256");
break;
case DOT11_CIPHER_ALGO_WEP:
ffStrbufAppendS(&item->security.cipherAlgo, "WEP");
ffStrbufAppendS(&item->security.algorithm, "WEP");
break;
default:
ffStrbufAppendF(&item->security.cipherAlgo, "Unknown (%u)", (unsigned)connInfo->wlanSecurityAttributes.dot11CipherAlgorithm);
ffStrbufAppendF(&item->security.algorithm, "Unknown (%u)", (unsigned)connInfo->wlanSecurityAttributes.dot11CipherAlgorithm);
break;
}
ffWlanFreeMemory(connInfo);
+1 -2
View File
@@ -364,8 +364,7 @@ static inline void printCommandHelp(const char* command)
"Connection TX rate",
"Security enabled",
"Security 802.1X enabled",
"Security auth algorithm",
"Security cipher algorithm"
"Security algorithm"
);
}
else if(strcasecmp(command, "player-format") == 0)
+3 -5
View File
@@ -3,7 +3,7 @@
#include "detection/wifi/wifi.h"
#define FF_WIFI_MODULE_NAME "Wifi"
#define FF_WIFI_NUM_FORMAT_ARGS 13
#define FF_WIFI_NUM_FORMAT_ARGS 12
void ffPrintWifi(FFinstance* instance)
{
@@ -49,8 +49,7 @@ void ffPrintWifi(FFinstance* instance)
{FF_FORMAT_ARG_TYPE_DOUBLE, &item->conn.txRate},
{FF_FORMAT_ARG_TYPE_BOOL, &item->security.enabled},
{FF_FORMAT_ARG_TYPE_BOOL, &item->security.oneXEnabled},
{FF_FORMAT_ARG_TYPE_STRBUF, &item->security.authAlgo},
{FF_FORMAT_ARG_TYPE_STRBUF, &item->security.cipherAlgo},
{FF_FORMAT_ARG_TYPE_STRBUF, &item->security.algorithm},
});
}
@@ -60,8 +59,7 @@ void ffPrintWifi(FFinstance* instance)
ffStrbufDestroy(&item->conn.ssid);
ffStrbufDestroy(&item->conn.macAddress);
ffStrbufDestroy(&item->conn.phyType);
ffStrbufDestroy(&item->security.authAlgo);
ffStrbufDestroy(&item->security.cipherAlgo);
ffStrbufDestroy(&item->security.algorithm);
}
}
else