[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71FHEHWWR2FHXE4Y8EM7XG2":3,"skill-same:01M71FHEHWWR2FHXE4Y8EM7XG2":67},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":35,"linkOnly":36,"markdownContent":37,"markdownBody":38,"frontMatter":39,"refName":40,"commitSha":41,"skillDirectory":42,"forksCount":14,"repositoryHtmlUrl":43,"repositoryHomepageUrl":6,"ownerHtmlUrl":44,"ownerBlogUrl":6,"ownerDescription":45,"updatedAt":46,"install":47,"resources":60},"01M71FHEHWWR2FHXE4Y8EM7XG2","net-wireless-kismet",null,"| | Open (No encryption) | Insecure | Critical - all traffic visible | | WEP | Broken | Critical - crackable in minutes | | WPA-TKIP | Deprecated | High - known vulnerabilities | | WPA2-PSK (CCMP) | Acceptable | Medium - depends on passphrase strength | | WPA2-Enterprise (802.","DCx7C5\u002Fai-marketplace","DCx7C5","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F42419559?v=4","01M71C01G2AZV3NTNGWAWSHJPP","DC","01M71C01GQW6G50S2BYMS7PP3E",0,"MIT","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fnet-wireless-kismet\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34],"Kismet","wireless","net wireless kismet","broken","Enterprise","open","WPA2","traffic","passphrase","cybersecurity","critical","encryption","high","deprecated","vulnerabilities","minutes","2026-11-10 10:12:30",false,"---\nname: net-wireless-kismet\ndescription: \"| | Open (No encryption) | Insecure | Critical - all traffic visible | | WEP | Broken | Critical - crackable in minutes | | WPA-TKIP | Deprecated | High - known vulnerabilities | | WPA2-PSK (CCMP) | Acceptable | Medium - depends on passphrase strength | | WPA2-Enterprise (802.\"\ndomain: cybersecurity\n---\n\n|\n| Open (No encryption) | Insecure | Critical - all traffic visible |\n| WEP | Broken | Critical - crackable in minutes |\n| WPA-TKIP | Deprecated | High - known vulnerabilities |\n| WPA2-PSK (CCMP) | Acceptable | Medium - depends on passphrase strength |\n| WPA2-Enterprise (802.1X) | Recommended | Low - certificate-based |\n| WPA3-SAE | Best practice | Low - resistant to offline attacks |\n\n## Workflow\n\n### Step 1: Prepare Wireless Adapter\n\n```bash\n# Identify wireless interfaces\niwconfig\n\n# Check adapter capabilities\niw list | grep -A 10 \"Supported interface modes\"\n\n# Kill processes that may interfere\nsudo airmon-ng check kill\n\n# Enable monitor mode\nsudo ip link set wlan0 down\nsudo iw dev wlan0 set type monitor\nsudo ip link set wlan0 up\n\n# Verify monitor mode\niw dev wlan0 info | grep type\n```\n\n### Step 2: Configure and Launch Kismet\n\nEdit `\u002Fetc\u002Fkismet\u002Fkismet.conf`:\n\n```ini\n# Data sources\nsource=wlan0:name=WiFi-Monitor,channel_hop=true,channel_hoprate=5\u002Fsec\n\n# Logging configuration\nlog_types=kismet,pcapng\nlog_prefix=\u002Fopt\u002Fkismet\u002Flogs\u002Fassessment\n\n# Enable all 802.11 channels (2.4GHz and 5GHz)\nchannel_hop_speed=5\nchannel_list=IEEE80211:1,2,3,4,5,6,7,8,9,10,11,36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,165\n\n# GPS configuration (if available)\ngps=gpsd:host=localhost,port=2947\n\n# Alert configuration\nalert=ADVCRYPTCHANGE,5\u002Fmin,1\u002Fsec\nalert=BSSTIMESTAMP,5\u002Fmin,1\u002Fsec\nalert=CRYPTODROP,5\u002Fmin,1\u002Fsec\nalert=DISASSOCTRAFFIC,10\u002Fmin,1\u002Fsec\nalert=DEAUTHFLOOD,10\u002Fmin,2\u002Fsec\nalert=PROBENOMFP,5\u002Fmin,1\u002Fsec\n```\n\nLaunch Kismet:\n\n```bash\n# Start Kismet server\nsudo kismet -c wlan0\n\n# Access web interface\n# Open browser to http:\u002F\u002Flocalhost:2501\n# Default credentials: kismet \u002F kismet (change immediately)\n```\n\n### Step 3: Conduct Assessment Scans\n\n**Rogue Access Point Detection:**\n\n```bash\n# Export device list via Kismet REST API\ncurl -u kismet:kismet http:\u002F\u002Flocalhost:2501\u002Fdevices\u002Fsummary\u002Fdevices.json | \\\n    python3 -m json.tool > all_devices.json\n\n# Filter for access points\ncurl -u kismet:kismet \\\n    'http:\u002F\u002Flocalhost:2501\u002Fdevices\u002Fsummary\u002Fdevices.json' \\\n    -d 'json={\"fields\":[\"kismet.device.base.macaddr\",\"kismet.device.base.name\",\"kismet.device.base.type\",\"kismet.device.base.crypt\",\"kismet.device.base.channel\",\"kismet.device.base.manuf\",\"dot11.device\u002Fdot11.device.advertised_ssid_map\u002Fdot11.advertisedssid.ssid\"]}' \\\n    > access_points.json\n```\n\n**Client Probe Analysis:**\n\nProbe requests reveal networks that clients have previously connected to, which can indicate:\n- Corporate devices connecting to insecure home networks\n- Devices searching for known-evil SSIDs (evil twin susceptibility)\n- Unauthorized personal devices in corporate space\n\n### Step 4: Analyze Results\n\nPython analysis script for Kismet database:\n\n```python\n#!\u002Fusr\u002Fbin\u002Fenv python3\n\"\"\"Analyze Kismet capture database for wireless security findings.\"\"\"\n\nimport sqlite3\nimport json\nimport sys\nfrom collections import defaultdict\n\ndef analyze_kismet_db(db_path: str):\n    \"\"\"Analyze Kismet SQLite database for security issues.\"\"\"\n    conn = sqlite3.connect(db_path)\n    cursor = conn.cursor()\n\n    findings = []\n\n    # Query all devices\n    cursor.execute(\"\"\"\n        SELECT devmac, type, device\n        FROM devices\n    \"\"\")\n\n    devices = cursor.fetchall()\n    ap_count = 0\n    client_count = 0\n    open_networks = []\n    wep_networks = []\n    wpa_tkip_networks = []\n    hidden_networks = []\n    all_aps = []\n\n    for mac, dev_type, device_json in devices:\n        try:\n            device = json.loads(device_json)\n        except json.JSONDecodeError:\n            continue\n\n        base = device.get('kismet.device.base.type', '')\n\n        if 'Wi-Fi AP' in base or 'Wi-Fi Device' in base:\n            ap_count += 1\n            ssid_map = device.get('dot11.device', {}).get(\n                'dot11.device.advertised_ssid_map', []\n            )\n            crypt = device.get('kismet.device.base.crypt', '')\n            name = device.get('kismet.device.base.name', 'Unknown')\n            channel = device.get('kismet.device.base.channel', '')\n            manuf = device.get('kismet.device.base.manuf', 'Unknown')\n\n            ap_info = {\n                'mac': mac,\n                'ssid': name,\n                'encryption': crypt,\n                'channel': channel,\n                'manufacturer': manuf,\n            }\n            all_aps.append(ap_info)\n\n            if 'None' in crypt or crypt == '':\n                open_networks.append(ap_info)\n            elif 'WEP' in crypt:\n                wep_networks.append(ap_info)\n            elif 'WPA+TKIP' in crypt and 'AES' not in crypt:\n                wpa_tkip_networks.append(ap_info)\n\n            for ssid_entry in ssid_map:\n                if isinstance(ssid_entry, dict):\n                    ssid = ssid_entry.get('dot11.advertisedssid.ssid', '')\n                    if ssid == '' or ssid is None:\n                        hidden_networks.append(ap_info)\n\n        elif 'Wi-Fi Client' in base:\n            client_count += 1\n\n    # Generate findings\n    print(f\"\\n{'='*70}\")\n    print(\"WIRELESS SECURITY ASSESSMENT REPORT\")\n    print(f\"{'='*70}\")\n    print(f\"\\nTotal Access Points Detected: {ap_count}\")\n    print(f\"Total Clients Detected: {client_count}\")\n\n    if open_networks:\n        print(f\"\\n[CRITICAL] Open Networks (No Encryption): {len(open_networks)}\")\n        for net in open_networks:\n            print(f\"  - SSID: {net['ssid']}, MAC: {net['mac']}, \"\n                  f\"Channel: {net['channel']}, Vendor: {net['manufacturer']}\")\n\n    if wep_networks:\n        print(f\"\\n[CRITICAL] WEP-Encrypted Networks: {len(wep_networks)}\")\n        for net in wep_networks:\n            print(f\"  - SSID: {net['ssid']}, MAC: {net['mac']}, \"\n                  f\"Channel: {net['channel']}\")\n\n    if wpa_tkip_networks:\n        print(f\"\\n[HIGH] WPA-TKIP Networks (Deprecated): {len(wpa_tkip_networks)}\")\n        for net in wpa_tkip_networks:\n            print(f\"  - SSID: {net['ssid']}, MAC: {net['mac']}, \"\n                  f\"Channel: {net['channel']}\")\n\n    if hidden_networks:\n        print(f\"\\n[MEDIUM] Hidden SSIDs Detected: {len(hidden_networks)}\")\n        for net in hidden_networks:\n            print(f\"  - MAC: {net['mac']}, Channel: {net['channel']}, \"\n                  f\"Vendor: {net['manufacturer']}\")\n\n    # Channel utilization analysis\n    channel_usage = defaultdict(int)\n    for ap in all_aps:\n        ch = ap.get('channel', 'Unknown')\n        channel_usage[ch] += 1\n\n    print(f\"\\n[INFO] Channel Utilization:\")\n    for ch, count in sorted(channel_usage.items()):\n        print(f\"  Channel {ch}: {count} APs\")\n\n    conn.close()\n\nif __name__ == '__main__':\n    db_path = sys.argv[1] if len(sys.argv) > 1 else 'Kismet-*.kismet'\n    analyze_kismet_db(db_path)\n```\n\n### Step 5: Detect Rogue Access Points\n\nCompare discovered APs against authorized inventory:\n\n```python\n#!\u002Fusr\u002Fbin\u002Fenv python3\n\"\"\"Detect rogue access points by comparing against authorized AP list.\"\"\"\n\nimport json\nimport sys\n\ndef load_authorized_aps(filepath: str) -> set:\n    \"\"\"Load authorized AP MAC addresses from file.\"\"\"\n    authorized = set()\n    with open(filepath, 'r') as f:\n        for line in f:\n            mac = line.strip().lower()\n            if mac and not mac.startswith('#'):\n                authorized.add(mac)\n    return authorized\n\ndef detect_rogues(kismet_json: str, authorized_file: str):\n    \"\"\"Compare discovered APs against authorized list.\"\"\"\n    authorized = load_authorized_aps(authorized_file)\n\n    with open(kismet_json, 'r') as f:\n        devices = json.load(f)\n\n    rogues = []\n    for device in devices:\n        mac = device.get('kismet.device.base.macaddr', '').lower()\n        dev_type = device.get('kismet.device.base.type', '')\n\n        if 'AP' in dev_type and mac not in authorized:\n            rogues.append({\n                'mac': mac,\n                'ssid': device.get('kismet.device.base.name', 'Unknown'),\n                'encryption': device.get('kismet.device.base.crypt', ''),\n                'channel': device.get('kismet.device.base.channel', ''),\n                'manufacturer': device.get('kismet.device.base.manuf', ''),\n                'signal': device.get('kismet.device.base.signal', {}).get(\n                    'kismet.common.signal.last_signal', 0),\n            })\n\n    if rogues:\n        print(f\"\\n[ALERT] {len(rogues)} ROGUE ACCESS POINTS DETECTED\\n\")\n        for rogue in rogues:\n            print(f\"  MAC: {rogue['mac']}\")\n            print(f\"  SSID: {rogue['ssid']}\")\n            print(f\"  Encryption: {rogue['encryption']}\")\n            print(f\"  Channel: {rogue['channel']}\")\n            print(f\"  Vendor: {rogue['manufacturer']}\")\n            print(f\"  Signal: {rogue['signal']} dBm\")\n            print()\n    else:\n        print(\"No rogue access points detected.\")\n\nif __name__ == '__main__':\n    if len(sys.argv) \u003C 3:\n        print(\"Usage: python detect_rogues.py \u003Ckismet_devices.json> \u003Cauthorized_aps.txt>\")\n        sys.exit(1)\n    detect_rogues(sys.argv[1], sys.argv[2])\n```\n\n## Assessment Checklist\n\n- [ ] All authorized APs identified and verified\n- [ ] Rogue\u002Funauthorized APs identified and located\n- [ ] Encryption types documented for all SSIDs\n- [ ] Hidden SSIDs discovered and documented\n- [ ] Client probe requests analyzed for sensitive patterns\n- [ ] Evil twin susceptibility assessed\n- [ ] WPS status checked on all APs\n- [ ] Signal coverage boundaries mapped\n- [ ] Guest network isolation verified\n- [ ] Management interfaces not exposed on wireless\n\n## Best Practices\n\n- **Written Authorization** - Always obtain signed authorization before performing wireless assessments\n- **Passive Only** - Use Kismet in passive mode; do not transmit deauth frames or probe requests\n- **Comprehensive Channel Coverage** - Scan both 2.4GHz and 5GHz bands including DFS channels\n- **Multiple Locations** - Perform captures from multiple physical locations for complete coverage\n- **Time Duration** - Capture for at least 30-60 minutes to observe intermittent devices\n- **GPS Mapping** - Use GPS to create heat maps for signal boundary analysis\n- **Baseline Comparison** - Maintain an authorized AP inventory and compare against each assessment\n\n## References\n\n- [Kismet Documentation](https:\u002F\u002Fwww.kismetwireless.net\u002Fdocs\u002F)\n- [CISA Kismet Resources](https:\u002F\u002Fwww.cisa.gov\u002Fresources-tools\u002Fservices\u002Fkismet)\n- [NIST SP 800-153 - Wireless Network Security](https:\u002F\u002Fcsrc.nist.gov\u002Fpublications\u002Fdetail\u002Fsp\u002F800-153\u002Ffinal)\n- [Wi-Fi Alliance WPA3 Specification](https:\u002F\u002Fwww.wi-fi.org\u002Fdiscover-wi-fi\u002Fsecurity)\n","|\n| Open (No encryption) | Insecure | Critical - all traffic visible |\n| WEP | Broken | Critical - crackable in minutes |\n| WPA-TKIP | Deprecated | High - known vulnerabilities |\n| WPA2-PSK (CCMP) | Acceptable | Medium - depends on passphrase strength |\n| WPA2-Enterprise (802.1X) | Recommended | Low - certificate-based |\n| WPA3-SAE | Best practice | Low - resistant to offline attacks |\n\n## Workflow\n\n### Step 1: Prepare Wireless Adapter\n\n```bash\n# Identify wireless interfaces\niwconfig\n\n# Check adapter capabilities\niw list | grep -A 10 \"Supported interface modes\"\n\n# Kill processes that may interfere\nsudo airmon-ng check kill\n\n# Enable monitor mode\nsudo ip link set wlan0 down\nsudo iw dev wlan0 set type monitor\nsudo ip link set wlan0 up\n\n# Verify monitor mode\niw dev wlan0 info | grep type\n```\n\n### Step 2: Configure and Launch Kismet\n\nEdit `\u002Fetc\u002Fkismet\u002Fkismet.conf`:\n\n```ini\n# Data sources\nsource=wlan0:name=WiFi-Monitor,channel_hop=true,channel_hoprate=5\u002Fsec\n\n# Logging configuration\nlog_types=kismet,pcapng\nlog_prefix=\u002Fopt\u002Fkismet\u002Flogs\u002Fassessment\n\n# Enable all 802.11 channels (2.4GHz and 5GHz)\nchannel_hop_speed=5\nchannel_list=IEEE80211:1,2,3,4,5,6,7,8,9,10,11,36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,165\n\n# GPS configuration (if available)\ngps=gpsd:host=localhost,port=2947\n\n# Alert configuration\nalert=ADVCRYPTCHANGE,5\u002Fmin,1\u002Fsec\nalert=BSSTIMESTAMP,5\u002Fmin,1\u002Fsec\nalert=CRYPTODROP,5\u002Fmin,1\u002Fsec\nalert=DISASSOCTRAFFIC,10\u002Fmin,1\u002Fsec\nalert=DEAUTHFLOOD,10\u002Fmin,2\u002Fsec\nalert=PROBENOMFP,5\u002Fmin,1\u002Fsec\n```\n\nLaunch Kismet:\n\n```bash\n# Start Kismet server\nsudo kismet -c wlan0\n\n# Access web interface\n# Open browser to http:\u002F\u002Flocalhost:2501\n# Default credentials: kismet \u002F kismet (change immediately)\n```\n\n### Step 3: Conduct Assessment Scans\n\n**Rogue Access Point Detection:**\n\n```bash\n# Export device list via Kismet REST API\ncurl -u kismet:kismet http:\u002F\u002Flocalhost:2501\u002Fdevices\u002Fsummary\u002Fdevices.json | \\\n    python3 -m json.tool > all_devices.json\n\n# Filter for access points\ncurl -u kismet:kismet \\\n    'http:\u002F\u002Flocalhost:2501\u002Fdevices\u002Fsummary\u002Fdevices.json' \\\n    -d 'json={\"fields\":[\"kismet.device.base.macaddr\",\"kismet.device.base.name\",\"kismet.device.base.type\",\"kismet.device.base.crypt\",\"kismet.device.base.channel\",\"kismet.device.base.manuf\",\"dot11.device\u002Fdot11.device.advertised_ssid_map\u002Fdot11.advertisedssid.ssid\"]}' \\\n    > access_points.json\n```\n\n**Client Probe Analysis:**\n\nProbe requests reveal networks that clients have previously connected to, which can indicate:\n- Corporate devices connecting to insecure home networks\n- Devices searching for known-evil SSIDs (evil twin susceptibility)\n- Unauthorized personal devices in corporate space\n\n### Step 4: Analyze Results\n\nPython analysis script for Kismet database:\n\n```python\n#!\u002Fusr\u002Fbin\u002Fenv python3\n\"\"\"Analyze Kismet capture database for wireless security findings.\"\"\"\n\nimport sqlite3\nimport json\nimport sys\nfrom collections import defaultdict\n\ndef analyze_kismet_db(db_path: str):\n    \"\"\"Analyze Kismet SQLite database for security issues.\"\"\"\n    conn = sqlite3.connect(db_path)\n    cursor = conn.cursor()\n\n    findings = []\n\n    # Query all devices\n    cursor.execute(\"\"\"\n        SELECT devmac, type, device\n        FROM devices\n    \"\"\")\n\n    devices = cursor.fetchall()\n    ap_count = 0\n    client_count = 0\n    open_networks = []\n    wep_networks = []\n    wpa_tkip_networks = []\n    hidden_networks = []\n    all_aps = []\n\n    for mac, dev_type, device_json in devices:\n        try:\n            device = json.loads(device_json)\n        except json.JSONDecodeError:\n            continue\n\n        base = device.get('kismet.device.base.type', '')\n\n        if 'Wi-Fi AP' in base or 'Wi-Fi Device' in base:\n            ap_count += 1\n            ssid_map = device.get('dot11.device', {}).get(\n                'dot11.device.advertised_ssid_map', []\n            )\n            crypt = device.get('kismet.device.base.crypt', '')\n            name = device.get('kismet.device.base.name', 'Unknown')\n            channel = device.get('kismet.device.base.channel', '')\n            manuf = device.get('kismet.device.base.manuf', 'Unknown')\n\n            ap_info = {\n                'mac': mac,\n                'ssid': name,\n                'encryption': crypt,\n                'channel': channel,\n                'manufacturer': manuf,\n            }\n            all_aps.append(ap_info)\n\n            if 'None' in crypt or crypt == '':\n                open_networks.append(ap_info)\n            elif 'WEP' in crypt:\n                wep_networks.append(ap_info)\n            elif 'WPA+TKIP' in crypt and 'AES' not in crypt:\n                wpa_tkip_networks.append(ap_info)\n\n            for ssid_entry in ssid_map:\n                if isinstance(ssid_entry, dict):\n                    ssid = ssid_entry.get('dot11.advertisedssid.ssid', '')\n                    if ssid == '' or ssid is None:\n                        hidden_networks.append(ap_info)\n\n        elif 'Wi-Fi Client' in base:\n            client_count += 1\n\n    # Generate findings\n    print(f\"\\n{'='*70}\")\n    print(\"WIRELESS SECURITY ASSESSMENT REPORT\")\n    print(f\"{'='*70}\")\n    print(f\"\\nTotal Access Points Detected: {ap_count}\")\n    print(f\"Total Clients Detected: {client_count}\")\n\n    if open_networks:\n        print(f\"\\n[CRITICAL] Open Networks (No Encryption): {len(open_networks)}\")\n        for net in open_networks:\n            print(f\"  - SSID: {net['ssid']}, MAC: {net['mac']}, \"\n                  f\"Channel: {net['channel']}, Vendor: {net['manufacturer']}\")\n\n    if wep_networks:\n        print(f\"\\n[CRITICAL] WEP-Encrypted Networks: {len(wep_networks)}\")\n        for net in wep_networks:\n            print(f\"  - SSID: {net['ssid']}, MAC: {net['mac']}, \"\n                  f\"Channel: {net['channel']}\")\n\n    if wpa_tkip_networks:\n        print(f\"\\n[HIGH] WPA-TKIP Networks (Deprecated): {len(wpa_tkip_networks)}\")\n        for net in wpa_tkip_networks:\n            print(f\"  - SSID: {net['ssid']}, MAC: {net['mac']}, \"\n                  f\"Channel: {net['channel']}\")\n\n    if hidden_networks:\n        print(f\"\\n[MEDIUM] Hidden SSIDs Detected: {len(hidden_networks)}\")\n        for net in hidden_networks:\n            print(f\"  - MAC: {net['mac']}, Channel: {net['channel']}, \"\n                  f\"Vendor: {net['manufacturer']}\")\n\n    # Channel utilization analysis\n    channel_usage = defaultdict(int)\n    for ap in all_aps:\n        ch = ap.get('channel', 'Unknown')\n        channel_usage[ch] += 1\n\n    print(f\"\\n[INFO] Channel Utilization:\")\n    for ch, count in sorted(channel_usage.items()):\n        print(f\"  Channel {ch}: {count} APs\")\n\n    conn.close()\n\nif __name__ == '__main__':\n    db_path = sys.argv[1] if len(sys.argv) > 1 else 'Kismet-*.kismet'\n    analyze_kismet_db(db_path)\n```\n\n### Step 5: Detect Rogue Access Points\n\nCompare discovered APs against authorized inventory:\n\n```python\n#!\u002Fusr\u002Fbin\u002Fenv python3\n\"\"\"Detect rogue access points by comparing against authorized AP list.\"\"\"\n\nimport json\nimport sys\n\ndef load_authorized_aps(filepath: str) -> set:\n    \"\"\"Load authorized AP MAC addresses from file.\"\"\"\n    authorized = set()\n    with open(filepath, 'r') as f:\n        for line in f:\n            mac = line.strip().lower()\n            if mac and not mac.startswith('#'):\n                authorized.add(mac)\n    return authorized\n\ndef detect_rogues(kismet_json: str, authorized_file: str):\n    \"\"\"Compare discovered APs against authorized list.\"\"\"\n    authorized = load_authorized_aps(authorized_file)\n\n    with open(kismet_json, 'r') as f:\n        devices = json.load(f)\n\n    rogues = []\n    for device in devices:\n        mac = device.get('kismet.device.base.macaddr', '').lower()\n        dev_type = device.get('kismet.device.base.type', '')\n\n        if 'AP' in dev_type and mac not in authorized:\n            rogues.append({\n                'mac': mac,\n                'ssid': device.get('kismet.device.base.name', 'Unknown'),\n                'encryption': device.get('kismet.device.base.crypt', ''),\n                'channel': device.get('kismet.device.base.channel', ''),\n                'manufacturer': device.get('kismet.device.base.manuf', ''),\n                'signal': device.get('kismet.device.base.signal', {}).get(\n                    'kismet.common.signal.last_signal', 0),\n            })\n\n    if rogues:\n        print(f\"\\n[ALERT] {len(rogues)} ROGUE ACCESS POINTS DETECTED\\n\")\n        for rogue in rogues:\n            print(f\"  MAC: {rogue['mac']}\")\n            print(f\"  SSID: {rogue['ssid']}\")\n            print(f\"  Encryption: {rogue['encryption']}\")\n            print(f\"  Channel: {rogue['channel']}\")\n            print(f\"  Vendor: {rogue['manufacturer']}\")\n            print(f\"  Signal: {rogue['signal']} dBm\")\n            print()\n    else:\n        print(\"No rogue access points detected.\")\n\nif __name__ == '__main__':\n    if len(sys.argv) \u003C 3:\n        print(\"Usage: python detect_rogues.py \u003Ckismet_devices.json> \u003Cauthorized_aps.txt>\")\n        sys.exit(1)\n    detect_rogues(sys.argv[1], sys.argv[2])\n```\n\n## Assessment Checklist\n\n- [ ] All authorized APs identified and verified\n- [ ] Rogue\u002Funauthorized APs identified and located\n- [ ] Encryption types documented for all SSIDs\n- [ ] Hidden SSIDs discovered and documented\n- [ ] Client probe requests analyzed for sensitive patterns\n- [ ] Evil twin susceptibility assessed\n- [ ] WPS status checked on all APs\n- [ ] Signal coverage boundaries mapped\n- [ ] Guest network isolation verified\n- [ ] Management interfaces not exposed on wireless\n\n## Best Practices\n\n- **Written Authorization** - Always obtain signed authorization before performing wireless assessments\n- **Passive Only** - Use Kismet in passive mode; do not transmit deauth frames or probe requests\n- **Comprehensive Channel Coverage** - Scan both 2.4GHz and 5GHz bands including DFS channels\n- **Multiple Locations** - Perform captures from multiple physical locations for complete coverage\n- **Time Duration** - Capture for at least 30-60 minutes to observe intermittent devices\n- **GPS Mapping** - Use GPS to create heat maps for signal boundary analysis\n- **Baseline Comparison** - Maintain an authorized AP inventory and compare against each assessment\n\n## References\n\n- [Kismet Documentation](https:\u002F\u002Fwww.kismetwireless.net\u002Fdocs\u002F)\n- [CISA Kismet Resources](https:\u002F\u002Fwww.cisa.gov\u002Fresources-tools\u002Fservices\u002Fkismet)\n- [NIST SP 800-153 - Wireless Network Security](https:\u002F\u002Fcsrc.nist.gov\u002Fpublications\u002Fdetail\u002Fsp\u002F800-153\u002Ffinal)\n- [Wi-Fi Alliance WPA3 Specification](https:\u002F\u002Fwww.wi-fi.org\u002Fdiscover-wi-fi\u002Fsecurity)\n",{"name":5,"domain":28,"description":7},"main","a91f1293287ffa9f4f1b8f486cd6e835a1568c84","skills\u002Fnet-wireless-kismet","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace","https:\u002F\u002Fgithub.com\u002FDCx7C5","#Python","2026-09-01 11:21:00",{"source":8,"skillName":5,"commands":48,"prompt":58,"zipAvailable":59},[49,52,55],{"tool":50,"command":51},"npx","npx skills add DCx7C5\u002Fai-marketplace --skill net-wireless-kismet",{"tool":53,"command":54},"bunx","bunx skills add DCx7C5\u002Fai-marketplace --skill net-wireless-kismet",{"tool":56,"command":57},"pnpm","pnpm dlx skills add DCx7C5\u002Fai-marketplace --skill net-wireless-kismet","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fnet-wireless-kismet\u002FSKILL.md",true,[61],{"path":62,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":65,"sourceHtmlUrl":66},"index.json","REFERENCE","参考文档",656,"https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fnet-wireless-kismet\u002Findex.json",[68,93,115,137,159,175],{"skillNo":69,"name":70,"nameZh":6,"description":71,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":72,"categories":73,"keywords":74,"publishedAt":35},"01M71HAPZ01KQ30RKTB0FFSQ05","services-wmi-persistence-detect","Detect WMI event subscription persistence by enumerating ActiveScriptEventConsumer, CommandLineEventConsumer, and permanent subscriptions in the WMI repository.","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fwindows\u002Fservices\u002Fwmi\u002Fpersistence\u002Fdetect\u002FSKILL.md",[],[75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,28,92],"services","detect","services wmi persistence detect","wmi","persistence","de","cm","process","activescript","event","subscriptions","commandline-consumer","repository","subscription","event-subscription","t1546.003","forensics","process-forensics",{"skillNo":94,"name":95,"nameZh":6,"description":96,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":99,"publishedAt":35},"01M71HAK6JTTTS229T17WJMMCG","services-wmi-exec-exploit","Perform lateral movement across Windows networks using WMI-based remote execution techniques including Impacket wmiexec.py, CrackMapExec, and native WMI commands for stealthy post-exploitation during red team engagements.","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fwindows\u002Fservices\u002Fwmi\u002Fexec\u002Fexploit\u002FSKILL.md",[],[100,75,101,78,102,103,26,28,104,105,106,107,108,109,80,110,111,112,113,114],"exploit","services wmi exec exploit","exec","remote","Bash","analysis","team","across","crackmapexec","native","command","lateral movement","read","lateral-movement","Impacket",{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":121,"publishedAt":35},"01M71HAG6MHKNQV8KDZKMT4886","registry-artifact-extract","Extract and analyze Windows Registry hives to uncover user activity, installed software, autostart entries, and evidence of system compromise.","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fwindows\u002Fregistry\u002Fartifact\u002Fextract\u002FSKILL.md",[],[122,123,124,125,126,127,28,104,128,105,129,130,80,112,131,132,133,134,135,136],"artifact","registry","registry artifact extract","extract","evidence-collection","artifact-analysis","collection","analyze","uncover","software","activity","digital-forensics","windows-registry","regripper","sonnet",{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":141,"categories":142,"keywords":143,"publishedAt":35},"01M71HACR4A8XTWTTSXK4124AA","processes-token-impersonate-detect","Detect Windows token impersonation and privilege abuse including SeImpersonatePrivilege exploitation via Potato attacks and token stealing techniques.","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fwindows\u002Fprocesses\u002Ftoken\u002Fimpersonate\u002Fdetect\u002FSKILL.md",[],[76,144,145,146,147,148,149,81,150,28,92,151,152,153,154,155,156,157,158,80],"processes token impersonate detect","token","processes","attacks","windows","escalation","techniques","privilege-escalation","seimpersonate","token-impersonation","printspoofer","exploitation","potato","impersonation","via",{"skillNo":160,"name":161,"nameZh":6,"description":162,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":163,"categories":164,"keywords":165,"publishedAt":35},"01M71HAABSB4Z6QFSXEG00R4RK","processes-thread-injection-detect","Detect Windows thread injection techniques including CreateRemoteThread, QueueUserAPC, NtCreateThreadEx, and thread hijacking via process memory analysis.","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fwindows\u002Fprocesses\u002Fthread\u002Finjection\u002Fdetect\u002FSKILL.md",[],[166,167,76,168,146,148,169,81,170,150,28,92,105,171,172,173,174,158,80,82],"thread","processes thread injection detect","injection","memory","process-injection","api","apc-injection","thread-injection","nt-api",{"skillNo":176,"name":177,"nameZh":6,"description":178,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":179,"categories":180,"keywords":181,"publishedAt":35},"01M71HA7H311V5G14WMX58HQSS","processes-hollow-technique-detect","Detect process hollowing (RunPE) by identifying processes with mismatched image paths between PEB and VAD tree, or unmapped PE headers in memory.","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fwindows\u002Fprocesses\u002Fhollow\u002Ftechnique\u002Fdetect\u002FSKILL.md",[],[182,76,146,183,169,81,184,185,28,92,186,187,188,189,190,191,80,82,192,193],"processes hollow technique detect","tree","memory-forensics","process-hollow","peb","runpe","image","pe-header","in memory","with","mismatched","headers"]