# Feature Research **Domain:** Network traffic sonification CLI tool (packet capture → ambient MP3) **Researched:** 2026-03-24 **Confidence:** MEDIUM — this is a niche domain; most comparable tools are research prototypes or GUI applications, not CLI tools. Table stakes are derived from tcpdump/packet-capture CLI conventions and sonification research literature. --- ## Feature Landscape ### Table Stakes (Users Expect These) Features users assume exist. Missing these = product feels incomplete. | Feature | Why Expected | Complexity | Notes | |---------|--------------|------------|-------| | Network interface selection (`-i eth0`) | tcpdump/tshark convention; every capture tool has this | LOW | `gopacket` exposes interface list; needs `--list-interfaces` companion flag | | Output file path flag (`-o output.mp3`) | Any file-producing CLI must let you name the output | LOW | Sensible default (e.g. `netsynth-.mp3`) reduces friction | | Graceful Ctrl+C capture stop with file save | Users expect the tool to cleanly finalize the MP3 on interrupt | MEDIUM | Need signal handler; partial synthesis must be flushed to encoder before exit | | Per-protocol sound distinction | Core value prop: ping sounds different from HTTPS noise | MEDIUM | Minimum recognizable set: ICMP, DNS, TCP (port 443), TCP (other), UDP | | Packet count / traffic summary on exit | Every capture tool prints capture statistics; users want to know what was heard | LOW | Print to stderr so it doesn't interfere with stdout pipeline use | | Privilege error message | `pcap` silently fails or panics without root/CAP_NET_RAW; users need a clear message | LOW | Detect EACCES / EPERM on open; print actionable message (`sudo` or capability hint) | | List available interfaces (`--list-interfaces`) | Users don't know interface names on unfamiliar machines | LOW | Wrap `pcap.FindAllDevs()`; print name + description | | Minimum viable duration guard | Zero-packet capture should not produce a corrupt/empty MP3 | LOW | Check sample count before encoding; exit with clear error if nothing was captured | ### Differentiators (Competitive Advantage) Features that set the product apart. Not required, but valuable. | Feature | Value Proposition | Complexity | Notes | |---------|-------------------|------------|-------| | Auto-clustering of unrecognized traffic | Unknown traffic still gets a unique voice instead of being silently dropped — honest audio fingerprint | HIGH | Requires unsupervised clustering (e.g. flow-feature vector → k-means or simple hash bucketing); each cluster gets a deterministic frequency mapping | | Ambient/drone style output (layered sine harmonics) | Distinct from event-ping tools (Peep, SoNSTAR); slow tonal evolution makes long captures listenable | HIGH | Synthesize per-protocol drone layers; amplitude driven by time-windowed packet rate; mix layers before encoding | | Time-windowed amplitude evolution | Traffic volume changes over time are reflected in the audio; the mix evolves rather than being static | MEDIUM | Segment capture into N-second windows; compute per-layer gain per window; apply smooth gain ramps between windows | | Configurable time window duration (`--window 10`) | Lets users tune responsiveness vs. smoothness; research tools (SoNSTAR) expose this parameter | LOW | Default 10s; range 1–60s is sensible | | BPF capture filter support (`--filter "tcp port 443"`) | Power users want to scope what gets sonified; tcpdump BPF syntax is universally known | MEDIUM | Pass expression directly to `gopacket`/`pcap`; validate at startup before capture begins | | Offline pcap file input (`--read capture.pcap`) | Lets users sonify historical captures, not just live traffic; useful for analysis and demos | MEDIUM | Replace live capture source with `pcap.OpenOffline()`; time-compress or time-expand to fixed output duration | | Verbose protocol activity log to stderr (`--verbose`) | Developers and curious users want to see what was classified | LOW | Print per-window protocol breakdown table to stderr during capture | | Configurable output duration when reading pcap file (`--duration 30`) | Offline pcap may span hours; need ability to compress to a target audio length | LOW | Only meaningful with `--read`; scale time windows proportionally | | Single static binary (`go build`) | Eliminates dependency hell on target machines | LOW (build-time) | Go native; no CGo for MP3 encoding avoids runtime `.so` requirements — choose a pure-Go MP3 encoder | ### Anti-Features (Commonly Requested, Often Problematic) Features that seem good but create problems. | Feature | Why Requested | Why Problematic | Alternative | |---------|---------------|-----------------|-------------| | Real-time audio playback (speakers while capturing) | Feels more immediate; Peep and dmeldrum6/Network-Sonification do this | Requires platform audio APIs (ALSA/CoreAudio/WASAPI), cross-platform complexity triples; conflicts with file-output simplicity; latency/buffering bugs; CGo or external library dependency | File output only; user can pipe MP3 to `mpv`/`afplay` themselves after capture | | GUI or web dashboard | Visually richer; existing tools like Network-Sonification are GUI-first | Negates single-binary CLI value; doubles scope; Go GUI toolkits are immature or require CGo | Emit stderr text summary; let external tools consume the MP3 | | Custom sound mapping configuration file | Power-user request; SoNSTAR supports per-user sound uploads | Configuration surface area is large; predefined + auto-cluster covers the use case adequately for v1; config files introduce parsing/validation work | Well-chosen defaults + auto-cluster for unknowns; defer custom mapping to v2 | | Rhythmic/percussive output mode | Some sonification tools use discrete note triggers per packet | Ambient/drone style is the deliberate differentiator; per-packet triggers at high traffic volumes produce noise, not information | Stick to amplitude-modulated harmonic drones; volume changes carry the rhythm implicitly | | Deep-packet inspection / payload parsing | Users might want to hear HTTP body content, TLS handshake details | Requires reassembly, encryption handling, legal concerns about payload interception; massive complexity | Classify by header fields only (port, protocol, flags, packet size); that is sufficient for the audio fingerprint goal | | Streaming MP3 output (write while capturing) | Real-time preview of what's being synthesized | MP3 frame boundaries and VBR headers require the full file to be finalized; streaming output would produce a non-standard file | Write to temp buffer during capture, finalize and flush on Ctrl+C | | Anomaly detection / alerting | Natural extension once you have classified traffic | Adds a monitoring-tool responsibility on top of the audio-fingerprint responsibility; these are different user jobs | Stick to "produce an audio fingerprint"; anomaly detection is a separate tool | --- ## Feature Dependencies ``` [Interface selection / list-interfaces] └──required-by──> [Live capture] [Live capture] ──OR── [Offline pcap input] └──required-by──> [Protocol classification] └──required-by──> [Auto-clustering of unknowns] └──required-by──> [Per-protocol drone layer synthesis] └──required-by──> [Time-windowed amplitude evolution] └──required-by──> [Layer mixing] └──required-by──> [MP3 encoding & file output] [BPF capture filter] ──enhances──> [Live capture] [Configurable time window] ──tunes──> [Time-windowed amplitude evolution] [Offline pcap + --duration] ──requires──> [Offline pcap input] [Verbose flag] ──enhances──> [Protocol classification] (reporting only, no data dependency) [Graceful Ctrl+C] ──requires──> [MP3 encoding & file output] (must flush before exit) ``` ### Dependency Notes - **Protocol classification requires Live capture OR Offline pcap:** These are the two data sources; everything downstream is source-agnostic. - **Time-windowed amplitude evolution requires Protocol classification:** You need classified packet counts per window before you can derive per-layer gain values. - **MP3 encoding requires Layer mixing:** You cannot encode until all layers for a time window are mixed to a PCM buffer. - **Graceful Ctrl+C requires MP3 encoding:** The signal handler must trigger the encode-and-flush path, not just `os.Exit`. - **Auto-clustering enhances Protocol classification:** It extends classification to traffic that doesn't match predefined rules; the audio pipeline treats cluster-assigned tones identically to predefined protocol tones. - **BPF filter conflicts with Offline pcap input (partial):** `pcap` supports BPF on offline files, so this works technically, but user expectation for offline mode is usually "sonify all traffic in the file" — document the interaction clearly. --- ## MVP Definition ### Launch With (v1) Minimum viable product — what's needed to validate the concept. - [ ] Network interface selection (`-i`) and `--list-interfaces` — required for capture - [ ] Live packet capture with Ctrl+C stop — core interaction model - [ ] Protocol classification: ICMP, DNS, TCP/443, TCP/other, UDP — minimum set for a recognizable fingerprint - [ ] Auto-clustering of unrecognized traffic (simple hash-bucketing by port/proto is acceptable for v1) — honest representation of full traffic - [ ] Per-protocol ambient drone layer synthesis (sine harmonics, amplitude modulated by packet rate) — core differentiator - [ ] Time-windowed amplitude evolution (10s default) — makes the output dynamic - [ ] MP3 encoding and file output with sensible default filename — deliverable artifact - [ ] Capture statistics summary on exit (stderr) — basic UX courtesy - [ ] Privilege error detection and clear message — prevents silent failure ### Add After Validation (v1.x) Features to add once core is working. - [ ] BPF capture filter (`--filter`) — add when users report wanting to scope captures - [ ] Offline pcap file input (`--read`) — add when users want to sonify historical captures - [ ] Verbose protocol activity log (`--verbose`) — add when debugging/demo use cases emerge - [ ] Configurable time window duration (`--window`) — add if users report default feels too slow or too fast - [ ] Configurable output duration for pcap input (`--duration`) — depends on offline input being implemented ### Future Consideration (v2+) Features to defer until product-market fit is established. - [ ] Custom sound mapping configuration — defer; needs user research on what customization actually matters - [ ] Improved clustering algorithm (k-means on flow features vs. simple hash) — defer until users report clusters feel meaningless - [ ] Multi-interface capture — defer; adds complexity to packet deduplication --- ## Feature Prioritization Matrix | Feature | User Value | Implementation Cost | Priority | |---------|------------|---------------------|----------| | Interface selection + list-interfaces | HIGH | LOW | P1 | | Live capture with Ctrl+C stop | HIGH | LOW | P1 | | Protocol classification (ICMP, DNS, TCP, UDP) | HIGH | MEDIUM | P1 | | Ambient drone synthesis (per-protocol layers) | HIGH | HIGH | P1 | | Time-windowed amplitude evolution | HIGH | MEDIUM | P1 | | MP3 encoding + file output | HIGH | MEDIUM | P1 | | Capture stats on exit | MEDIUM | LOW | P1 | | Privilege error message | MEDIUM | LOW | P1 | | Auto-clustering of unknown traffic | MEDIUM | MEDIUM | P1 | | BPF capture filter | MEDIUM | MEDIUM | P2 | | Offline pcap file input | MEDIUM | MEDIUM | P2 | | Verbose flag | LOW | LOW | P2 | | Configurable time window | LOW | LOW | P2 | | Custom sound mapping | LOW | HIGH | P3 | | Real-time playback | LOW | HIGH | P3 (anti-feature, avoid) | **Priority key:** - P1: Must have for launch - P2: Should have, add when possible - P3: Nice to have, future consideration --- ## Competitor Feature Analysis | Feature | SoNSTAR (Python, research) | Network-Sonification (C#, Windows GUI) | Peep (C, Unix, 2000) | NetSynth (our approach) | |---------|----------------------------|-----------------------------------------|----------------------|------------------------| | Interface selection | Interactive prompt | GUI dropdown | Config file | CLI flag `-i` | | Protocol coverage | TCP flag states | TCP, UDP, HTTP, HTTPS, DNS, ICMP | Any syslog-able event | ICMP, DNS, TCP, UDP + auto-cluster | | Sound style | Recorded natural sounds (forest ambience) | Waveform shapes per protocol (sine/square/triangle) | Discrete event sounds | Synthesized harmonic drones | | Output | Real-time audio (Max/MSP) | Real-time audio (WPF) | Real-time audio (Unix audio) | MP3 file | | Time aggregation | Configurable window (default 20s) | Per-packet event | Per-event | Configurable window (default 10s) | | CLI/scriptable | Partial (Python prompts) | No (GUI only) | Yes (daemon) | Yes (single binary, flags) | | Offline pcap input | No | No | No | v1.x | | Auto-clustering | No | No | No | Yes (v1 hash-bucket) | | Single binary | No | No | No | Yes (Go) | | Open source | Yes | Yes | Yes | Intended | --- ## Sources - [SoNSTAR: Sonification of Networks for SiTuational AwaReness — Paul Vickers](https://paulvickers.github.io/SoNSTAR/) - [Sonification of network traffic flow for monitoring and situational awareness — PLOS One](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0195948) - [SoNSTAR GitHub repository — nuson/SoNSTAR](https://github.com/nuson/SoNSTAR) - [Network-Sonification GitHub — dmeldrum6/Network-Sonification](https://github.com/dmeldrum6/Network-Sonification) - [Peep (The Network Auralizer): Monitoring Your Network With Sound — USENIX 2000](https://www.usenix.org/legacyurl/peep-network-auralizer-monitoring-your-network-sound) - [Sonification of DDoS Attacks — Imperva](https://www.imperva.com/blog/archive/sonification-of-ddos-attacks/) - [Data Sonification Toolkit — Sound and data parameters](https://www.sonificationkit.com/data-sonification/concepts/sound-and-data-parameters) - [tcpdump man page — tcpdump.org](https://www.tcpdump.org/manpages/tcpdump.1.html) - [The Sound of Data: A gentle introduction to sonification — Programming Historian](https://programminghistorian.org/en/lessons/sonification) --- *Feature research for: network traffic sonification CLI (NetSynth)* *Researched: 2026-03-24*