packetsnitch 1.5.604 → 1.5.605

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/.github/FUNDING.yml +15 -0
  2. package/.webpack/main/index.js +1697 -0
  3. package/.webpack/main/index.js.map +1 -0
  4. package/.webpack/renderer/main_window/index.html +1036 -0
  5. package/.webpack/renderer/main_window/index.js +4736 -0
  6. package/.webpack/renderer/main_window/preload.js +1418 -0
  7. package/docs/Backend.md +278 -0
  8. package/docs/Filters.md +735 -0
  9. package/docs/Frontend.md +494 -0
  10. package/docs/README.md +43 -0
  11. package/docs/bitcoin-qr.png +0 -0
  12. package/docs/paypal-qr.png +0 -0
  13. package/docs/screenshots/PacketSnitch_ss10.png +0 -0
  14. package/docs/screenshots/PacketSnitch_ss9-2.jpg +0 -0
  15. package/docs/screenshots/comparison-operator-packetsnitch-ss21.png +0 -0
  16. package/docs/screenshots/packetSnitch_ss13.png +0 -0
  17. package/docs/screenshots/packetSnitch_ss20.png +0 -0
  18. package/docs/screenshots/packetsnitch-ss16.png +0 -0
  19. package/docs/screenshots/packetsnitch_32.png +0 -0
  20. package/docs/screenshots/packetsnitch_ss11.png +0 -0
  21. package/docs/screenshots/packetsnitch_ss12.png +0 -0
  22. package/docs/screenshots/packetsnitch_ss19.png +0 -0
  23. package/docs/screenshots/packetsnitch_ss23.png +0 -0
  24. package/docs/screenshots/packetsnitch_ss24.png +0 -0
  25. package/docs/screenshots/packetsnitch_ss25.png +0 -0
  26. package/docs/screenshots/packetsnitch_win_ss14.png +0 -0
  27. package/docs/screenshots/packetsntich_ss26.png +0 -0
  28. package/docs/screenshots/ps-views.gif +0 -0
  29. package/docs/screenshots/screenshot_7.png +0 -0
  30. package/docs/venmo-qr.png +0 -0
  31. package/forge.config.js +21 -33
  32. package/ideas/Dark-mode UI mockup for packetsnitch.png +0 -0
  33. package/ideas/Dark-packetsnitch-UI-mockup-5.png +0 -0
  34. package/ideas/PacketSnitch-timeline-landscape-mockup.png +0 -0
  35. package/ideas/Screenshot 2026-03-05 at 22-09-09 Packet Decoder Frontend /342/200/223 Figma Make.png +0 -0
  36. package/ideas/Screenshot 2026-03-07 at 12-31-05 Grok _ X.png +0 -0
  37. package/ideas/ideas.txt +340 -0
  38. package/logo/LidakzOne_PERSONAL_USE_ONLY.otf +0 -0
  39. package/logo/byline-packetsnitch.xcf +0 -0
  40. package/logo/logo-packetsnitch-2.png +0 -0
  41. package/logo/logo-packetsnitch-3.png +0 -0
  42. package/logo/logo-packetsnitch-4.png +0 -0
  43. package/logo/logo-packetsnitch-5.png +0 -0
  44. package/logo/logo-packetsnitch.png +0 -0
  45. package/logo/logo-packetsnitch.webp +0 -0
  46. package/logo/logo-packetsnitch.xcf +0 -0
  47. package/logo/packet-snitch-tag-transp-whitetext.png +0 -0
  48. package/logo/packet-snitch-tag-transp.png +0 -0
  49. package/logo/ps-icon.ico +0 -0
  50. package/logo/ps-installer-icon.ico +0 -0
  51. package/logo/qr-code(1).png +0 -0
  52. package/logo/qr-code.png +0 -0
  53. package/logo/rat-standing.png +0 -0
  54. package/package.json +1 -2
  55. package/samples/hosts.json +15112 -0
  56. package/samples/hustoj_capture.pcapng +0 -0
  57. package/.eslintrc.json +0 -28
  58. package/.webpack/x64/main/index.js +0 -2
  59. package/.webpack/x64/main/index.js.map +0 -1
  60. package/.webpack/x64/renderer/main_window/index.html +0 -3
  61. package/.webpack/x64/renderer/main_window/index.js +0 -3
  62. package/.webpack/x64/renderer/main_window/index.js.LICENSE.txt +0 -36
  63. package/.webpack/x64/renderer/main_window/index.js.map +0 -1
  64. package/.webpack/x64/renderer/main_window/preload.js +0 -2
  65. package/.webpack/x64/renderer/main_window/preload.js.map +0 -1
  66. /package/.webpack/{x64/renderer → renderer}/assets/css/rubikglitch.woff2 +0 -0
  67. /package/.webpack/{x64/renderer → renderer}/assets/css/style.css +0 -0
  68. /package/.webpack/{x64/renderer → renderer}/assets/images/loading.gif +0 -0
  69. /package/.webpack/{x64/renderer → renderer}/assets/images/logo.webp +0 -0
  70. /package/.webpack/{x64/renderer → renderer}/assets/images/packet-snitch-tag.webp +0 -0
@@ -0,0 +1,735 @@
1
+ ![PacketSnitch by oxasploits](https://raw.githubusercontent.com/oxasploits/PacketSnitch/main/Logo/packet-snitch-tag-transp-whitetext.png)
2
+
3
+ # Filter Reference
4
+
5
+ ## Overview
6
+
7
+ PacketSnitch's filter bar lets you search and narrow down the packets displayed in the frontend. Filters are evaluated over the full loaded dataset (all hosts), not just the currently selected host. Results update immediately after pressing **Enter** in the filter bar, and the **Filtered Packets** counter in the left sidebar updates to reflect the number of matching packets.
8
+
9
+ ---
10
+
11
+ ## Syntax
12
+
13
+ ### Basic equality
14
+
15
+ ```
16
+ key:value
17
+ ```
18
+
19
+ Matches packets where `key` equals `value`. String comparisons are **case-insensitive**.
20
+
21
+ ```
22
+ ip.src.addr:192.168.1.1
23
+ tcp.dst.port:443
24
+ payload.mime:text/html
25
+ ```
26
+
27
+ ### Comparison operators
28
+
29
+ Prefix the value with a comparison operator to perform numeric or lexicographic comparisons.
30
+
31
+ ```
32
+ key:==value (explicit equality — same as key:value)
33
+ key:!=value (not equal)
34
+ key:>value (greater than)
35
+ key:>=value (greater than or equal)
36
+ key:<value (less than)
37
+ key:<=value (less than or equal)
38
+ ```
39
+
40
+ ```
41
+ payload.entropy:>=7.0
42
+ ip.len:>100
43
+ tcp.dst.port:!=80
44
+ payload.len:<64
45
+ ```
46
+
47
+ ### Boolean combinators
48
+
49
+ Use `&&` (AND) and `||` (OR) to combine multiple conditions. AND has higher precedence than OR.
50
+
51
+ ```
52
+ ip.src.addr:10.0.0.1 && tcp.dst.port:443
53
+ tcp.dst.port:80 || tcp.dst.port:443
54
+ ```
55
+
56
+ ### Grouping with parentheses
57
+
58
+ Use parentheses to override precedence and group sub-expressions.
59
+
60
+ ```
61
+ (tcp.dst.port:80 || tcp.dst.port:443) && payload.entropy:>=6.0
62
+ (payload.mime:text/html || payload.mime:application/json) && ip.dst.addr:10.0.0.1
63
+ ```
64
+
65
+ The context menu also supports explicit parenthesis editing via **Add to filter... → Parentheses...**, including **Append (**, **Append )**, and **Wrap current query with (...)**.
66
+
67
+ ### Inversion with `!`
68
+
69
+ Use `!` to invert either a single expression or a grouped expression.
70
+
71
+ ```
72
+ !tcp.dst.port:443
73
+ !(tcp.dst.port:80 || tcp.dst.port:443)
74
+ ip.src.addr:10.0.0.1 && !(mime.type:text/html || mime.type:application/json)
75
+ ```
76
+
77
+ ### Clearing the filter
78
+
79
+ Delete all text from the filter bar and press **Enter** to show all packets again.
80
+
81
+ ---
82
+
83
+ ## How Keys Work
84
+
85
+ Filter keys correspond directly to the dot-notation leaf-node names embedded in each packet's JSON. The filter engine normalizes keys to **lowercase** with **spaces replaced by hyphens**, so both the machine-readable dot-notation form (`wire.len`) and the normalized human-readable form (`wire-length`) are accepted interchangeably. This document uses the canonical dot-notation names throughout.
86
+
87
+ Additional shorthand aliases are also supported: `wire.proto`, `eth.src.vendor`, and `mime.type`. Text queries for `eth.src.vendor`, `mime.type`, and `dns.qname` are matched case-insensitively using substring matching.
88
+
89
+ Protocol-specific keys (e.g., `dns.*`, `http.*`) are only present in packets where that protocol was detected, so filtering on them automatically scopes results to the relevant protocol traffic.
90
+
91
+ ---
92
+
93
+ ## Filter Key Reference
94
+
95
+ ### Core Packet Fields
96
+
97
+ | Filter Key | Type | Description |
98
+ | ------------------ | ------- | ------------------------------------------------------------ |
99
+ | `packet.timestamp` | string | Capture timestamp (`YYYY-MM-DD HH:MM:SS.ffffff`) |
100
+ | `packet.proto` | string | Transport protocol (`tcp`, `udp`, `icmp`) |
101
+ | `packet.hex` | string | Full raw packet as a hex string |
102
+
103
+ ### Ethernet Fields
104
+
105
+ > Only populated when both source and destination IPs are on the local network.
106
+
107
+ | Filter Key | Type | Description |
108
+ | ---------------------- | ------ | ------------------------------------------- |
109
+ | `ether.src.mac.addr` | string | Source MAC address |
110
+ | `ether.dst.mac.addr` | string | Destination MAC address |
111
+ | `ether.src.mac.vendor` | string | Hardware vendor of the source MAC |
112
+ | `ether.dst.mac.vendor` | string | Hardware vendor of the destination MAC |
113
+
114
+ ### IP Fields
115
+
116
+ | Filter Key | Type | Description |
117
+ | -------------- | ------- | ----------------------------------------------------------------- |
118
+ | `ip.src.addr` | string | Source IP address |
119
+ | `ip.dst.addr` | string | Destination IP address |
120
+ | `ip.chksum` | string | IP header checksum (hex, e.g. `0xd1ae`) |
121
+ | `ip.len` | integer | IP layer length in bytes |
122
+ | `ip.src.class` | string | Network class of the source IP (`Localnet`, `A`, `B`, `C`) |
123
+ | `ip.dst.class` | string | Network class of the destination IP (`Localnet`, `A`, `B`, `C`) |
124
+
125
+ ### TCP Fields
126
+
127
+ | Filter Key | Type | Description |
128
+ | -------------- | ------- | -------------------------------------------------------- |
129
+ | `tcp.src.port` | integer | TCP source port |
130
+ | `tcp.dst.port` | integer | TCP destination port |
131
+ | `tcp.chksum` | string | TCP checksum (hex) |
132
+ | `tcp.urgptr` | boolean | Whether the urgent pointer is set (`true` / `false`) |
133
+ | `tcp.flags` | string | Active TCP flags (e.g. `SYN`, `ACK\|PSH`, `SYN\|ACK`) |
134
+ | `tcp.len` | integer | TCP header length in bytes |
135
+ | `tcp.proto` | string | IANA service name for the destination port (e.g. `https`) |
136
+ | `tcp.desc` | string | ICANN port description for the destination port |
137
+
138
+ ### UDP Fields
139
+
140
+ | Filter Key | Type | Description |
141
+ | -------------- | ------- | ----------------------------- |
142
+ | `udp.src.port` | integer | UDP source port |
143
+ | `udp.dst.port` | integer | UDP destination port |
144
+ | `udp.chksum` | string | UDP checksum (hex) |
145
+ | `udp.len` | integer | UDP datagram length in bytes |
146
+
147
+ ### ICMP Fields
148
+
149
+ | Filter Key | Type | Description |
150
+ | ------------- | ------- | ------------------------------------------------------------------ |
151
+ | `icmp.type` | string | ICMP message type (e.g. `Echo Request`, `Destination Unreachable`) |
152
+ | `icmp.code` | integer | ICMP code value |
153
+ | `icmp.id` | integer | ICMP identifier field |
154
+ | `icmp.seq` | integer | ICMP sequence number |
155
+ | `icmp.chksum` | string | ICMP checksum (hex) |
156
+
157
+ ### Wire / Payload Fields
158
+
159
+ | Filter Key | Type | Description |
160
+ | ---------------------------- | ------- | ------------------------------------------------------------------------------ |
161
+ | `wire.len` | integer | Total wire length of the segment in bytes |
162
+ | `payload.hex` | string | Raw payload as a hex string |
163
+ | `payload.ascii` | string | Raw payload decoded as ASCII |
164
+ | `payload.len` | integer | Payload length in bytes |
165
+ | `payload.mime` | string | MIME type (e.g. `text/html`, `application/octet-stream`) |
166
+ | `payload.entropy` | float | Shannon entropy of the payload (bits per byte, 0.0 – 8.0) |
167
+ | `payload.charset` | string | `ascii` if all bytes are printable ASCII, otherwise `binary` |
168
+ | `payload.encoding` | string | Detected character encoding (e.g. `utf-8`, `iso-8859-1`) |
169
+ | `payload.chars.used` | integer | Number of distinct byte values present in the payload |
170
+ | `payload.decompressed.hex` | string | Decompressed payload as a hex string (only present if payload was compressed) |
171
+ | `payload.decompressed.ascii` | string | Decompressed payload as ASCII (only present if payload was compressed) |
172
+
173
+ ### GeoIP / Location Fields
174
+
175
+ > Only populated for routable (non-private) IP addresses.
176
+
177
+ | Filter Key | Type | Description |
178
+ | ------------------ | ------ | -------------------------------------------- |
179
+ | `loc.src.country` | string | Country of the source IP |
180
+ | `loc.src.city` | string | City of the source IP |
181
+ | `loc.src.postal` | string | Postal code of the source IP |
182
+ | `loc.src.tz` | string | Time zone of the source IP (short alias) |
183
+ | `loc.src.timezone` | string | Time zone of the source IP (full name) |
184
+ | `loc.dst.country` | string | Country of the destination IP |
185
+ | `loc.dst.city` | string | City of the destination IP |
186
+ | `loc.dst.postal` | string | Postal code of the destination IP |
187
+ | `loc.dst.tz` | string | Time zone of the destination IP (short alias) |
188
+ | `loc.dst.timezone` | string | Time zone of the destination IP (full name) |
189
+
190
+ ### Active Recon Fields
191
+
192
+ > Only populated when the backend was run with `-a` (active recon).
193
+
194
+ | Filter Key | Type | Description |
195
+ | ------------- | ------ | ------------------------------------ |
196
+ | `host.banner` | string | Server banner retrieved via active recon |
197
+
198
+ ### DNS Fields
199
+
200
+ > Only present on packets captured on UDP/TCP port 53.
201
+
202
+ | Filter Key | Type | Description |
203
+ | ---------------- | ------- | ------------------------------------------------ |
204
+ | `dns.id` | integer | DNS transaction ID |
205
+ | `dns.qr` | boolean | `true` = response, `false` = query |
206
+ | `dns.qname` | string | First queried domain name |
207
+ | `dns.qnames` | array | All queried domain names in the message |
208
+ | `dns.aname` | string | First answer name |
209
+ | `dns.anames` | array | All answer names in the message |
210
+ | `dns.aip` | string | First resolved IP address from the response |
211
+ | `dns.aips` | array | All resolved IP addresses from the response |
212
+ | `dns.qdcount` | integer | Number of questions in the message |
213
+ | `dns.ancount` | integer | Number of answer records in the message |
214
+ | `dns.hostnames` | array | Hostnames resolved via active recon (requires `-a`) |
215
+
216
+ ### HTTP Fields
217
+
218
+ > Only present on packets captured on TCP port 80, 443, 8080, or 8443.
219
+
220
+ | Filter Key | Type | Description |
221
+ | ------------------------ | ------ | -------------------------------------------------------- |
222
+ | `http.type` | string | `Request` or `Response` |
223
+ | `http.method` | string | HTTP method (`GET`, `POST`, `PUT`, etc.) — requests only |
224
+ | `http.url` | string | Request URL path — requests only |
225
+ | `http.version` | string | HTTP version (e.g. `HTTP/1.1`) |
226
+ | `http.host` | string | `Host` header — requests only |
227
+ | `http.user_agent` | string | `User-Agent` header — requests only |
228
+ | `http.content_type` | string | `Content-Type` header |
229
+ | `http.content_length` | string | `Content-Length` header |
230
+ | `http.referer` | string | `Referer` header — requests only |
231
+ | `http.accept` | string | `Accept` header — requests only |
232
+ | `http.accept_encoding` | string | `Accept-Encoding` header — requests only |
233
+ | `http.connection` | string | `Connection` header |
234
+ | `http.status_code` | string | HTTP status code (e.g. `200`) — responses only |
235
+ | `http.status_msg` | string | HTTP status message (e.g. `OK`) — responses only |
236
+ | `http.server` | string | `Server` header — responses only |
237
+ | `http.content_encoding` | string | `Content-Encoding` header — responses only |
238
+ | `http.transfer_encoding` | string | `Transfer-Encoding` header — responses only |
239
+ | `http.location` | string | `Location` redirect header — responses only |
240
+
241
+ ### SNMP Fields
242
+
243
+ > Only present on packets captured on UDP/TCP port 161 or 162.
244
+
245
+ | Filter Key | Type | Description |
246
+ | ---------------- | ------ | --------------------------------------------------------- |
247
+ | `snmp.version` | string | SNMP version (`v1`, `v2c`, `v3`) |
248
+ | `snmp.community` | string | SNMP community string |
249
+ | `snmp.pdu_type` | string | PDU type (`GetRequest`, `GetResponse`, `Trap`, etc.) |
250
+
251
+ ### DHCP Fields
252
+
253
+ > Only present on packets captured on UDP port 67 or 68.
254
+
255
+ | Filter Key | Type | Description |
256
+ | --------------- | ------ | -------------------------------------------------------------- |
257
+ | `dhcp.msg_type` | string | DHCP message type (`Discover`, `Offer`, `Request`, `Decline`, `ACK`, `NAK`, `Release`, `Inform`) |
258
+ | `dhcp.xid` | string | Transaction ID (hex) |
259
+ | `dhcp.ciaddr` | string | Client IP address |
260
+ | `dhcp.yiaddr` | string | Offered IP address |
261
+ | `dhcp.siaddr` | string | Server IP address |
262
+
263
+ ### NTP Fields
264
+
265
+ > Only present on packets captured on UDP port 123.
266
+
267
+ | Filter Key | Type | Description |
268
+ | ------------- | ------- | ------------------------------------------------------------------ |
269
+ | `ntp.leap` | string | Leap indicator (`no warning`, `last minute has 61s`, etc.) |
270
+ | `ntp.version` | integer | NTP version number |
271
+ | `ntp.mode` | string | NTP mode (`client`, `server`, `broadcast`, etc.) |
272
+ | `ntp.stratum` | integer | Stratum level (0 = unspecified, 1 = primary, 2+ = secondary) |
273
+ | `ntp.ref_id` | string | Reference ID (IP address or 4-character ASCII string) |
274
+
275
+ ### SIP Fields
276
+
277
+ > Only present on packets captured on UDP/TCP port 5060 or 5061.
278
+
279
+ | Filter Key | Type | Description |
280
+ | ----------------- | ------ | ------------------------------------------------------------- |
281
+ | `sip.type` | string | `Request` or `Response` |
282
+ | `sip.method` | string | SIP method (`INVITE`, `REGISTER`, `BYE`, etc.) — requests only |
283
+ | `sip.uri` | string | Request URI — requests only |
284
+ | `sip.from` | string | `From` header |
285
+ | `sip.to` | string | `To` header |
286
+ | `sip.call_id` | string | `Call-ID` header |
287
+ | `sip.status_code` | string | SIP status code (e.g. `200`) — responses only |
288
+ | `sip.status_msg` | string | SIP status message (e.g. `OK`) — responses only |
289
+
290
+ ### FTP Fields
291
+
292
+ > Only present on packets captured on TCP port 20 or 21.
293
+
294
+ | Filter Key | Type | Description |
295
+ | ---------------- | ------ | ------------------------------------------------------------ |
296
+ | `ftp.type` | string | `Command` or `Response` |
297
+ | `ftp.command` | string | FTP command (e.g. `USER`, `RETR`, `LIST`) — commands only |
298
+ | `ftp.argument` | string | Argument passed to the command — commands only |
299
+ | `ftp.status_code`| string | FTP status code (e.g. `220`, `230`) — responses only |
300
+ | `ftp.message` | string | Status message text — responses only |
301
+
302
+ ### SMTP Fields
303
+
304
+ > Only present on packets captured on TCP port 25, 587, or 465.
305
+
306
+ | Filter Key | Type | Description |
307
+ | ----------------- | ------ | -------------------------------------------------------------- |
308
+ | `smtp.type` | string | `Command` or `Response` |
309
+ | `smtp.command` | string | SMTP command (e.g. `EHLO`, `MAIL`, `RCPT`) — commands only |
310
+ | `smtp.argument` | string | Argument passed to the command — commands only |
311
+ | `smtp.status_code`| string | SMTP status code (e.g. `250`, `354`) — responses only |
312
+ | `smtp.message` | string | Status message text — responses only |
313
+
314
+ ### POP3 Fields
315
+
316
+ > Only present on packets captured on TCP port 110 or 995.
317
+
318
+ | Filter Key | Type | Description |
319
+ | ---------------- | ------ | -------------------------------------------------------------- |
320
+ | `pop3.type` | string | `Command` or `Response` |
321
+ | `pop3.command` | string | POP3 command (e.g. `USER`, `RETR`, `LIST`) — commands only |
322
+ | `pop3.argument` | string | Argument passed to the command — commands only |
323
+ | `pop3.status` | string | Response status indicator (`+OK` or `-ERR`) — responses only |
324
+ | `pop3.message` | string | Response message text — responses only |
325
+
326
+ ### IMAP Fields
327
+
328
+ > Only present on packets captured on TCP port 143 or 993.
329
+
330
+ | Filter Key | Type | Description |
331
+ | --------------- | ------ | --------------------------------------------------------------------------- |
332
+ | `imap.type` | string | `Command`, `Response`, or `Untagged` |
333
+ | `imap.tag` | string | IMAP tag (e.g. `A001`) — commands and responses only |
334
+ | `imap.command` | string | IMAP command (e.g. `LOGIN`, `SELECT`, `FETCH`) — commands only |
335
+ | `imap.argument` | string | Command argument — commands only |
336
+ | `imap.status` | string | Status keyword (`OK`, `NO`, `BAD`, or untagged keyword) — responses/untagged|
337
+ | `imap.info` | string | Additional info text — untagged responses only |
338
+ | `imap.message` | string | Response message text — tagged responses only |
339
+
340
+ ### Telnet Fields
341
+
342
+ > Only present on packets captured on TCP port 23.
343
+
344
+ | Filter Key | Type | Description |
345
+ | -------------------- | ------ | --------------------------------------------------------- |
346
+ | `telnet.negotiations`| array | List of Telnet IAC negotiation option names |
347
+ | `telnet.text` | string | Printable ASCII text extracted from the payload (≤ 200 chars) |
348
+
349
+ ### IRC Fields
350
+
351
+ > Only present on packets captured on TCP port 6667, 6668, or 6669.
352
+
353
+ | Filter Key | Type | Description |
354
+ | --------------- | ------- | -------------------------------------------------------- |
355
+ | `irc.command` | string | IRC command from the first parsed message (e.g. `PRIVMSG`) |
356
+ | `irc.prefix` | string | Message prefix (nick/server) from the first parsed message |
357
+ | `irc.params` | string | Command parameters from the first parsed message |
358
+ | `irc.msg_count` | integer | Total number of IRC messages parsed in the payload |
359
+
360
+ ### MTP / MMS Fields
361
+
362
+ > Only present on packets captured on TCP port 1755.
363
+
364
+ | Filter Key | Type | Description |
365
+ | ------------- | ------- | -------------------------------------------------------- |
366
+ | `mtp.protocol`| string | Always `MMS/MTP` |
367
+ | `mtp.cmd_id` | string | Command ID as a hex string (e.g. `0x00040001`) |
368
+ | `mtp.command` | string | Human-readable command name |
369
+ | `mtp.length` | integer | Declared message length in bytes |
370
+
371
+ ### LDAP Fields
372
+
373
+ > Only present on packets captured on TCP or UDP port 389 or 636.
374
+
375
+ | Filter Key | Type | Description |
376
+ | --------------- | ------- | ------------------------------------ |
377
+ | `ldap.msg_id` | integer | LDAP message ID |
378
+ | `ldap.operation`| string | LDAP operation name (e.g. `BindRequest`, `SearchRequest`) |
379
+
380
+ ### MySQL Fields
381
+
382
+ > Only present on packets captured on TCP port 3306.
383
+
384
+ | Filter Key | Type | Description |
385
+ | --------------------- | ------- | ---------------------------------------------------------------- |
386
+ | `mysql.type` | string | Packet type: `Server Greeting`, `OK`, `Error`, or `Command` |
387
+ | `mysql.seq` | integer | MySQL sequence number |
388
+ | `mysql.proto_version` | integer | Protocol version (always `10`) — Server Greeting only |
389
+ | `mysql.server_version`| string | MySQL server version string — Server Greeting only |
390
+ | `mysql.error_code` | integer | MySQL error code — Error only |
391
+ | `mysql.error_msg` | string | MySQL error message — Error only |
392
+ | `mysql.command` | string | Command type name (e.g. `Query`, `Quit`) — Command only |
393
+ | `mysql.query` | string | SQL query text — Command only |
394
+
395
+ ### PostgreSQL Fields
396
+
397
+ > Only present on packets captured on TCP port 5432.
398
+
399
+ | Filter Key | Type | Description |
400
+ | ------------------- | ------- | ---------------------------------------------------------------- |
401
+ | `pg.type` | string | Message type (e.g. `Query`, `ReadyForQuery`, `StartupMessage`) |
402
+ | `pg.direction` | string | `Backend` (server→client) or `Frontend` (client→server) |
403
+ | `pg.msg_length` | integer | Declared message length in bytes |
404
+ | `pg.proto_version` | string | Protocol version (e.g. `3.0`) — StartupMessage only |
405
+ | `pg.body` | string | Decoded body text — Frontend messages only |
406
+
407
+ ### XMPP Fields
408
+
409
+ > Only present on packets captured on TCP port 5222 or 5223.
410
+
411
+ | Filter Key | Type | Description |
412
+ | ------------- | ------ | --------------------------------------------- |
413
+ | `xmpp.stanza` | string | Stanza type (e.g. `message`, `presence`, `iq`) |
414
+ | `xmpp.to` | string | `to` attribute of the stanza |
415
+ | `xmpp.from` | string | `from` attribute of the stanza |
416
+
417
+ ### SMB Fields
418
+
419
+ > Only present on packets captured on TCP port 139 or 445.
420
+
421
+ | Filter Key | Type | Description |
422
+ | --------------- | ------- | --------------------------------------------------------- |
423
+ | `smb.version` | string | `SMBv1` or `SMBv2/v3` |
424
+ | `smb.command` | string | SMB command name (e.g. `SMB_COM_NEGOTIATE`, `Create`) |
425
+ | `smb.status` | string | NT status code as a hex string (e.g. `0x00000000`) |
426
+ | `smb.is_response`| boolean| `true` if this is a server response, `false` if a request |
427
+
428
+ ### MQTT Fields
429
+
430
+ > Only present on packets captured on TCP or UDP port 1883 or 8883.
431
+
432
+ | Filter Key | Type | Description |
433
+ | --------------- | ------- | ---------------------------------------------------------------- |
434
+ | `mqtt.msg_type` | string | MQTT message type (e.g. `CONNECT`, `PUBLISH`, `SUBSCRIBE`) |
435
+ | `mqtt.qos` | integer | Quality of Service level (0, 1, or 2) |
436
+ | `mqtt.dup` | boolean | Whether the DUP flag is set |
437
+ | `mqtt.retain` | boolean | Whether the RETAIN flag is set |
438
+ | `mqtt.topic` | string | Topic string — PUBLISH messages only |
439
+
440
+ ### RTSP Fields
441
+
442
+ > Only present on packets captured on TCP port 554.
443
+
444
+ | Filter Key | Type | Description |
445
+ | --------------------- | ------ | ----------------------------------------------------------------- |
446
+ | `rtsp.type` | string | `Request` or `Response` |
447
+ | `rtsp.version` | string | RTSP version (e.g. `RTSP/1.0`) |
448
+ | `rtsp.method` | string | RTSP method (e.g. `DESCRIBE`, `SETUP`, `PLAY`) — requests only |
449
+ | `rtsp.url` | string | Request URL — requests only |
450
+ | `rtsp.cseq` | string | `CSeq` header value |
451
+ | `rtsp.session` | string | `Session` header value |
452
+ | `rtsp.transport` | string | `Transport` header value — requests only |
453
+ | `rtsp.status_code` | string | RTSP status code (e.g. `200`) — responses only |
454
+ | `rtsp.status_msg` | string | RTSP status message (e.g. `OK`) — responses only |
455
+ | `rtsp.content_type` | string | `Content-Type` header — responses only |
456
+ | `rtsp.content_length` | string | `Content-Length` header — responses only |
457
+
458
+ ### TFTP Fields
459
+
460
+ > Only present on packets captured on UDP port 69.
461
+
462
+ | Filter Key | Type | Description |
463
+ | ----------------- | ------- | ------------------------------------------------------------------ |
464
+ | `tftp.opcode` | string | TFTP opcode (`Read Request`, `Write Request`, `Data`, `Acknowledgment`, `Error`) |
465
+ | `tftp.filename` | string | File name — Read/Write Request only |
466
+ | `tftp.mode` | string | Transfer mode (e.g. `octet`, `netascii`) — Read/Write Request only |
467
+ | `tftp.block` | integer | Block number — Data and Acknowledgment only |
468
+ | `tftp.data_len` | integer | Length of the data payload in bytes — Data only |
469
+ | `tftp.error_code` | integer | TFTP error code — Error only |
470
+ | `tftp.error_desc` | string | Standard error description — Error only |
471
+ | `tftp.error_msg` | string | Custom error message — Error only |
472
+
473
+ ### BGP Fields
474
+
475
+ > Only present on packets captured on TCP port 179.
476
+
477
+ | Filter Key | Type | Description |
478
+ | ------------------- | ------- | -------------------------------------------------------------------- |
479
+ | `bgp.type` | string | BGP message type (`OPEN`, `UPDATE`, `NOTIFICATION`, `KEEPALIVE`, `ROUTE-REFRESH`) |
480
+ | `bgp.length` | integer | Total message length in bytes |
481
+ | `bgp.version` | integer | BGP version number — OPEN only |
482
+ | `bgp.asn` | integer | Sender's Autonomous System Number — OPEN only |
483
+ | `bgp.hold_time` | integer | Negotiated hold time in seconds — OPEN only |
484
+ | `bgp.router_id` | string | BGP router ID (dotted-decimal IP) — OPEN only |
485
+ | `bgp.error_code` | integer | Error code — NOTIFICATION only |
486
+ | `bgp.error_name` | string | Human-readable error name — NOTIFICATION only |
487
+ | `bgp.error_subcode` | integer | Error subcode — NOTIFICATION only |
488
+
489
+ ### HTTP/2 Fields
490
+
491
+ > Detected on any TCP port when a binary HTTP/2 frame or connection preface is found.
492
+
493
+ | Filter Key | Type | Description |
494
+ | -------------------- | ------- | ---------------------------------------------------------------- |
495
+ | `http2.preface` | boolean | `true` if the HTTP/2 connection preface (`PRI * HTTP/2.0…`) was detected |
496
+ | `http2.frame_type` | string | Frame type (e.g. `DATA`, `HEADERS`, `SETTINGS`, `PING`, `GOAWAY`) |
497
+ | `http2.frame_length` | integer | Frame payload length in bytes |
498
+ | `http2.frame_flags` | string | Frame flags as a hex string (e.g. `0x04`) |
499
+ | `http2.stream_id` | integer | Stream identifier |
500
+
501
+ ### NNTP Fields
502
+
503
+ > Only present on packets captured on TCP port 119.
504
+
505
+ | Filter Key | Type | Description |
506
+ | ------------------ | ------ | ---------------------------------------------------------- |
507
+ | `nntp.type` | string | `Command` or `Response` |
508
+ | `nntp.command` | string | NNTP command (e.g. `GROUP`, `ARTICLE`, `POST`) — commands only |
509
+ | `nntp.argument` | string | Command argument — commands only |
510
+ | `nntp.status_code` | string | NNTP status code (e.g. `211`, `420`) — responses only |
511
+ | `nntp.message` | string | Response message text — responses only |
512
+
513
+ ### RADIUS Fields
514
+
515
+ > Only present on packets captured on TCP or UDP port 1812, 1813, 1645, or 1646.
516
+
517
+ | Filter Key | Type | Description |
518
+ | -------------- | ------- | -------------------------------------------------------------------- |
519
+ | `radius.code` | string | RADIUS packet code (e.g. `Access-Request`, `Access-Accept`, `Accounting-Request`) |
520
+ | `radius.id` | integer | Packet identifier |
521
+ | `radius.length`| integer | Total packet length in bytes |
522
+ | `radius.attrs` | array | List of decoded RADIUS attributes (`{Type, Value}` objects) |
523
+
524
+ ---
525
+
526
+ ## Examples
527
+
528
+ ### IP and Port Filtering
529
+
530
+ ```
531
+ # Packets from a specific source IP
532
+ ip.src.addr:192.168.1.10
533
+
534
+ # Packets going to a specific destination IP
535
+ ip.dst.addr:10.0.0.1
536
+
537
+ # Traffic on destination port 443
538
+ tcp.dst.port:443
539
+
540
+ # Traffic from a source port range (above 1024 — high ephemeral ports)
541
+ tcp.src.port:>1024
542
+
543
+ # Traffic between two specific hosts
544
+ ip.src.addr:10.0.0.5 && ip.dst.addr:10.0.0.1
545
+
546
+ # All HTTP and HTTPS traffic
547
+ tcp.dst.port:80 || tcp.dst.port:443
548
+
549
+ # Large IP packets
550
+ ip.len:>1000
551
+ ```
552
+
553
+ ### Payload and Entropy Filtering
554
+
555
+ ```
556
+ # Payloads likely encrypted or compressed (high entropy)
557
+ payload.entropy:>=7.0
558
+
559
+ # Small payloads
560
+ payload.len:<64
561
+
562
+ # HTML responses
563
+ payload.mime:text/html
564
+
565
+ # JSON payloads
566
+ payload.mime:application/json
567
+
568
+ # Plain-text (ASCII) payloads only
569
+ payload.charset:ascii
570
+
571
+ # Payloads encoded as UTF-8
572
+ payload.encoding:utf-8
573
+
574
+ # Packets that contained a compressed payload
575
+ payload.decompressed.ascii:!=
576
+
577
+ # High-entropy HTML traffic — likely HTTPS with cleartext body
578
+ (tcp.dst.port:80 || tcp.dst.port:443) && payload.entropy:>=6.0
579
+
580
+ # JSON payloads from a specific host
581
+ payload.mime:application/json && ip.src.addr:10.0.0.5
582
+ ```
583
+
584
+ ### GeoIP / Location Filtering
585
+
586
+ ```
587
+ # Packets originating from China (GeoIP)
588
+ loc.src.country:China
589
+
590
+ # Packets destined for Germany
591
+ loc.dst.country:Germany
592
+
593
+ # Packets from a specific city
594
+ loc.src.city:Hangzhou
595
+
596
+ # Traffic from China going to local network
597
+ loc.src.country:China && ip.dst.class:Localnet
598
+
599
+ # Outbound traffic to a foreign country
600
+ ip.src.class:Localnet && loc.dst.country:Russia
601
+ ```
602
+
603
+ ### Protocol-Specific Filtering
604
+
605
+ ```
606
+ # DNS queries only (not responses)
607
+ dns.qr:false
608
+
609
+ # DNS queries for a specific domain
610
+ dns.qname:example.com
611
+
612
+ # All DNS responses
613
+ dns.qr:true
614
+
615
+ # HTTP POST requests
616
+ http.method:POST
617
+
618
+ # HTTP responses with a 404 status
619
+ http.status_code:404
620
+
621
+ # HTTP responses from a specific server
622
+ http.server:nginx
623
+
624
+ # HTTP requests to a specific host header
625
+ http.host:api.example.com
626
+
627
+ # HTTPS responses (port 443) with error status
628
+ tcp.dst.port:443 && http.status_code:>=400
629
+
630
+ # SNMP packets using the "public" community string
631
+ snmp.community:public
632
+
633
+ # SNMP traps
634
+ snmp.pdu_type:Trap
635
+
636
+ # DHCP DISCOVER messages
637
+ dhcp.msg_type:Discover
638
+
639
+ # NTP client requests
640
+ ntp.mode:client
641
+
642
+ # NTP with a non-primary stratum
643
+ ntp.stratum:>1
644
+
645
+ # SIP INVITE requests
646
+ sip.method:INVITE
647
+
648
+ # SIP calls from a specific URI
649
+ sip.from:sip:alice@example.com
650
+ ```
651
+
652
+ ### TCP Flags
653
+
654
+ ```
655
+ # SYN packets (connection initiation)
656
+ tcp.flags:SYN
657
+
658
+ # RST packets (connection reset)
659
+ tcp.flags:RST
660
+
661
+ # FIN packets (connection teardown)
662
+ tcp.flags:FIN
663
+
664
+ # Packets with both ACK and PSH set
665
+ tcp.flags:ACK|PSH
666
+ ```
667
+
668
+ ### Ethernet / MAC Filtering
669
+
670
+ ```
671
+ # Packets from a specific MAC address
672
+ ether.src.mac.addr:08:9d:f4:84:e9:28
673
+
674
+ # Packets from a specific vendor
675
+ ether.src.mac.vendor:Intel
676
+
677
+ # Local traffic between two known MAC addresses
678
+ ether.src.mac.addr:08:9d:f4:84:e9:28 && ether.dst.mac.addr:b8:3a:08:bc:4e:70
679
+ ```
680
+
681
+ ### Active Recon
682
+
683
+ ```
684
+ # Hosts running Apache
685
+ host.banner:Apache
686
+
687
+ # Hosts running nginx
688
+ host.banner:nginx
689
+
690
+ # Any host where a banner was retrieved
691
+ host.banner:!=Active recon not performed
692
+ ```
693
+
694
+ ### Complex Multi-Condition Queries
695
+
696
+ ```
697
+ # High-entropy traffic from China to local network on common web ports
698
+ (tcp.dst.port:80 || tcp.dst.port:443) && loc.src.country:China && payload.entropy:>=6.0
699
+
700
+ # DNS queries from internal hosts
701
+ dns.qr:false && ip.src.class:Localnet
702
+
703
+ # All SNMP and DHCP management traffic
704
+ (snmp.community:public || snmp.pdu_type:Trap) || (dhcp.msg_type:DISCOVER || dhcp.msg_type:OFFER)
705
+
706
+ # Large encrypted TCP packets from external sources
707
+ tcp.dst.port:443 && payload.len:>500 && payload.entropy:>=7.0 && ip.src.class:!=Localnet
708
+
709
+ # HTTP POST requests carrying JSON payloads
710
+ http.method:POST && payload.mime:application/json
711
+
712
+ # SIP calls destined for a specific domain
713
+ sip.method:INVITE && sip.to:example.com
714
+ ```
715
+
716
+ ---
717
+
718
+ ## Tips
719
+
720
+ - **Press Enter** to apply the filter after typing in the filter bar. The filter is not applied as you type.
721
+ - **String matching is case-insensitive.** `loc.dst.country:china` matches the same packets as `loc.dst.country:China`.
722
+ - **Protocol-specific keys only exist when that protocol was detected.** Filtering on `http.method:GET` will return only HTTP packets where the method field was parsed.
723
+ - **GeoIP keys are absent for private/local IPs.** Use `ip.src.class:Localnet` to identify local traffic instead of relying on `loc.src.*` fields.
724
+ - **Active recon keys require the `-a` flag** when running the backend. Without it, `host.banner` will contain `Active recon not performed` for all packets.
725
+ - **An empty filter bar shows all packets.** Clear the filter and press Enter to reset the view.
726
+
727
+ ---
728
+
729
+ ## License
730
+
731
+ GPL v3
732
+
733
+ ## Author
734
+
735
+ Marshall Whittaker