cynthion-pcap-decode

Decode, analyze, and diff USB 2.0 pcap captures from Packetry and Cynthion.

2|Updated May 13, 2026
One-click install
npx skills add https://github.com/curtisgalloway/public-skills --skill cynthion-pcap-decode-curtisgalloway
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: cynthion-pcap-decode
Source: https://github.com/curtisgalloway/public-skills/tree/main/plugins/hardware-lab/skills/cynthion-pcap-decode
Command: npx skills add https://github.com/curtisgalloway/public-skills --skill cynthion-pcap-decode-curtisgalloway

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill requires tshark, and includes scripts (resource) components.

What problem does it solve? Raw USB captures from Packetry/Cynthion use the wire-level LINKTYPE_USB_2_0 format that generic pcap tools like dpkt and scapy misparse, making it hard to inspect descriptors, transfers, or compare captures across firmware versions. ## Core Features & Use Cases - Four-layer decoding: Streams packets into transactions, transfers, and decoded content including standard descriptors (device, configuration, interface, endpoint, string) and class-specific payloads (HID, MSC/SCSI, CDC-ACM, MIDI, hub). - Flexible filtering and output: Filter by device address, endpoint, transfer type, time range, or enumeration phase, with JSON, transcript, and Markdown report formats. - Capture diffing: Aligns two captures by endpoint and sequence to report added, removed, or byte-level changed transactions. - Use Case: After a firmware update, run diff.py on before/after captures to confirm the device descriptor and HID report format did not change unexpectedly. ## Quick Start Ask the agent to decode your Packetry capture file and summarize the enumeration phase and descriptors in a Markdown report.

Frequently Asked Questions about cynthion-pcap-decode

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I decode a USB pcap capture from Packetry or Cynthion?▼

Run decode.py with the capture path to get JSON output, or add --format transcript or --format markdown for human-readable views. It uses tshark's usbll dissector by default and falls back to a native Python parser if tshark is unavailable.

How do I diff two USB captures to compare firmware versions?▼

Run diff.py with the two capture files to align transactions by address, endpoint, and sequence position. It reports transactions only in one capture and byte-level payload changes, with optional --endpoint, --address, and --control-only filters.

Why can't I use dpkt or scapy on Packetry pcap files?▼

Packetry writes LINKTYPE_USB_2_0 (link type 288), raw wire-level USB 2.0 packets, while dpkt and many scapy USB paths expect LINKTYPE_USB_LINUX (220, usbmon format). They silently misparse or crash, so use this decoder or tshark's usbll dissector.

Does the decoder work without tshark installed?▼

Yes, a native Python fallback using only the standard library handles packets, transactions, transfers, and standard descriptors, and can be forced with --native. It is best-effort, so tshark is recommended for anything beyond a smoke test.

Can the decoder handle USB 3.x SuperSpeed captures?▼

No, Cynthion captures USB 2.0 (HS/FS/LS) only. USB 3.x devices may fall back to USB 2.0 when connected through Cynthion, and the decoder handles that resulting traffic correctly.