Last updated:

Frontend

Frontend Documentation

The PacketSnitch frontend is the Electron half of the app — the desktop UI that turns the backend’s protocol-aware packet intelligence into workspaces for browsing, filtering, converting, and investigating captures. It is what makes PacketSnitch a usable Wireshark alternative desktop app, and it hosts the optional LLM-powered network analysis flows via Ollama. The backend it talks to is documented in the backend documentation; the filter bar is covered by the filter reference. New here? See the decoder reference for modular protocol decoder authoring, the Features list, or the FAQ.

Table of Contents

Overview

The PacketSnitch frontend is an Electron-based desktop application that provides an interactive interface for loading, browsing, and filtering capture data produced by the backend (snitch.py). It visualizes packet metadata, payloads, protocol details, and GeoIP information, and supports frontend-driven LLM summaries and packet-context questions through the Electron main process. The frontend also includes Analysis, Host Data, Conv, Compare, Crypt, Artifacts, Stats, List, Notes, Settings, Help, and Activity Log workspaces.

Requirements

  • NodeJS 16.4+
  • Electron Forge 7.11+
  • Dependencies:
    • electron-forge
    • webpack
    • fs-extra
    • electron-squirrel-startup
    • copy-webpack-plugin
    • ollama

Loading Data

  1. Click Load JSON to open either a backend hosts.json capture (see the backend Output Structure) or a previously saved PacketSnitch session file.
  2. Click Load PCAP to run the backend directly on a .pcap file from within the app.
  3. Toggle Use LLM to enable or disable the current runtime LLM workflow before running. This checkbox is seeded from Settings → LLM → LLM active by default.
  4. Once a capture finishes loading, PacketSnitch opens the workspace selected under Settings → General → Open after capture load (general.defaultTab) — Host Data, Stats (default), or List. A previously saved session still restores into its remembered tab; the preference only takes effect when there is no saved tab to fall back on.

The frontend is organized around persistent workspaces rather than a single packet view. Navigation between workspaces preserves the active capture, filter, packet cursor, comparison selections, notes, and investigation state. The Host Data, List, Stats, Compare, Conv, Crypt, Artifacts, Notes, Settings, and Log workspaces can be reached from the toolbar, context menus, or the keyboard shortcut system.

Output Frames

The PacketSnitch UI is divided into several panels that together provide a full view of each captured packet.


The left sidebar contains navigation controls and file metadata.

Element Description
Target Host Dropdown to select which host/IP stream to inspect. Changing the host resets the filter and loads that host’s packets.
Bookmarks Save and recall specific packet positions within a session.
Save Session Export the loaded capture with UI session state (packet cursor, filters/history, tabs, bookmarks, and Artifact Store state) as JSON.
PCAP size File size of the loaded .pcap in human-readable format.
Load time Time taken to parse and load the JSON data.
Total Packets Total number of packets in the loaded dataset.
Filtered Packets Number of packets currently matching the active filter expression.
Timestamp Capture timestamp of the currently displayed packet.

Toolbar / Tab Bar

The toolbar at the top of the content area contains navigation and view-switching controls.

Control Description
Analysis Switch to the Summary Frame to view the frontend-generated LLM analysis report and appended stream-context findings.
Host Data Switch to the packet data view (Packet Info + Payload panes) for the currently selected host.
Conv Open the data conversion workspace for translating between hex, binary, base64, ASCII, and decimal, with MIME detection, entropy analysis, and protocol decoding.
Compare Compare capture sources or compare the current Host Data packet with a filtered peer packet, including bytes, hashes, decoded fields, and metadata.
Crypt Open the encryption workspace for inspecting encountered SSL/TLS sessions, loading certificates and private keys, accessing PGP/OpenSSH workspaces, and decrypting 802.11 (Wi-Fi) frames.
Artifacts Open the Artifact Store for capture-derived secrets, extracted files, URLs, certificates, credentials, and other investigation values.
Stats Show capture-level aggregate statistics (protocols, hosts, ports, MIME types, GeoIP locations, etc.) derived from the full loaded dataset.
List Show all packets in a searchable, sortable, stream-groupable list view.
Notes Open the session notes workspace for creating, editing, color-tagging, and exporting freeform notes tied to the current session.
Settings Open the settings workspace for General defaults, LLM defaults and diagnostics, Debug map and transport toggles, and Backend bridge controls.
Log Toggle the Activity Log panel, which records all GUI and backend actions with timestamps.
Prev / Next Navigate backwards and forwards through the packet list (or filtered set).
Filter bar Enter a filter expression to narrow the displayed packets (see Filtering).

When right-clicking in packet/data views, PacketSnitch shows a context menu with shortcuts to copy text and payload views, load/derive/decompress conversion values into Conv, follow bidirectional streams into Conv or Crypt, add artifacts, build filter expressions (including link/transport/application protocol filters), export packet/Conv outputs, interact with HTTP file bodies, and run LLM context actions. See context-menu for full details.

Compare Workspace

The Compare workspace has three subtabs:

  • Captures compares the currently loaded capture state and provides the multi-source comparison overview.
  • Sources compares capture sources across application, network/transport, link, decoded protocols, hosts, hostnames, locations, ports, MAC vendors, MIME types, data types, and traffic buckets. This is useful after loading or merging multiple captures to identify what changed between sources.
  • Compare Packets compares the current Host Data packet with a candidate from the active filtered packet set. The current packet is Packet A; Packet B is selected from the candidate list.

Packet comparison supports:

  • Same protocol only candidate filtering and candidate search by protocol, source, packet key, or index.
  • Payload or full-frame byte comparison, including headers when frame bytes are available.
  • Payload-only or headers-plus-payload decoded comparison scope.
  • Independent Decoder A and Decoder B selections, including auto-detection.
  • Field-by-field decoded comparison with changed values highlighted on both sides in the comparison table.
  • Byte lengths, changed-byte counts, similarity, changed ranges, MD5, SHA-256, and SSDEEP-style similarity metrics.

Missing bytes, unavailable decoder results, incompatible protocols, and different field shapes are reported explicitly rather than being silently treated as equal. Navigating Host Data updates Packet A so the comparison always follows the packet currently under investigation.

Keyboard Shortcuts

Keyboard shortcuts are enabled by default and can be configured in Settings → Keyboard Shortcuts. The settings panel lets users enable or disable shortcuts, change the prefix trigger, record bindings, reset defaults, and review conflicts.

Character bindings use the prefix trigger (default Alt+P) followed by the configured key. Direct bindings, such as function keys and Escape, run in a single keystroke. Character shortcuts remain available while normal controls have focus without stealing text-entry input; dialogs, menus, and other non-character controls continue to receive their direct bindings.

Default actions include:

Binding Action
Alt+P, then A Open Analysis
Alt+P, then H Open Host Data
Alt+P, then V Open Conv
Alt+P, then M Open Compare
Alt+P, then Y Open Crypt
Alt+P, then S Open Stats
Alt+P, then L Open List
Alt+P, then N Open Notes
Alt+P, then Q Quit PacketSnitch
Alt+P, then ` Ask PacketSnitch
F1 Open Help
F2 Open file picker
F3 Open the context menu for the focused control
F4 Focus the filter bar
F7 / Shift+F7 Next / previous subtab
Escape Dismiss the active dialog, menu, or error

The prefix sequence expires after a short timeout. If multiple actions share the same chord, PacketSnitch reports a shortcut conflict and runs none of them. Keyboard actions use the same allowlisted action registry as other frontend action callers, including the Ask PacketSnitch routing surface.


Summary Frame

The Analysis workspace displays the generated analysis report for the loaded capture. It is opened with the Analysis button in the toolbar; internal DOM and state identifiers retain some historical summary names.

Recent behavior updates:

  • The summary content now uses a preformatted text view for better readability of longer model output.
  • Summary generation is stream-aware: when packet navigation settles, the frontend schedules a follow-up summary for the active stream after the configured idle delay and appends non-duplicate findings.
  • LLM requests are issued through the Electron main process (llm:generate IPC, with the legacy ollama:generate alias retained for compatibility), which applies the configured provider, model, bearer token, timeout, and token cap.
  • Existing summary text is persisted in saved sessions and restored on load.
  • Notes integration: every note created on the Notes tab is automatically mirrored on the Summary report under a dedicated heading so the analyst never has to copy/paste observations between the two tabs.
    • By default each note is rendered under ## Inferred Data (from Notes) and treated as analyst inference / hypothesis rather than as a concrete observed fact.
    • When the note’s Mark as verified data (concrete) checkbox in the Notes editor is on, the note is instead rendered under ## Verified Notes (from Notes) and the Summary report treats it as a concrete data point.
    • The concrete/inferred flag is persisted in the saved session and restored on load.

Packet Info Pane

The Packet Info Pane is the main left-centre panel. It displays structured metadata for the currently selected packet, broken into several sub-sections.

IP-to-IP Routing

Displays source and destination IP addresses in a src → dst format for quick identification of the packet flow.

Network Information

Shows source and destination protocol/port details, including the ICANN service name and port description for the destination port.

Data Type List

Lists the detected MIME type, character set, content encoding, and magic-identified data types found in the payload.

Active Recon

Populated only when the backend was run with the -a (active recon) flag. Contains:

Sub-section Description
Protocols Used Identified application-layer protocols for the packet.
Compression Information Whether the payload is compressed and the detected compression method.
Encryption Details SSL/TLS version and cipher information if applicable.
Website Title HTML page title fetched from the destination host.
DNS Resolved hostnames from reverse DNS lookup.

Packet Payload Pane

The Packet Payload Pane sits below/beside the Packet Info Pane and displays the raw payload bytes for the current packet.

ASCII View

Displays consecutive runs of printable ASCII characters extracted from the payload. Non-printable bytes are skipped, making it easy to spot human-readable strings embedded in binary data.

Hex Grid

An interactive hex dump of the full raw payload. Clicking a cell in the hex grid highlights the corresponding bytes and displays any printable ASCII sequence starting at that offset in the ASCII view.


Conv Tab (Data Conversion)

The Conv tab is a self-contained data conversion and analysis workspace accessible at any time by clicking Conv in the toolbar. It has seven sub-tabs: Conversions, Hashes, Extraction, Decodes, Analyze Subnet, Threat Intel, and Packet JSON.

Conversions Sub-tab
Input
Control Description
Input format Choose the encoding of the text you are pasting: Base64, Binary, Hex, ASCII / UTF-8, or Decimal bytes.
Input textarea Paste raw encoded data here (hex strings, base64 blobs, binary sequences, etc.).
Previous inputs Dropdown history of previous Conv inputs for the current session; select an entry to reload it.
Convert Parse the input according to the selected format and populate all output fields.
Clear Erase the input and all output fields.
Converted Output

After clicking Convert, the following representations are shown simultaneously:

Field Description
Hex Hexadecimal encoding of the input bytes.
Binary Binary bit-string encoding.
Decimal bytes Space-separated decimal byte values.
Decimal integer The input interpreted as one big-endian integer.
ASCII Printable ASCII / UTF-8 representation.
Base64 Standard base64 encoding.
Data Insights
Field Description
Byte Length Total number of bytes represented by the input.
MIME Type Magic-byte inferred MIME type of the data.
Text Language Detected natural language of the content (when the data is text).
Data Type Guesses Up to three ranked guesses for the semantic data type (e.g. JWT Token, bcrypt Hash, Base64 Encoded Data) with a match confidence (High / Medium / Low, where High means a strong structural match).
Shannon Entropy Shannon entropy value (0–8 bits/byte) and qualitative label: Low (< 4.5), Medium (4.5–6.8), High (> 6.8).
Hashes Sub-tab

The Hashes sub-tab computes cryptographic hash digests of any input text. Type or paste text into the Hashed Input field; hashes are computed automatically and displayed in read-only fields below.

Hash output field Algorithm
MD5 MD5 (128-bit)
SHA-1 SHA-1 (160-bit)
SHA-256 SHA-256 (256-bit)
SHA-384 SHA-384 (384-bit)
SHA-512 SHA-512 (512-bit)
SHA3-256 SHA-3 / Keccak-256
SHA3-512 SHA-3 / Keccak-512
RIPEMD-160 RIPEMD-160
Whirlpool Whirlpool (512-bit)

The Hashed Input field accepts escape sequences (\n, \r, \t, \\, \xNN) so exact byte sequences can be hashed without pasting raw binary data. Clicking Convert on the Conversions sub-tab also populates the Hashed Input field automatically from the current conversion input bytes.

The Hashes sub-tab also provides a Cross Reference Hash button. When a hash output is focused or has a text selection, the button cross-references that hash; otherwise it sends the current SHA-256 output to the Threat Intel sub-tab, sets the query type to hash, and runs a VirusTotal lookup.

Extraction Sub-tab

The Extraction sub-tab detects compression and archive formats in the current Conv input. Extraction is explicit: detection alone does not modify the input. Depending on the detected format, the analyst can decompress data, browse an archive tree, select one entry, preview its metadata, load it back into Conv, save it to a file, hash it, or send it to Threat Intel. Decompressed output has separate load and save actions. Extracted files can also be added to the Artifacts store and later rescanned for embedded secrets.

Decodes Sub-tab

The Decodes sub-tab is a registry-backed protocol decoder. Select a protocol from the Protocol dropdown or leave it on Auto-detect. The current registry includes HTTP, FTP, SMB / Samba, Telnet, SSH / OpenSSH, POP3, IMAP, SMTP, JSON, XML, HTML, YAML, Protobuf, MessagePack, BSON, ASN.1 BER, ASN.1 DER, LDAP, SIP, SMPP, Soulseek, BitTorrent, Kerberos, ISO 8583, JPEG, PNG, GIF, WebP, and additional bundled or user-installed decoder specs. The same dispatch path is used for conversion input, followed streams, and loaded carved files.

For the decoder registry, drop-in decoder locations, DECODER_SPEC contract, auto-detection hints, and authoring examples, see the dedicated Modular Decoder Reference.

  • The Kerberos (krb5) decoder disassembles AS-REQ/AS-REP/TGS-REQ/TGS-REP/AP-REQ/AP-REP/KRB-ERROR/KRB-PRIV/KRB-CRED messages, showing pvno, msg-type, realm, cname/sname, KDC options (with the RFC 4120 bit-numbered flags), till, nonce, etype list, ticket (tkt-vno/realm), and an EncryptedData etype + cipher preview. Auto-detect and the protocol/port hints (krb5, kerberos, ports 88/464/750) route matching traffic to it.
  • The ISO 8583 (Financial) decoder disassembles the standard ISO 8583 message structure: MTI (4 ASCII digits or 2 BCD bytes), primary/secondary bitmap (ASCII-hex or binary), and data elements per the ISO 8583:1987/1993 field definitions. It supports LLVAR/LLLVAR length prefixes in both ASCII and binary modes, transparently strips 2- or 4-byte TPDU/message-length framing prefixes common in ISO 8583 over TCP, and rejects false positives (e.g. HTTP text that happens to start with 4 ASCII digits) by validating the BCD MTI against the known MTI table and requiring the first data field to parse. Auto-detect and the protocol/port hints (iso8583, iso-8583, ports 8583/5000/5001/14401) route matching traffic to it. Field values that are BCD-packed or otherwise non-printable render as hex in the decoded view via the readAsciiOrHex helper and the data-tools-proto-hex CSS class.
  • The SMB / Samba decoder has a dedicated follow-stream mode that walks SMB2 read/write transactions and renders a per-message tree of headers, file content, and offsets. Single-block streams are now fed through the decoder pipeline correctly, and the inline decoder switch in the Host Data view honours the same selection.

The context menu can populate Conv from selected/context data, payload bytes, cursor ASCII, decompressed Conv input, HTTP body bytes, or full followed stream data. See context-menu for details.

Analyze Subnet Sub-tab

The Analyze Subnet sub-tab is a host and subnet enrichment workspace for IPv4/IPv6 addresses and CIDR/netmask input.

Panel / Control Description
Host Analysis input Accepts single IPs, host/prefix values, and subnet forms (for example CIDR or dotted netmask form). IPv6 input is accepted in compressed (2001:db8::1) or expanded (2001:0db8:0000:0000:0000:0000:0000:0001) form, with optional zone-id suffix (fe80::1%eth0) stripped before parsing.
Analyze / Clear Runs subnet math and enrichment lookup, or clears current analysis state.
Use packet source IP / destination IP Seeds the analyzer from the currently selected packet’s source or destination IP. Both IPv4 and IPv6 packets are supported.
Summary / Range / Binary cards Show normalized network metadata, host range, and binary breakdown views. IPv6 cards use BigInt-backed math (IPV6_HOST_BITS = 128) so prefix ranges larger than 32 bits render correctly.
WHOIS / Reputation / Geo / Shodan cards Pull backend HTTP lookups from /whois, /ipsum, /geoip, and /shodan. WHOIS uses CIDR v6prefix semantics for IPv6, GeoIP honours version: 6 in the response, Shodan returns the standard InternetDB shape for both families, and Tor exit-node matching strips the […] brackets from a host:port string. IPsum is IPv4-only and returns { supported: false } for IPv6 — the IPsum reputation card is hidden when the analyzed IP is IPv6.
Capture internet targets Lists public internet hosts + observed TCP ports derived from the loaded capture. IPv6 targets are listed alongside IPv4; loopback (::1) and unspec (::) are excluded automatically.
Enumerate Services Runs nmap -sV against capture-derived internet targets and renders parsed service/version results.
IPv6-specific helper functions

The Analyze Subnet sub-tab uses a dedicated IPv6 math path (src/ui/panels/subnet-calculator-panel.js) so it can operate on 128-bit addresses without precision loss:

  • parseIpv6Address(value) — RFC 5952 parser that handles :: compression, embedded IPv4 (::ffff:192.0.2.1), and zone-id (%eth0) suffixes.
  • ipv6GroupsToBigInt / ipv6BigIntToGroups — BigInt conversions between 8-hex-group and 128-bit integer representations.
  • formatIpv6Expanded / formatIpv6Compressed — produce the canonical expanded / compressed display strings.
  • classifyIpv6Address — returns the IPv6 scope class (Global unicast, Unspecified, Loopback, Unique local, Link-local, Multicast, Documentation range) and an exposure tag (Public, Private, Special use) for the Analyze Subnet and Subnet cards.
  • analyzeIpv6 — full subnet analysis (prefix, total hosts, host range, binary breakdown) for the packet under inspection.
IPv6 in Datagram Frame and Packet Info

The right-sidebar Datagram Frame panel and the Packet Info pane render IPv6 addresses and endpoint pairs natively:

  • Endpoint format — IPv6 endpoints are rendered in RFC 3986 bracket form to disambiguate the trailing port: [2001:db8::10]:443. The formatNetworkEndpointDisplay(host, port) helper in src/ui/main-frontend.js chooses the bracket form for IPv6 and the plain host:port form for IPv4.
  • Packet-context summary — buildPacketContextSummary uses the same bracket form when an IPv6 address is involved so the LLM context payload is unambiguous.
  • Stats / Heatmap — IPv6 addresses flow through the same host aggregation as IPv4: stats.hosts lists every observed IPv4/IPv6 literal, stats.hostnames lists resolved DNS hostnames, and the Stats panel strips surrounding brackets ([2001:db8::10]2001:db8::10) so an IPv6 literal and its hostname-bracket form are de-duplicated. The Analyze Subnet sub-tab applies classifyIpv6Address to attach the IPv6 scope/exposure when an IPv6 address is analyzed.
  • App Protocol column — the column shows IPv6 (with the transport protocol stacked: TCP / IPv6, UDP / IPv6, ICMPv6 / IPv6) so the decompose flow doesn’t conflate IPv4 and IPv6 sessions.
Filter and bookmark keys for IPv6
  • Bookmark keys — saved-bookmark packet keys use a $ separator between the host string and the packet index to avoid collisions with the IPv6 colon. The key for packet index 11 of 2001:db8::10 is 2001:db8::10$11. Parsing splits on the last $ so an IPv6 address is recovered verbatim. Both IPv4 and IPv6 go through the same code path.
  • Filter values — IPv6 address filter values are parsed at the filter-expression level without truncation: the entire 128-bit value is retained up to the $ separator (index) or the comparison operator.
  • Filter keys — IPv6 addresses are stored under the same ip.* keys as IPv4 (ip.src.addr, ip.dst.addr, ip.proto.num, network.proto, …). The family is detected via ip.proto.num (the IPv6 next-header field) and network.proto. See the Filter Key Reference for the full table.

Nmap service enumeration is gated by Settings → General → Enable Conv Subnet internet-host Nmap service scans and is disabled by default.

Threat Intel Sub-tab

The Threat Intel sub-tab performs IP, URL, and hash reputation lookups using the backend HTTP service. It is also the destination for the Hashes sub-tab Cross Reference Hash action.

Control Description
Query type Choose the indicator type to look up: auto (let the backend infer), ip, url, or hash.
Threat Intel input The IP address, URL, or hash value to query.
Use analyzed IP Seeds the input from the address currently being analyzed in the Analyze Subnet sub-tab.
Lookup Threat Intel Runs the configured lookups for the selected indicator type.
IPsum reputation card Shows whether the queried IP appears in the IPSum blocklist, the number of hits, and the list version/date.
VirusTotal card Shows VirusTotal reputation data (detection ratio, last analysis date, community score, etc.) for IPs, URLs, and hashes. Requires a VirusTotal API key configured in Settings → API Keys.
Tor exit node card Shows whether the queried IP is a known Tor exit node, including nickname/platform information.

When the Analyze Subnet sub-tab runs an analysis, the threat-intel input is automatically seeded with the inspected IP, the query type is set to ip, and IPsum, Tor, and VirusTotal results are fetched alongside the subnet cards. Those results are then displayed in the Threat Intel sub-tab. The dedicated subtab replaces the previous inline reputation card in Analyze Subnet. The lookups are served by the backend enrichment endpoints (/ipsum, /tor, /shodan, /whois, /geoip) documented under HTTP Service Mode.

Packet JSON Sub-tab

The Packet JSON sub-tab displays the full normalized JSON structure for the selected packet as held by the renderer. It is context-menu aware, so selected values can be copied, converted, filtered, added to Artifacts, sent to Notes, or passed to other workspaces.


Crypt Tab (Encryption Workspace)

The Crypt tab provides a multi-panel workspace for inspecting cryptographic material encountered in a capture or loaded from files. It has five sub-tabs: Hashes, SSL, PGP, OpenSSH, and Wireless (IEEE 802.11). Switching between them keeps the rest of the workspace state, including the filter bar, packet cursor, and Artifacts store, intact.

SSL Sub-tab
Panel Description
Encountered SSL/TLS A list of all distinct SSL/TLS sessions detected in the loaded capture. Select an entry to view its details (SSL version, cipher, certificate text). Buttons: Refresh (re-scan the loaded data), Filter packets (populate the filter bar to show only packets in the selected session), Load cert text (copy the session certificate into the Certificate Loader).
Certificate Loader Load a PEM certificate from a file (Load certificate file) or paste PEM text directly (Use pasted certificate). A parsed preview is shown below the input. Clear removes the loaded certificate.
Private Key Loader Load a PEM private key from a file (Load private key file) or paste PEM text directly (Use pasted key). A parsed preview is shown below. Clear removes the loaded key.
TLS/SSL Decrypt Attempt RSA decryption of the selected SSL/TLS session’s payload using the loaded private key. Decrypt selected runs the attempt; the decrypted bytes (hex and ASCII preview) are shown in the output pane. Send to Conv loads the decrypted payload as hex into the Conv tab. Clear clears the decryption output.
PGP Sub-tab

The PGP workspace is a fully implemented OpenPGP inspection and decrypt/verify tool.

Panel / Action Description
PGP Messages In Capture Scans loaded packet payloads for ASCII-armored PGP blocks and lists them by packet/path. Refresh re-runs the scan. Load selected copies the current block into the working input area.
PGP Input Accepts either ASCII-armored OpenPGP text or binary hex. Analyze identifies the structure type (message, signature, public key, private key, cleartext signed message). To ASCII armor and To binary hex convert between formats.
Passphrase candidates Packet text and metadata are mined for password/passphrase hints and offered as selectable candidates for decryption attempts.
Private / Public key inputs Optional ASCII-armored private key for decrypt operations and public key for signature verification.
Decrypt / Verify Uses openpgp in the renderer to decrypt messages or verify cleartext signed messages. Successful output is rendered as UTF-8 text, and verified/decrypted state is summarized.
Send output to Conv Pushes decrypted/verified text into Conv for further conversion or protocol decoding.

Successful decrypt/verify operations can also store validated PGP private key/passphrase material in the session Artifacts store for later reuse.

OpenSSH Sub-tab

Reserved workspace for future OpenSSH key and session tooling. For now, PacketSnitch can still recognize SSH/OpenSSH material in Conv decode/detection flows.

Wireless Sub-tab (IEEE 802.11 / Wi-Fi)

The Wireless sub-tab is the frontend home of the 802.11 frame decoder and decryptor in src/backend/decoders/wireless_80211.py. It surfaces every 802.11 frame observed in the capture, lets the analyst push Wi-Fi keys (WPA/WPA2-PSK, WEP, or pre-computed PMK) to the backend, and re-runs the capture with decryption enabled so the decrypted inner packets flow into the rest of the workspace.

Panel Description
Encountered 802.11 Transmissions A list of every distinct 802.11 transmission detected in the capture, populated from wireless.wifi.ssid / wireless.wifi.bssid / wireless.wifi.subtype / wireless.wifi.cipher. Buttons: Refresh (re-scan the loaded data), Load selected (open the frame in Host Data), Filter packets (populate the filter bar with wifi.bssid == "..." or wifi.ssid == "...").
Filter 802.11 Frames Substring filters by SSID (case-insensitive) and BSSID (colon or 12-hex form), an Only decryptable with my keys checkbox that keeps frames whose BSSID + algorithm matches an entry in the session Artifacts store, and a Sort dropdown (packet index, decryptable first, SSID A-Z, BSSID). Status line reports how many frames match the current filter.
Wi-Fi Keys (Artifacts) Per-session Wi-Fi key list pulled from the Artifacts store, plus an Add key form. The form takes an optional SSID, an optional BSSID, and the key material; the Key type dropdown picks one of wpa-psk (WPA/WPA2 passphrase), wep (hex, 5/13/16 bytes for WEP-40/WEP-104/WEP-128), or pmk (WPA PMK, 32-byte hex). The list supports Add key, Remove selected, and Refresh.
Send keys to backend Pushes the current Wi-Fi key list to the backend via the setBackendWifiKeys IPC. The bridge stages the key payload in testcaseOutputDir/wifi-keys-<jobId>.json (outside jobOutputDir so the spawn-path fs.rmSync cannot drop it) and re-launches the backend with --wifi-keys-file. The renderer-side wifiKeysRerunInFlight flag tells the snapshot handler to re-index against the new hosts.json so decrypted frames show up immediately. The status line reports the IPC round-trip result and a final Decryption done. once the rerun completes.
802.11 Decrypt Runs decryptWifiPayload against the currently selected 802.11 frame with the active key set and surfaces the result in the crypt-wifi-decrypt-preview panel: header (Algorithm, SSID, BSSID, OK/Error), decrypted hex + ASCII preview, and a Send to Conv button that loads the plaintext bytes into the Conv → Conversions sub-tab. Clear wipes the preview.

The full backend contract (key file format, --wifi-keys-file flag, decrypt status attributes, end-to-end result shape) is documented in the Crypt tab / 802.11 (Wi-Fi) decryption section of the Backend docs; the Wireless sub-tab is the renderer-side counterpart of that contract.

Saved sessions round-trip the Wi-Fi key artifacts; on session restore the bridge re-sends them to the backend so re-opening a Wi-Fi capture still decrypts 802.11 frames without manual re-entry.


Settings Tab

The Settings tab is a persistent configuration workspace with twelve sub-tabs: Storefront, General, Backend, LLM, API Keys, Debug, Merge, Plugins, Themes, Privacy, Keyboard Shortcuts, and About.

Settings are stored locally at ~/.config/packetsnitch/config/settings.json (Linux) or C:\User\Username\AppData\Roaming\packetsnitch\config\settings.json (Windows).

General Sub-tab
Setting Key Description
Theme general.themeId Selects the active UI theme from discovered JSON theme files.
Conv JSON indent spaces general.convJsonIndentSpaces Number of spaces used when rendering packet JSON in Conv.
Status reset delay (seconds) general.statusResetSeconds Delay before transient status text is reset.
Default backend packet chunk size general.backendPacketChunkSize Fallback chunk size used when backend progress metadata is unavailable.
Backend worker threads general.backendWorkerThreads Number of parser worker threads requested from the backend bridge.
Stream warning threshold (packets) general.streamContextWarnPacketThreshold Warns before loading large follow-stream results into Conv or Crypt; default 20, minimum 5.
Manual Conv import limit (MB) general.manualConvImportMaxBytes Maximum allowed size for context-menu manual file imports into Conv (default 2 MiB).
Enable Conv Subnet internet-host Nmap service scans general.nmapServiceScanEnabled Enables Analyze Subnet service enumeration against capture-derived internet hosts/ports.
Check for new releases on startup general.checkForNewReleasesOnStartup Automatically checks releases and opens About when a newer version is available.
Open after capture load general.defaultTab Picks the workspace that opens once a fresh capture finishes loading: Host Data, Stats (default), or List. The setting is only consulted when no saved session tab exists to restore, so an existing saved session keeps its remembered tab across preference changes. Stored values are normalized against a whitelist (data / stats / list); unknown values fall back to the default so a corrupt setting can never strand the user on a blank workspace.
Enable frontend ingest threading debug.frontendIngestThreadingEnabled Enables worker-based progressive-ingest processing in the renderer.
Frontend ingest worker threads debug.frontendIngestWorkerThreads Number of renderer worker threads used for progressive ingest processing.
Decoder permissiveness dataTools.decoderPermissiveness Controls how many parser warnings a decoder result may contain before it is rejected; the default is 50.
OpenSSH minimum command length crypt.openSshMinCommandLength Controls the minimum command length used by the OpenSSH keystroke-analysis workflow.
OpenSSH short-command bonus crypt.openSshConcisenessBonusMultiplier Controls the short-command scoring adjustment in the OpenSSH workflow.

Allowed backend chunk sizes are fixed to: 25, 100, 250, 500, 2000, 8000.

The Settings UI also shows the runtime themes directory path so custom theme JSON files can be dropped in place and loaded.

LLM Sub-tab
Setting Key Description
Provider llm.provider Selects the configured LLM provider.
Ollama model llm.ollamaModel Ollama model used for summary and Ask PacketSnitch generation.
OpenRouter model llm.openrouterModel OpenRouter model used when OpenRouter is selected.
Cohere model llm.cohereModel Cohere model used when Cohere is selected.
Ollama API key llm.ollamaApiKey Optional bearer token for authenticated Ollama endpoints.
Set LLM Active by default llm.activeByDefault Controls whether LLM-powered frontend features are active by default (load-screen toggle, stream summaries, and LLM context-menu actions).
Generate background summaries automatically llm.backgroundSummaryGenerationEnabled Enables/disables automatic stream-context follow-up summaries while keeping manual LLM actions available.
LLM trigger delay (seconds) llm.triggerDelaySeconds Idle delay before stream-context summaries run while navigating packets.
Max tokens for stream summary llm.maxSummaryTokens Maximum generated summary size (num_predict).
LLM request timeout (seconds) llm.ollamaRequestTimeoutSeconds Timeout applied to Ollama request headers and body reads.
LLM retries llm.retryCount Number of retry attempts after an LLM request fails.
Ask PacketSnitch routing retries llm.actionRouterRetryCount Retries malformed or empty internal action-routing responses, from 0 to 5.
Analysis compaction threshold llm.analysisCompactionThresholdBlubs Controls when accumulated analysis context is compacted before another request.

If the API key field is left blank when saving, the currently stored key is retained.

The LLM panel also exposes runtime diagnostics for local install status, daemon reachability, cloud API reachability, and the last call result code.

Debug Sub-tab
Setting Key Description
Enable ungrouped list virtualization debug.ungroupedListVirtualizationEnabled Experimental rendering optimization for large ungrouped packet tables.
Incremental refresh interval (ms) debug.backendIncrementalRefreshMinIntervalMs Minimum time between heavy frontend snapshot refreshes during backend processing.
Incremental refresh packet threshold debug.backendIncrementalRefreshMinPackets Minimum packet growth before heavy frontend snapshot refreshes are applied.
Map projection zoom X / Y debug.mapProjectionZoomX, debug.mapProjectionZoomY Horizontal/vertical calibration for the Internet Heatmap basemap projection.
Map projection offset X / Y debug.mapProjectionOffsetX, debug.mapProjectionOffsetY West/east and north/south alignment offsets for the worldmap overlay.
Backend Sub-tab
Setting Key Description
Default backend packet chunk size general.backendPacketChunkSize Default chunk size used for incremental frontend progress when backend metadata is incomplete.
Backend worker threads general.backendWorkerThreads Worker-thread count passed to the backend parser.
TCP host backend.tcpHost Hostname/IP used for backend HTTP service mode.
TCP port backend.tcpPort Port used for backend HTTP service mode.
Force legacy backend spawn backend.forceLegacySpawn Disables HTTP service mode and launches the backend process per capture run.
Enable backend HTTP data mode debug.backendHttpDataModeEnabled Streams incremental capture snapshots over backend HTTP response payloads instead of relying on temporary hosts-*.json files.
HTTP progress log minimum interval backend.httpProgressLogMinIntervalMs Throttles progress log lines emitted by the backend bridge.

The Backend sub-tab also contains the configured VirusTotal and Hashes.com API keys. See the API Keys sub-tab below.

API Keys Sub-tab

The API Keys sub-tab is a focused location for the secrets used by the renderer’s outbound API calls. Storing the keys here keeps the Backend sub-tab uncluttered and gives each provider its own input + test surface.

Setting Key Description
VirusTotal API key backend.virusTotalApiKey Bearer key used by the Conv Threat Intel sub-tab for VirusTotal IP / URL / hash lookups. Stored locally in the settings file.
Hashes.com API key backend.hashesComApiKey Optional key used for supported hash-reputation lookups.
Metrics endpoint API key privacy.metricsApiKey Optional bearer key sent to the self-hosted metrics endpoint. The key only travels with metrics events when the user supplies one; the bundled src/metrics/server.py enforces it on sensitive endpoints and rejects mismatched requests.
Ollama API key llm.ollamaApiKey Optional bearer token for authenticated Ollama endpoints. This key still appears in the LLM sub-tab so the model/secret are co-located, but it is also re-rendered here for inventory.

If an API key field is left blank when saving, the currently stored key is retained so re-saving the form does not wipe a configured secret.

Plugins Sub-tab

The Plugins sub-tab lists discovered PacketSnitch plugins and lets you install, enable, disable, and uninstall them. Each plugin declares the capabilities it needs (file.read, net.outbound, ui.menu, etc.) and the runtime enforces them.

Control / Column Description
Discovered plugins Lists every plugin folder under the runtime plugin path.
Capabilities column Shows the union of capabilities each plugin requests. The install dialog shows the same list and asks for confirmation before enabling.
Install from .zip Installs a plugin from a local .zip file. The capability dialog opens before the plugin is enabled.
Enable / Disable toggle Toggles the plugin’s runtime registration without deleting its files.
Uninstall Removes the plugin’s files and revokes all its capabilities.

Capabilities are gated by config/plugin-capabilities.json; entries in that file are the only keys the runtime will ever grant. Plugins requesting undeclared capabilities are rejected at install time.

See plugins for the complete plugin format, lifecycle, and authoring tutorial.

Themes Sub-tab

The Themes sub-tab is the home of the theme engine. It shows a 400×250 preview for every theme on disk plus the contents of the theme catalog, so purchased themes are available offline.

Control / Column Description
Theme dropdown Switches the active theme. Changes are applied immediately.
Preview pane Renders a 400×250 preview of the currently selected theme using a representative surface + typography sample.
Theme catalog Lists catalog entries with name, description, price, and an Install action. Installed themes are cached under userData/theme-cache so they remain available without a network round-trip.
Themes directory hint Shows the resolved on-disk themes path so custom .json theme files can be dropped in.

See themes for the complete theme JSON schema, variable reference, logo setup, and opacity tuning.

Privacy Sub-tab

The Privacy sub-tab houses the opt-in anonymous metrics system, install identifier, and related consent state.

Setting Key Description
Enable anonymous metrics privacy.metricsEnabled Master toggle for the in-app metrics pipeline. When off, no events are queued or shipped.
Consent asked privacy.metricsConsentAsked Records that the first-run consent dialog has been shown and answered. Set automatically; the user does not normally edit this.
Metrics endpoint URL privacy.metricsEndpointUrl HTTP endpoint that receives NDJSON metrics events. Defaults to http://143.198.179.97:8088/mhook and can be repointed at any compatible receiver.
Flush interval (seconds) privacy.metricsFlushIntervalSeconds How often the renderer flushes queued events to the endpoint.
Max queue size privacy.metricsMaxQueueSize Upper bound on the in-memory event queue. When exceeded, the oldest events are dropped first.
Install UUID privacy.metricsInstallId Auto-generated per-install UUID. Used as the install_id field on every shipped event so events can be rolled up anonymously.
API key for metrics endpoint privacy.metricsApiKey Optional bearer key for the self-hosted metrics receiver. See the API Keys Sub-tab section.

The renderer enforces a strict SAFE_PROP_KEYS allowlist and per-key length caps on every event, so no PCAP paths, IPs, prompts, or other user content ever leave the renderer.

The bundled src/metrics/server.py is a self-hostable NDJSON-on-disk sink with a /healthz liveness probe and API-key-gated sensitive endpoints. It is ready to deploy behind any reverse proxy for self-hosted setups.

Merge Sub-tab

The Merge sub-tab controls per-source color coding for captures that span multiple source files or captures. When enabled, packets are tinted in the List, Stats, and Host Data tabs according to the source they came from, making it easy to visually distinguish traffic origins in merged sessions.

Setting Key Description
Enable source color coding merge.sourceColorCodingEnabled When on, applies per-source tints to packet rows in List, Stats, and Host Data tabs.
Source colors merge.sourceColors A palette of hex color swatches (up to six) used to tint each source in order. Click a swatch to change its color. Colors apply in source-ordinal order across all loaded captures.

Changes to sourceColorCodingEnabled or sourceColors clear the LLM diagnostics cache and force a re-render of all color-coded panels.

About Sub-tab

The About sub-tab provides release-note refresh and direct download actions for newer releases, and is also used when startup release checks detect an available update.

The top toolbar Help button opens the PacketSnitch documentation hub at https://packetsnitch.com/docu/ in PacketSnitch’s own in-app browser window (the same child BrowserWindow that window.open triggers). The main-process did-create-window handler in src/main.js locks that child window to whitelisted docs hosts (packetsnitch.com, buymeacoffee.com, virustotal.com), resizes it to 1200×900, strips the menu bar, and tags it with the desktop user-agent. Help is the only in-app link that stays anchored inside PacketSnitch — every other external link (release notes, donate, theme catalog, VirusTotal card, etc.) is routed to the user’s default system browser via shell.openExternal so the user keeps their existing browser session, and the help window likewise keeps PacketSnitch-anchored navigation separate from the user’s browser profile.

Actions
  • Save settings: normalizes and persists General, LLM, Debug, and Backend values.
  • Restore defaults: resets settings to app defaults.
  • Theme changes are applied immediately after save.
Theme Engine Summary
  • Themes are JSON files in packetsnitch/themes.
  • Default bundled themes are mirrored there automatically on startup.
  • Theme definitions provide CSS variable overrides and optional custom logo data.

See themes for complete theme schema, variable reference, logo setup, and opacity tuning.


Stats Tab

The Stats tab shows aggregate statistics computed across the entire loaded capture (all hosts, all packets). Statistics are presented as labelled tag-cloud sections. Clicking any tag pre-fills the filter bar with a suggested filter expression for that value.

By default PacketSnitch opens this tab right after a capture finishes loading so the analyst gets an at-a-glance overview (Capture Overview / Map / Anomalies) before drilling into individual packets. Change the post-load workspace from Settings → General → Open after capture load (general.defaultTab); saved sessions still restore into their remembered tab, so the preference only affects fresh captures.

Section Description
Capture Overview Total packet count, unique hosts targeted, encrypted vs. unencrypted packet counts, unique protocol count, unique GeoIP location count, total traffic bytes, and current credentials-found count.
Top Talkers Top IP addresses by packet participation (source + destination). Clicking a talker applies an IP src/dst filter query.
Application Protocols All distinct application-layer protocol names identified by port (e.g. HTTP, DNS, SMTP).
Transport Protocols Transport layer protocols seen (TCP, UDP, ICMP, SCTP).
All Hosts Addressed All unique source and destination IP addresses and target host values.
Hostnames (DNS) Resolved hostnames from DNS or reverse-lookup data.
Physical Locations City/country pairs from GeoIP with occurrence counts, sorted by frequency. Unlike other sections, location tags are display-only and do not generate a filter query when clicked.
Ports Seen All source and destination port numbers observed.
MAC Vendors Ethernet MAC vendor strings identified from OUI lookup.
MIME Types All distinct MIME types found in payload data.
Data Types All distinct magic-identified data type strings.
Carvable Files Candidate files detected from HTTP/FTP/NFS/SMB streams. Clicking a tag loads that carved file directly into Conv.
Internet Heatmap / Worldmap

The Stats tab also includes an Internet Heatmap worldmap view for public GeoIP locations.

Control / Element Description
Aggregate By Switch between plotting the entire capture or only the packets currently returned by the active filter.
Intensity By Weight heatmap intensity by packet count or payload bytes.
Map Zoom Zooms the basemap and overlays without changing the underlying plotted coordinates.
Intensity / Point Size / Tightness / Blur Adjusts the heatmap rendering characteristics and overlay spread.
Location points Clickable projected points representing grouped public GeoIP coordinates. Useful for focusing or highlighting a region.
Heatmap summary Reports how many geolocated internet hosts are currently represented and the active packet/byte total for the chosen scope.

Private/local addresses are intentionally excluded from the worldmap.


List Tab

The List tab shows all packets across all hosts as a searchable, sortable table.

PacketSnitch can be configured to open the List tab right after a capture finishes loading. Pick List under Settings → General → Open after capture load (general.defaultTab) if you prefer pcap-ordered browsing over the default Stats overview. Saved sessions still restore into their remembered tab, so the preference only affects fresh captures.

Control Description
Filter list Text input that filters rows in real time by host, IP address, port number, or protocol name.
Group by stream When checked, rows are grouped by bidirectional stream (same IP/port pair, same transport) before applying the sort column, making it easy to follow a single conversation.
Columns
Column Description
# Packet index from the capture.
Source Color Optional source-capture color swatch. Hidden by default; enable it from the List column chooser. The row tint follows the configured Merge source color when source color coding is enabled.
Source Source capture name or identifier. Hidden by default; useful when multiple captures are merged.
PCAP # Packet order within the source PCAP.
Timestamp Capture timestamp.
Bookmark indicator — filled for bookmarked packets.
Stream Stream group number (S1, S2, …) assigned by bidirectional endpoint pair.
Host Target host label from the loaded JSON.
Src IP Source IP address.
Dst IP Destination IP address.
Src Port Source port number.
Dst Port Destination port number.
Transport Transport protocol (TCP / UDP / ICMP).
App Protocol Application-layer protocol name inferred from port.
Verified Machine-correlation verification count when Snap & Correlate is enabled; hidden otherwise.
Payload Len Payload byte length. Hidden by default.

The Columns control opens a column chooser. Columns can be shown or hidden, dragged into a custom order, and resized; preferences persist in the user settings. Source Color and Source are hidden by default so single-PCAP sessions remain compact. Enable them for merged or multi-source captures to see each row’s source and configured color. Click any row to navigate to that packet in Host Data.


LLM and Backend Bridge

Frontend LLM behavior now lives in the renderer and Electron main process rather than in the Python parser itself.

LLM Flow
  • Renderer code decides when to call the model based on runtime settings and local Ollama availability.
  • Requests are sent through window.llmapi.generate(...) to the Electron main-process llm:generate IPC handler; the legacy ollama:generate channel remains as a compatibility alias.
  • The main process applies the configured model, optional bearer token, timeout, and num_predict token cap before calling the Ollama Node client.
  • Failed requests can be retried automatically according to the configured retry count.
  • LLM-backed features currently include the Summary view, stream-context follow-up summaries, and the Ask PacketSnitch… context-menu submenu with Ask a question…, Explain this data…, and Summarize this packet….
Backend Bridge Modes
  • HTTP service mode: initializes a long-lived backend service, probes GET /ping, posts capture work to POST /process, and sends control actions through POST /control. The full endpoint list (including the enrichment lookups used by the Conv Analyze Subnet sub-tab) is documented under HTTP Service Mode in the Backend docs.
  • Service metadata can be queried through GET /version, and runtime parser settings can be updated through POST /control (set-runtime-config) without restarting the backend service.
  • HTTP data mode: when enabled, the backend can stream NDJSON progress plus in-memory snapshot payloads back to the renderer.
  • Legacy spawn mode: fallback per-run process launch path used when the service is unavailable or explicitly disabled.

Artifacts Tab

The Artifacts tab is the investigation artifact store. It replaces the old Keystore tab as the primary user-facing workspace and brings together secrets, extracted files, URLs, certificates, credentials, and other useful values discovered during capture analysis. The implementation retains some legacy keystore names internally for session compatibility and plugin APIs, but users should look for Artifacts and Artifact Store in the UI.

Artifact categories

Use the category selector and filter field to narrow the current artifact list:

  • All — every artifact in the active store.
  • Secrets — passwords, private keys, cookies, API keys, OAuth/JWT tokens, cloud credentials, and other authentication material.
  • Items — certificates, email addresses, URLs, and URIs.
  • Files — downloaded, carved, or extracted files with their original bytes and metadata.
  • Misc — unclassified or plugin-provided artifacts and useful capture values that do not fit another category.

Unknown and legacy artifact types remain visible under Misc rather than being discarded.

Session and persistent artifacts
  • Session auto keychain holds artifacts discovered from the active capture, Conv/Crypt workflows, file extraction, decoder output, and context-menu actions. It is rebuilt or refreshed as capture data changes and is cleared when the application session ends.
  • Persistent keychain stores analyst-selected artifacts in the local application database so they can be reused across sessions. The UI now automatically unlocks this local store for the application session; the Wipe persistent store action removes its saved entries.
  • Saved PacketSnitch sessions preserve the relevant artifact state, including file artifacts and session-derived entries, so an investigation can be resumed without re-carving every object.
Artifact actions
Action Description
Load selected Loads the selected artifact into the editor/details workflow for inspection or reuse.
Open link Opens a selected HTTP or HTTPS URL in the system browser.
Send to persistent Copies a session artifact into the persistent store.
Send to Hashes Sends the selected value to Conv → Hashes for digest computation.
Delete selected Removes the selected persistent artifact.
Wipe persistent store Clears all persistent artifacts after confirmation.
Rescan for Artifacts Scans extracted and carved file contents for embedded credentials, tokens, keys, connection strings, and other recognizable secrets.

Artifacts can also be added from the context menu as passwords/secrets, private keys, certificates, cookies, or manual URLs. Packet-derived sources include HTTP authentication and cookies, FTP/SMTP/IMAP/SIP/RDP credentials, hostnames, IPs, email addresses, URLs, hashes, and extracted file content.

File artifacts

Downloaded, carved, and extracted files appear under Files with protocol, filename, byte length, source details, and raw bytes. File artifacts are persisted locally and included in session state. They can be loaded into Conv, sent to the decoder workspace, previewed or saved through context-menu actions, and rescanned for embedded secrets after archive extraction or decompression.


Notes Tab

The Notes tab is a session notes workspace for creating and editing freeform text notes tied to the current session. Click Notes in the toolbar to open it. Every note is also automatically mirrored on the Analysis / Summary tab so observations and conclusions stay in sync (see the Summary Frame section).

Notes Sidebar (right panel)
Control Description
Notes list Scrollable list of all notes in the current session, each prefixed with its position number and a preview of its text. Notes are color-coded by their assigned color.
Color picker Color swatch used when creating a new note, and updated to show the color of the currently selected note.
New note input Text area for composing the body of a new note before adding it.
Add note Creates a new note from the New note input text with the selected color and adds it to the top of the list.
Remove selected Permanently removes the currently selected note from the list.
Save notes file Exports all current notes to a plain-text file on disk (Save dialog). Each note is separated by a --- divider.
Notes Editor (main area)

The main content area shows a full-width editable text area for the currently selected note. Edits are reflected immediately in the notes list preview. The editor is disabled when no note is selected.

The Notes workspace also includes a sanitized live Markdown preview for the selected note, including GitHub-style pipe tables.

Verified Data Flag

The editor footer includes a Mark as verified data (concrete) checkbox. The flag controls how the note is treated by the Summary tab:

  • Off (default): the note is treated as analyst inference / hypothesis and is rendered on the Summary report under ## Inferred Data (from Notes).
  • On: the note is treated as a concrete, analyst-confirmed fact and is rendered under ## Verified Notes (from Notes).

The flag is persisted alongside the note body in the saved session file and restored on load.

Notes Context Menu

Right-clicking in packet or Conv views while notes are active shows a Send to Notes… submenu. See context-menu for details on context menu items.

Notes are saved as part of the session file when Save Session is used.


Log Tab

Clicking Log in the toolbar toggles the Activity Log panel, which slides in from the bottom of the window. The log records all significant GUI actions, backend events, and console output with ISO 8601 timestamps.

Log Entry Formats
Prefix Description
[GUI][UI] User interactions and UI state changes (tab switches, file loads, filter runs, etc.).
[Console][UI] Console log output captured from the renderer process.
[Console][Backend] Error messages forwarded from the Python backend process.

The log is written to a persistent log file on disk. The file path is shown at the top of the log panel.

The Search log entries input filters the visible entries in real time (case-insensitive substring match). The log file on disk is not modified by the search.


The right sidebar provides three contextual data panels that update with each packet.

Datagram Frame

A protocol-specific table of lower-level packet fields. The table content varies depending on the detected protocol:

Protocol condition Fields shown
All packets Checksum fields (IP checksum, TCP/UDP/ICMP checksum)
IPv4 (IP) Source/destination IP, IP header checksum, IP length, IP src/dst class (legacy IPv4 class A / B / C / D / E from the backend getNetclass; IPv6 packets emit IPv6)
IPv6 Source/destination IPv6 (compressed form), IP header checksum, IP length. IPv6 src/dst scope class is computed on demand by classifyIpv6Address (Global unicast, Unspecified, Loopback, Unique local, Link-local, Multicast, Documentation range) when the Analyze Subnet sub-tab inspects the address
DNS (UDP/TCP port 53) Transaction ID, QR flag, query names, answer names, answer IPs, record counts
mDNS / LLMNR / NBNS / NBDGM Rendered by the dedicated Conv decoders (mdns, llmnr, nbns, nbdgm) under the matching protocol subtree; the Datagram Frame panel itself only renders the standard DNS row for these transports
SNMP (port 161/162) SNMP version, community string, PDU type
DHCP (port 67/68) Message type, transaction ID, client IP, offered IP, server IP
DHCPv6 (port 546/547) Rendered by the dedicated dhcpv6 Conv decoder; the Datagram Frame panel falls back to the standard DNS-style row when no DHCPv4 fields are present
NTP (port 123) Leap indicator, version, mode, stratum, reference ID
SIP (port 5060/5061) Message type, method/status, URI, From, To, Call-ID
Kerberos (port 88/464/750) Message type, pvno, realm, cname/sname, KDC options, till, nonce, etype list, ticket, encrypted part
HTTP (port 80/443/8080/8443) Request/response type, method, URL, status code, headers (host, server, content-type, etc.)
IEEE 802.11 (Wi-Fi) SSID, BSSID, channel, frequency, frame type/subtype, cipher, crypto suite (WPA / WPA2 / WPA3 / Open), RSN info, RadioTap signal/noise/rate, plus wifi.decrypt.ok / wifi.decrypt.algorithm / wifi.decrypt.error when the frame was a decryption candidate.
Location

Displays a GeoIP table for the source and/or destination IP addresses, including country, city, postal code, and time zone. For local-network addresses, shows a Localnet indicator.

Payload Entropy

Visualizes the Shannon entropy of the payload as a numeric value and graphical indicator. High entropy typically indicates encrypted or compressed content; low entropy suggests plain text or structured data.


Filtering

Packets can be filtered using an expression in the filter bar. The syntax is:

attribute:value
attribute:value==<val>
attribute:value>=<val>

Multiple conditions can be combined using && (AND), || (OR), and parentheses for grouping:

ip.src.addr:192.168.1.1 && tcp.dst.port:443
(payload.mime:text/html || payload.mime:application/json) && payload.entropy>=4.0

Filter keys use the same dot-notation names as the searchable attributes documented in the Backend docs. Keys are normalized to lowercase with spaces replaced by hyphens.

IPv6 packets share the same ip.* keys as IPv4 (ip.src.addr, ip.dst.addr, ip.chksum, ip.len, ip.src.class, ip.dst.class, ip.proto.num). Examples:

ip.src.addr:2001:db8::1 && tcp.dst.port:443
network.proto:IPv6
ip.proto.num:58 && icmp.type:Echo Request

IPv6 filter values are parsed without truncation: the full 128-bit address is retained up to the comparison operator or the bookmark $ separator. See the Filter Key Reference for the full key table and parsing rules.

The filter history dropdown merges session filter history with user-saved named filters. Right-clicking the filter input lets you save the current query with a label (or remove an exact saved match) via an in-app dialog.

Filter Examples

Expression Description
ip.src.addr:10.0.0.1 Packets from source IP 10.0.0.1
tcp.dst.port:443 TCP packets to port 443
ip.dst.addr:10.0.2.* && transport.proto:tcp TCP Packets destined for the subnet 10.0.2.0/24
payload.entropy>=7.0 Payloads with entropy ≥ 7.0 (likely encrypted/compressed)
payload.mime:text/html Payloads identified as HTML
loc.src.country:China Packets originating from China (GeoIP)
dns.qname:example.com DNS queries for example.com
http.method:POST HTTP POST requests
tcp.flags:SYN Packets with the SYN flag set
snmp.community:public SNMP packets using the public community
ip.src.addr:10.0.0.1 && tcp.dst.port:80 Source 10.0.0.1 to destination port 80
(tcp.dst.port:80 \|\| tcp.dst.port:443) && payload.entropy>=6.0 HTTP/HTTPS with high-entropy payloads

License

GPL v3

Author

Marshall Whittaker


See also