AirPlay Dual‑Mode Discovery Scanner for Flipper Zero ESP32 WiFi Dev Board
好的,我现在需要帮用户总结一篇文章的内容,控制在100字以内。用户已经提供了文章的详细内容,包括标题、作者、测试环境、功能描述以及代码示例。 首先,我要确定文章的主题。看起来这是一个关于AirPlay双模式扫描器的项目,使用ESP32开发板连接到Flipper Zero。项目分为两种模式:WiFi mDNS模式和嗅探模式。 接下来,我需要提取关键信息。WiFi模式下,设备连接到指定网络,监听mDNS流量,检测AirPlay服务广告。嗅探模式则启用ESP32的promiscuous模式,被动监控无线流量,搜索AirPlay标识。这两种模式分别适用于不同的场景:WiFi模式需要密码但更准确,嗅探模式无需密码但被动检测。 然后,我需要确定文章提到的可检测设备类型:Apple TV、iOS设备和macOS系统。 最后,我需要将这些信息浓缩成一个简洁的总结,确保在100字以内,并且不使用“文章内容总结”之类的开头语。 现在组织语言:介绍项目名称、两种工作模式及其特点,以及可检测的设备类型。 </think> 该项目实现了一款基于ESP32 WiFi开发板的AirPlay双模式扫描器,支持通过mDNS网络发现和被动嗅探两种方式检测Apple TV、iOS及macOS设备。 2026-3-8 15:38:7 Author: cxsecurity.com(查看原文) 阅读量:7 收藏

AirPlay Dual‑Mode Discovery Scanner for Flipper Zero ESP32 WiFi Dev Board

============================================================================================================================================= | # Title : AirPlay Dual‑Mode Discovery Scanner for Flipper Zero ESP32 WiFi Dev Board | | # Author : indoushka | | # Tested on : windows 11 Fr(Pro) / browser : Mozilla firefox 147.0.4 (64 bits) | | # Vendor : https://www.apple.com/airplay/ | ============================================================================================================================================= [+] Summary : This project implements a dual‑mode AirPlay discovery scanner using an ESP32 WiFi Dev Board attached to a Flipper Zero. The tool is designed strictly for network discovery and visibility, not exploitation. The scanner supports two operating modes: [+] WiFi mDNS Mode (Connected Mode) Connects to a specified WiFi network. Listens to multicast DNS (mDNS) traffic on UDP port 5353. Detects AirPlay service advertisements: _airplay._tcp.local _raop._tcp.local Identifies unique device IP addresses. Prevents duplicate counting. Displays total discovered AirPlay devices. This mode provides higher accuracy because it operates within the network and processes legitimate multicast service announcements. [+] Sniffer Mode (Promiscuous Mode – No WiFi Password Required) Enables ESP32 promiscuous mode. Passively monitors nearby wireless traffic. Searches packet payloads for AirPlay service identifiers. Counts detected broadcast announcements. This mode does not connect to any network and does not transmit packets. It passively inspects broadcast traffic only. [+] What It Detects The scanner may discover devices such as: Apple TV Devices running iOS Systems running macOS [+] POC : #include <WiFi.h> #include <WiFiUdp.h> #include "esp_wifi.h" WiFiUDP udp; const char* ssid = "YOUR_WIFI"; const char* password = "YOUR_PASSWORD"; const int MDNS_PORT = 5353; const IPAddress multicastIP(224, 0, 0, 251); #define MAX_DEVICES 50 IPAddress discoveredIPs[MAX_DEVICES]; int deviceCount = 0; bool wifiMode = true; bool alreadyDiscovered(IPAddress ip) { for (int i = 0; i < deviceCount; i++) { if (discoveredIPs[i] == ip) return true; } return false; } void startWiFiMode() { Serial.println("Starting WiFi mDNS Mode..."); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("\nConnected!"); Serial.print("IP: "); Serial.println(WiFi.localIP()); udp.beginMulticast(WiFi.localIP(), multicastIP, MDNS_PORT); } void sniffer(void* buf, wifi_promiscuous_pkt_type_t type) { wifi_promiscuous_pkt_t *pkt = (wifi_promiscuous_pkt_t*)buf; uint8_t *payload = pkt->payload; for (int i = 0; i < pkt->rx_ctrl.sig_len; i++) { if (i < pkt->rx_ctrl.sig_len - 12) { if (memcmp(payload + i, "_airplay._tcp", 13) == 0 || memcmp(payload + i, "_raop._tcp", 10) == 0) { deviceCount++; Serial.println("================================="); Serial.println("AirPlay Broadcast Detected (Sniffer)"); Serial.print("Total Detected: "); Serial.println(deviceCount); Serial.println("================================="); break; } } } } void startSnifferMode() { Serial.println("Starting Sniffer Mode..."); WiFi.mode(WIFI_MODE_NULL); esp_wifi_set_promiscuous(true); esp_wifi_set_promiscuous_rx_cb(&sniffer); } void setup() { Serial.begin(115200); delay(1000); Serial.println("AirPlay Dual Mode Scanner"); Serial.println("Type 1 for WiFi Mode"); Serial.println("Type 2 for Sniffer Mode"); while (!Serial.available()) { delay(100); } char choice = Serial.read(); if (choice == '2') { wifiMode = false; startSnifferMode(); } else { wifiMode = true; startWiFiMode(); } } void loop() { if (wifiMode) { int packetSize = udp.parsePacket(); if (packetSize) { char packet[512]; int len = udp.read(packet, sizeof(packet) - 1); if (len > 0) packet[len] = 0; String data = String(packet); if (data.indexOf("_airplay._tcp") >= 0 || data.indexOf("_raop._tcp") >= 0) { IPAddress remoteIP = udp.remoteIP(); if (!alreadyDiscovered(remoteIP) && deviceCount < MAX_DEVICES) { discoveredIPs[deviceCount] = remoteIP; deviceCount++; Serial.println("================================="); Serial.println("New AirPlay Device Found (WiFi)"); Serial.print("IP: "); Serial.println(remoteIP); Serial.print("Total Devices: "); Serial.println(deviceCount); Serial.println("================================="); } } } } delay(10); } Greetings to :============================================================================== jericho * Larry W. Cashdollar * r00t * Yougharta Ghenai * Malvuln (John Page aka hyp3rlinx)| ============================================================================================



 

Thanks for you comment!
Your message is in quarantine 48 hours.

{{ x.nick }}

|

Date:

{{ x.ux * 1000 | date:'yyyy-MM-dd' }} {{ x.ux * 1000 | date:'HH:mm' }} CET+1


{{ x.comment }}


Copyright 2026, cxsecurity.com

文章来源: https://cxsecurity.com/issue/WLB-2026030010
如有侵权请联系:admin#unsafe.sh