<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Warwalking on Corvus Blog</title><link>https://nicoleman0.github.io/blog-site/tags/warwalking/</link><description>Recent content in Warwalking on Corvus Blog</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sat, 07 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://nicoleman0.github.io/blog-site/tags/warwalking/index.xml" rel="self" type="application/rss+xml"/><item><title>Building a Pwnagotchi Stats Dashboard</title><link>https://nicoleman0.github.io/blog-site/posts/pwnagotchi-stats-dashboard/</link><pubDate>Sat, 07 Mar 2026 00:00:00 +0000</pubDate><guid>https://nicoleman0.github.io/blog-site/posts/pwnagotchi-stats-dashboard/</guid><description>&lt;p>I&amp;rsquo;ve been warwalking around London with my Pwnagotchi (named Bootsy) and ended up with a directory full of &lt;code>.pcap&lt;/code> files and no clean way to visualise what I&amp;rsquo;d actually captured. This post documents how I built a single-script tool to parse those captures and generate a self-contained HTML dashboard.&lt;/p>
&lt;h2 id="the-problem">The Problem&lt;/h2>
&lt;p>Pwnagotchi stores captured handshakes as individual &lt;code>.pcap&lt;/code> files, named in a loosely consistent format:&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>SSID_aabbccddeeff.pcap
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>HASH_SSID_aabbccddeeff.pcap
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>HASH_aabbccddeeff.pcap
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>The BSSID is always the last underscore-separated segment — a 12-character hex string without colons. SSIDs appear before it, sometimes prefixed with what looks like a session hash. There&amp;rsquo;s no single canonical format, which meant any parsing logic had to handle all three variants.&lt;/p></description></item></channel></rss>