Is it possible to watch several wifi channels at the same time with a few ESP32 boards?

Nov 02, 2026 Last reply: 5 hours ago 4 Replies

First reply

hollow_runner_1959

The short answer is that Wireshark won't automatically stitch together disparate live serial captures perfectly, because each ESP32 maintains its own local clock, meaning the packets arrive at your host machine in an unsynchronized order. While Kismet is designed for radio…

Read the full reply

So I've been messing around with monitoring the wifi traffic around my house and I keep running into the same problem. If I put one ESP32 into monitor mode it can only sit on one channel, right? So if I park it on channel 6 I'm basicly blind to everything happening on 1 and 11. I've tried letting it hop around but it feels like I'm always missing chunks of traffic whenever it jumps. I've got like four or five boards sitting in a drawer doing nothing, so my idea was to dedicate one board per channel and have them all listen at once. Each one would spit out what it captures over USB to my laptop. The part I'm stuck on is what to do with all those streams afterward. Can Wireshark acutally merge several live captures into one timeline, or do I need some middle program that glues them togehter first?



Also wondering wether Kismet would handle this better since it seems built for multiple capture sources. Would it accept several usb serial feeds coming in at the same time without choking? Or am I overcomplicating this and there's a simpler way to get full band coverage without the blind spots? Would love to hear how anyone else has wired something like this up.


The short answer is that Wireshark won't automatically stitch together disparate live serial captures perfectly, because each ESP32 maintains its own local clock, meaning the packets arrive at your host machine in an unsynchronized order. While Kismet is designed for radio detection, it might struggle to efficiently aggregate and manage several raw USB data feeds simultaneously, expecially if you are streaming every single packet. For what you are doing, I usally recomend building a simple data collector in Python or using a scripting language that allows you to read the PCAP streams concurrently and re-sort them based on the capture timestamps embedded by the ESP32. That's the only way to truly glue them into one chronological timeline.

If you run into issues where some packets appear way out of order, it's almost certainly because the USB latency and the onboard processing time on each board differ. If you want a semi-automated solution without writing a massive script from scratch, look into tools that can process multiple network interfaces simultaneously and output a single combined file, but you'll still have to deal with the time offsets.

Running dedicated capture nodes per channel is definitely the right approach to eliminate the blind spots, but the downstream analysis is the hard part. You might consider logging the capture time on the ESP32 side right before it sends the data, so when you merge the streams, you can apply an offset adjustment based on the known delay of that paticular board. It's less about the merging software and more about synchronizing the time data first. It's definitely a tricky synchronization problem.

I ran a similar setup with three boards pinned to 1, 6 and 11, and one thing I noticed is the serial link itself becomes the bottleneck. If you stream full frames with the radiotap header intact, the ESP32 chokes and silently drops packets under any real traffic load. I ended up trimming to just the MAC headers before sending, which kept things stable, though it does limit what you can analyze later. Also worth checking what channels your neighbors actually use, because in my area plenty of routers sit off the standard three, so even a per-channel fleet leaves gaps unless you pick your pins after a scan. Did you settle on a particular firmware for the capture side?

Agreed on the clock thing being the real headache. In my setup I noticed the boards don't just start offset, they drift apart over time too, so a one-time offset fix slowly falls apart after an hour or so of running. What worked for me was having each board log a marker line every minute, then a small script lines those markers up against each other and recalculates the offsets on the fly. Curious if anyone else found the drift got worse when the boards heated up, mine seemed to wander more on a warm day.

Update: took the advice about trimming the frames down and the serial link stopped choking, so that part is fixed. Also added the minute marker lines for the drift issue. New problem though, the markers help but stitching still feels clumsy. Has anyone just had the laptop timestamp each line as it arrives instead, and let the host clock be the single reference? Wondering if that loses too much accuracy.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required