Wireshark Cheatsheet
Columns and Coloring
Use this Wireshark reference while you build software engineering projects, review code, or refresh the syntax you reach for most.
Default Columns
The packet list ships with seven columns. Each is a column type, not a field, which is why some of them cannot be filtered on directly.
| Column | Type | Filterable as |
|---|---|---|
| No. | Number | frame.number |
| Time | Time (format from View → Time Display Format) | frame.time_relative |
| Source | Source address | ip.src, eth.src, whichever the top layer is |
| Destination | Destination address | ip.dst, eth.dst |
| Protocol | Protocol | _ws.col.protocol |
| Length | Packet length | frame.len |
| Info | Information | _ws.col.info |
Ctrl+Shift+R resizes every column to its content, which is slow on a large
file. Drag a header to reorder, right-click a header to hide a column without
deleting it, and right-click → Column Preferences to edit the whole set.
Add a Custom Column
The fast way: click the field in the packet detail pane, right-click, then
Apply as Column. The field name goes in as a Custom column and the column
appears immediately.
Manual route, Preferences → Appearance → Columns → +, set Type to Custom and
Fields to a display-filter field. A few field names in one column, separated by
or, render the first one that exists in the frame.
| Column | Field expression | Shows |
|---|---|---|
| Stream | tcp.stream | Conversation index, sortable |
| Ports | tcp.srcport and tcp.dstport | Two Custom columns, or one with tcp.port |
| Delta | frame.time_delta_displayed | Gap to the previous displayed packet |
| Stream delta | tcp.time_delta | Gap within this TCP conversation |
| RTT | tcp.analysis.ack_rtt | Time for the peer to acknowledge |
| Window | tcp.window_size | Scaled receive window |
| Flags | tcp.flags.str | The ··········A··· glyph string |
| Host | http.host or tls.handshake.extensions_server_name | Hostname in cleartext, HTTP or TLS |
| URI | http.request.full_uri | Full request URL |
| Status | http.response.code | HTTP status |
| Latency | http.time or dns.time | Server response time |
| Query | dns.qry.name | Queried name |
| TTL | ip.ttl | Hop-count fingerprint |
| VLAN | vlan.id | 802.1Q tag |
| Interface | frame.interface_name | Which NIC, on a multi-interface capture |
Occurrence matters for fields that repeat. Occurrence 0 prints every
occurrence comma-separated, 1 prints the first, 2 the second, -1 the last.
Setting ip.addr occurrence to 1 gives you the source and 2 the destination.
The same expression works headless, which is how you get a CSV out:
tshark -r cap.pcapng -T fields -E header=y -E separator=, \
-e frame.number -e frame.time_relative -e ip.src -e ip.dst \
-e tcp.stream -e _ws.col.info \
-Y "tcp.flags.reset == 1"Time Display
View → Time Display Format changes the Time column without touching the data.
| Format | Shows | When to use |
|---|---|---|
| Seconds Since First Captured Packet | 12.483920 | The default, good for reading deltas |
| Seconds Since Previous Captured Packet | 0.000114 | Spotting stalls anywhere in the file |
| Seconds Since Previous Displayed Packet | 0.204 | Deltas within your current filter |
| Date and Time of Day | 2026-09-15 10:04:12.483920 | Correlating with application logs |
| Time of Day | 10:04:12.483920 | Same, shorter |
| UTC Date and Time of Day | 2026-09-15 17:04:12 | Merging captures across time zones |
| Seconds Since Epoch | 1789491852.483920 | Feeding another tool |
Precision is a separate submenu, from Automatic down to nanoseconds. pcapng can carry nanosecond timestamps, classic pcap cannot.
Ctrl+T sets a time reference on the selected packet, so relative time
restarts from zero there. That is the cheapest way to measure a transaction
without arithmetic.
Coloring Rules
View → Coloring Rules is an ordered list. The first matching rule wins, so
order is the whole game. Each rule is a display filter plus a foreground and
background color, and the set is stored in the colorfilters file in your
profile.
The shipped set, in order, so you can read a packet's color without looking it up:
| # | Rule | Filter | Look |
|---|---|---|---|
| 1 | Bad TCP | tcp.analysis.flags && !tcp.analysis.window_update && !tcp.analysis.keep_alive && !tcp.analysis.keep_alive_ack | Black on red |
| 2-4 | HSRP / STP / OSPF state change | hsrp.state != 8 …, stp.type == 0x80, ospf.msg != 1 | Black on pale yellow |
| 5 | ICMP errors | icmp.type in {3..5, 11} || icmpv6.type in {1..4} | Black on green |
| 6 | ARP | arp | Pale yellow |
| 7 | ICMP | icmp || icmpv6 | Pale pink |
| 8 | TCP RST | tcp.flags.reset eq 1 | Dark red on yellow |
| 9 | SCTP ABORT | sctp.chunk_type eq ABORT | Dark red on yellow |
| 10-11 | TTL / hop limit low | ip.ttl < 5 and IPv6 equivalent, with routing protocols excluded | Dark red on gray |
| 12 | Checksum Errors | eth.fcs.status=="Bad" || ip.checksum.status=="Bad" || tcp.checksum.status=="Bad" … | Black on red |
| 13 | SMB | smb || nbss || nbns || netbios | Pale blue |
| 14 | HTTP | http || tcp.port == 80 || http2 | Green |
| 15 | DCERPC | dcerpc | Lavender |
| 16 | Routing | hsrp || eigrp || ospf || bgp || cdp || vrrp || carp … | Cream |
| 17 | TCP SYN/FIN | tcp.flags & 0x02 || tcp.flags.fin == 1 | Gray |
| 18-19 | TCP, UDP | tcp, udp | Pale violet, pale blue |
| 20 | Broadcast | eth[0] & 1 | White on gray |
Two things fall out of the order. Anything red is a problem the dissector found, and DNS has no rule of its own, so plain DNS is colored by the UDP rule at 19.
Useful rules to add, near the top so they win:
tcp.analysis.zero_window or tcp.analysis.window_full http.response.code >= 500 tls.record.content_type == 21 dns.flags.rcode != 0 tcp.time_delta > 1 and tcp.len > 0 ip.addr == 10.0.0.5
Other coloring controls:
- View → Colorize Conversation paints one conversation in one of ten temporary
colors, at the Ethernet, IP, TCP, or UDP level. Handy for eyeballing
interleaved streams without filtering them apart.
- View → Colorize Packet List toggles all coloring. Off is measurably faster on
huge files.
- Disable a rule with its checkbox instead of deleting it.
- Export the rule set and share it. It is a plain text file, one rule per line,
formatted @Name@filter@[fg][bg] with 16-bit RGB components.
- frame.coloring_rule.name and frame.coloring_rule.string are real fields, so
you can filter on which rule matched, or add them as a column.
Profiles
A configuration profile bundles columns, coloring rules, filters, preferences,
and decode-as settings. Edit → Configuration Profiles (Ctrl+Shift+A), or click
the profile name in the bottom-right of the status bar.
# Where profiles live ls ~/.config/wireshark/profiles/ # Linux ls ~/.config/wireshark/ # global files: colorfilters, preferences, dfilters ls "~/Library/Application Support/Wireshark/profiles/" # macOS # Run tshark with a named profile tshark -C "TCP tuning" -r cap.pcapng
Keep one profile per job. A "TCP performance" profile with stream, delta, RTT, and window columns plus aggressive Bad-TCP coloring looks nothing like a "DNS" profile with query name, rcode, and response time, and switching beats re-editing columns.
Files inside a profile directory:
| File | Holds |
|---|---|
preferences | Every preference, including per-protocol ones |
colorfilters | Coloring rules, in order |
dfilters | Saved display filter bookmarks |
cfilters | Saved capture filters |
dmacros | Display filter macros |
decode_as_entries | Decode-As overrides |
recent | Column widths, zoom, and recent files |