In Wireshark 4.6, what does disabling a protocol in Analyze > Enabled Protocols change, and when is it the right tool rather than Decode As?
answer
- global switch, not a port mapping
- that layer and everything above
- its heuristics go quiet too
- disabled_protos in the profile
- --disable-protocol for one run
basics
~20 sDisabling a protocol stops Wireshark calling its dissector and its heuristics anywhere, so that layer and the layers it would have decoded disappear. Use it when a dissector misclaims or misbehaves across many ports; use Decode As to retarget one port.
solid answer
~50 s**Enabled Protocols** is a global switch per dissector: a disabled protocol's dissector is never called, so dissection stops where that protocol would have started and nothing it would have handed on is shown. Disabling IP leaves nothing above Ethernet in the tree. Disabling a protocol also takes its **heuristic** entries out of play, while unticking just a heuristic entry leaves the protocol's port registrations working. **Decode As** is the opposite tool: it changes one table entry, such as what TCP port 8443 maps to, and leaves the protocol enabled everywhere else. Reach for Enabled Protocols when a heuristic keeps claiming unrelated traffic, a dissector is buggy or slow on a large file, or you want a layer shown as raw bytes everywhere. Saving writes the choice to the profile's `disabled_protos` file; `--disable-protocol` and `--enable-protocol` apply it to a single tshark run.
go deeper
Recall that Analyze > Enabled Protocols switches a dissector off everywhere, and that layers above a disabled protocol are not shown.
Explain the difference between disabling a protocol and unticking one of its heuristic entries, and when Decode As is the narrower fix. Know where the choice is saved.
Use protocol switches deliberately in an investigation: silence a misbehaving heuristic without losing the protocol, verify a shared profile is not hiding traffic, and record settings with your findings.
Govern shared analysis profiles: decide which protocol and heuristic switches ship to responders, and how changes are reviewed so a convenient default never hides evidence.
## What disabling a protocol does Each protocol in Wireshark has an on/off state, and **Analyze > Enabled Protocols** shows them all with a search field and two filters: enabled or disabled, heuristic or not. When a protocol is off: - Wireshark refuses every call to its dissector, wherever it comes from: a port table, a type table, a conversation or another dissector. - All of its **heuristic** entries are skipped as well. - Dissection does not continue *above* it. The user guide's example: disable IP, and a packet with Ethernet, IP, TCP and HTTP shows its Ethernet information but no IP, TCP or HTTP, because IP would have been the one to call TCP. - The lower layer carries on with its usual fallbacks. A TCP payload whose port dissector is disabled is offered to the next candidates, ending in `Data` if nothing else claims it. - Its fields are absent, so filters on them match nothing. The quickest route to the switch for one protocol is the packet-details context menu: the last entry under *Protocol Preferences* disables that protocol completely. ## Protocols versus heuristic entries Heuristic entries appear as **subtrees** beneath their protocol in the dialog, with short names such as `tls_tcp` or `rtp_udp`. The two switches differ: | Switch | Effect | |---|---| | Untick the protocol | Dissector never called; every heuristic of that protocol skipped | | Untick one heuristic entry | That heuristic leaves the heuristic process; the protocol still decodes wherever a port or other static registration selects it | This matters when one heuristic is producing false positives: unticking just that entry keeps the protocol working on its proper ports. ## Enabled Protocols or Decode As | Situation | Better tool | Why | |---|---|---| | A service on a non-standard port decodes as `Data` or as the wrong protocol | Decode As | Fixes one port without affecting anything else | | A port's registered dissector is wrong for this network | Decode As to the right protocol or to `(none)` | Scoped to that table entry | | A heuristic claims unrelated conversations across many ports | Untick that heuristic entry | Removes the guess everywhere, keeps static registrations | | A dissector crashes, mis-decodes or is very slow on a large capture | Disable the protocol | Global and immediate | | You want one layer shown as raw bytes everywhere | Disable the protocol | Every caller falls back | Disabling is the bigger hammer. If you disable a protocol to silence one port, you also lose it on every port where it was right. ## Persisting it and using the command line 1. Pressing **OK** in the dialog saves and applies. Disabled protocols are written to the `disabled_protos` file of the current configuration profile; protocols that are off by default and that you switched on go to `enabled_protos`, and heuristic choices to `heuristic_protos`. 2. A global `disabled_protos` file is read first and the personal one overrides it, so an administrator can ship a default. 3. For one run without touching the profile, tshark and Wireshark accept `--disable-protocol <name>[,<name>…]` and `--enable-protocol <name>[,<name>…]`. A protocol named in both is enabled, which allows `--disable-protocol ALL --enable-protocol eth,ip` to dissect only those two. `--disable-heuristic` and `--enable-heuristic` take heuristic short names. ## A worked example An in-house telemetry protocol runs over UDP on a handful of ports, and the Protocol column labels some of its conversations as a protocol nobody on the team uses. The packets carry that protocol's fields, and Expert Info shows malformed entries for it. That is the signature of a heuristic false positive: a weak test matched the first bytes and pinned the conversation. The scoped fix is to find that protocol in Enabled Protocols, untick only its UDP heuristic entry, and leave the protocol itself enabled for the ports where it is genuine. If the telemetry protocol has a dissector, a Decode As entry for its ports then gives it a proper decode; if not, the payload now shows honestly as `Data`. ## Pitfalls - **A forgotten switch.** A protocol disabled weeks ago in a shared profile silently hides traffic in every later analysis. Check the dialog's disabled filter before trusting an absence. - **Disabling too low.** Turning off TCP or IP to quieten one application removes everything above it. - **Confusing it with filtering.** A display filter hides packets; disabling a protocol changes what is decoded inside each packet. - **Hiding evidence.** In an investigation, record which protocols were disabled, because another analyst opening the same file with default settings will see a different tree.
- You disabled HTTP to stop a misdecode on one port; what else changed?HTTP is now off everywhere: on port 80 and every other registered port, inside TLS, and through its heuristics. Those payloads fall back to whatever else claims them, often `Data`, and every `http.*` field disappears from filters and columns. Decode As on the one port, or unticking the single offending heuristic entry, would have been scoped to the actual problem.
- How do you check whether a shared profile is hiding a protocol from you?Open Analyze > Enabled Protocols and set the first drop-down to show disabled protocols only; anything listed that you rely on is being skipped. On the command line, enable it for one run with `--enable-protocol`, or inspect the `disabled_protos` file in that profile's configuration folder.
saying these in an interview costs you the question
- Disabling a protocol only hides it from the packet list, like a display filter.
- Disabling IP still lets TCP and HTTP decode, just without the IP layer.
- Unticking a heuristic entry disables the whole protocol.
- Enabled Protocols settings are stored inside the capture file.
- Disabling a protocol is the normal way to fix one service on a non-standard port.