TL;DR — Wireshark in 30 seconds

Wireshark captures and analyzes network traffic packet-by-packet. To use it on Kali:

sudo apt install wireshark # Pre-installed on Kali sudo usermod -aG wireshark $USER # Capture without sudo wireshark # Launch the GUI

Then pick your interface, hit the blue shark fin to capture, and use display filters (in the green bar at the top) to focus on what matters. The 5 filters you'll use 90% of the time: http, dns, ip.addr == 192.168.1.10, tcp.port == 443, and frame contains "password".

What is Wireshark?

Wireshark is the most widely-used network protocol analyzer in the world. It captures every packet flowing through a network interface and lets you dissect each one down to the bit level — source, destination, protocol, payload, timing. If your laptop is having weird WiFi issues, if you're investigating a security incident, if you want to know what your "smart" toaster is actually sending to the internet — Wireshark is the answer.

The current version as of 2026 is Wireshark 4.6.5. It's free, open source, and runs natively on Linux, macOS, and Windows. On Kali Linux it's pre-installed and ready to use — one of the top 10 Kali Linux tools every user should know.

ℹ️ Why every Kali user should know Wireshark: A surprising amount of pentesting is just reading packets. Did the SQL injection work? Wireshark will tell you. Did your phishing payload connect back? Wireshark. Is the corporate VPN actually encrypting traffic? Wireshark. It's the universal "what's actually happening on the network" tool, and it pairs with almost every other tool in your kit.
⚠️ Legal warning: Capturing traffic on networks you don't own or aren't authorized to monitor is illegal under the Computer Fraud and Abuse Act (CFAA) in the US, the Wiretap Act, the UK Computer Misuse Act, and similar laws worldwide. Wireshark on your own network is fine. Wireshark on the coffee shop WiFi is not. For practice, use a home lab or platforms like TryHackMe and HackTheBox.

How Wireshark Actually Works

At a high level, Wireshark does three things:

  1. Captures raw packets from your network interface using libpcap (the same library tcpdump uses)
  2. Dissects each packet using thousands of built-in protocol parsers — it understands over 3,000 protocols out of the box
  3. Displays the dissected data in a structured, searchable, filterable interface

The dissection is the magic. A raw Ethernet frame is just bytes. Wireshark sees those bytes and says: "this is an Ethernet header, inside it is an IPv4 packet, inside that is a TCP segment, inside that is an HTTP POST request to /login with username=admin&password=hunter2." Suddenly bytes become information.

Installing & Setting Up Wireshark

Wireshark ships pre-installed on Kali Linux. If you need to install or update it:

Terminal — Install Wireshark
# Update package list and install (Kali/Debian/Ubuntu) $ sudo apt update && sudo apt install wireshark # Verify version (should be 4.4+ in 2026) $ wireshark --version Wireshark 4.6.5 (Git commit a1b2c3...) # Launch the GUI $ wireshark

If apt update errors out with a signing-key or repository problem here, see how to fix broken Kali updates before continuing.

Capturing without sudo (recommended)

By default, Wireshark requires root privileges to capture packets. Running the GUI as root is a security risk — Wireshark is a complex application with a long history of vulnerabilities in protocol dissectors. The proper fix is to add your user to the wireshark group:

Terminal — Configure non-root capture
# Add your user to the wireshark group $ sudo usermod -aG wireshark $USER # Reconfigure dumpcap to allow non-root capture $ sudo dpkg-reconfigure wireshark-common # Select "Yes" when prompted # Log out and back in (or reboot) for group membership to apply # Verify it worked: $ groups | grep wireshark wireshark # Now launch without sudo $ wireshark
💡 Why this matters: Running Wireshark as root means a malicious packet (e.g., a crafted protocol payload designed to exploit a Wireshark vulnerability) could give an attacker root on your system. Capturing as a normal user limits the damage to your user account. There's never a good reason to run Wireshark GUI as root in 2026.

Platform-specific notes

The Wireshark UI Tour

When you first open Wireshark, you see the Welcome screen — a list of available network interfaces with little sparkline graphs showing traffic activity. Pick the interface with traffic (usually eth0 for wired, wlan0 for WiFi) and double-click to start capturing.

Once capturing, the main window has three panes:

  1. Packet list (top) — every captured packet, one per row. Shows number, time, source, destination, protocol, length, and a short summary. Click any packet to inspect it.
  2. Packet details (middle) — the selected packet expanded into its protocol layers (Ethernet → IP → TCP → HTTP, for example). Click the triangles to drill into each layer.
  3. Packet bytes (bottom) — the raw hex bytes of the packet. Clicking a field in the details pane highlights the corresponding bytes here.

Key interface elements

Capture Filters vs. Display Filters

This is the #1 thing beginners get confused by, and Wireshark has two different filter syntaxes. Understanding the difference is critical.

Capture FiltersDisplay Filters
When appliedBefore packets are storedAfter capture, on stored packets
SyntaxBPF (Berkeley Packet Filter — same as tcpdump)Wireshark's own filter language
Can change live?No (stops capture)Yes (real-time)
Exampleport 80 or port 443http or tls
PurposeReduce capture size on high-traffic networksDrill down into captured data
Where to enterCapture → Options → "Capture Filter" fieldGreen bar at top of main window

For most pentesting work, you'll use display filters almost exclusively. Capture filters only matter when you're capturing on a busy network and risk losing packets or filling your disk. Start with no capture filter, then use display filters to focus.

The Essential Display Filters

Wireshark has over 328,000 filter fields across 3,000 protocols. You'll use about 20 of them. Memorize these:

By protocol

Wireshark display filters — Protocols
# Only HTTP traffic http # Only DNS queries and responses dns # Only TLS/SSL (HTTPS) tls # Only ICMP (ping) icmp # Only ARP requests/replies arp # Only SMB (Windows file sharing) smb or smb2 # Only FTP ftp # Only SSH ssh

By IP address

Wireshark display filters — IP addresses
# Traffic to OR from a specific IP ip.addr == 192.168.1.10 # Traffic FROM a specific IP ip.src == 192.168.1.10 # Traffic TO a specific IP ip.dst == 8.8.8.8 # Traffic in a specific subnet ip.addr == 192.168.1.0/24 # Traffic NOT involving an IP (exclude your own machine) not ip.addr == 192.168.1.10

By port

Wireshark display filters — Ports
# Specific TCP port tcp.port == 443 # Specific UDP port udp.port == 53 # Range of ports tcp.port >= 8000 and tcp.port <= 9000 # Either of two ports (common pentest pattern: HTTP and HTTPS) tcp.port == 80 or tcp.port == 443

The pentester's favorites

Wireshark display filters — Hacking workflows
# HTTP POST requests (often contain login data) http.request.method == "POST" # Find packets containing a specific string anywhere frame contains "password" frame contains "admin" frame contains "session" # HTTP responses with error codes (4xx, 5xx) http.response.code >= 400 # HTTP responses with redirects http.response.code >= 300 and http.response.code < 400 # TCP RST packets (connection rejected) tcp.flags.reset == 1 # TCP SYN with no ACK (port scans!) tcp.flags.syn == 1 and tcp.flags.ack == 0 # Find specific user agents (browser fingerprinting) http.user_agent contains "Mozilla" http.user_agent contains "curl" http.user_agent contains "sqlmap" # SQLi attempts!

Combining filters

Use and, or, and not (or their symbols &&, ||, !) to combine filters:

Wireshark display filters — Combinations
# HTTP traffic to a specific IP http and ip.addr == 192.168.1.10 # DNS queries from a specific machine dns and ip.src == 192.168.1.50 # Exclude broadcast/multicast noise not arp and not (ip.dst == 224.0.0.0/4) and not eth.dst == ff:ff:ff:ff:ff:ff # All TLS handshakes (Client Hellos) tls.handshake.type == 1 # HTTP POSTs that look like login attempts http.request.method == "POST" and (http.request.uri contains "login" or http.request.uri contains "auth")
💡 Pro tip — Right-click to build filters: Instead of memorizing syntax, right-click any field in the packet details pane and choose Apply as Filter → Selected. Wireshark generates the exact filter syntax for you. This is how most pros actually work — recognize what you want, right-click, refine.

Real-World Examples

Now put this to use. Each example below is a workflow you'll hit in pentesting or troubleshooting.

Example 1: Sniff plaintext credentials

This is the classic Wireshark exercise — and a great way to convince yourself why HTTPS matters.

  1. Start a Wireshark capture on your local interface
  2. Visit a test login form over HTTP (use http://testphp.vulnweb.com/login.php for legal practice — it's a deliberately vulnerable site)
  3. Submit any username and password
  4. Stop the capture and apply this filter: http.request.method == "POST"
  5. Click the POST request, expand the HTML Form URL Encoded section in the packet details

You'll see your username and password sitting there in plaintext. That's exactly what an attacker on the same network would see if you logged into an HTTP site from a coffee shop. Never log into anything over HTTP.

Example 2: Analyze a captured WPA2 handshake

If you've followed my WPA2 cracking tutorial, you've captured a 4-way handshake with airodump-ng. Before you crack it, open the .cap file in Wireshark to verify it's clean:

Terminal — Open capture in Wireshark
$ wireshark capture-01.cap

Apply the filter eapol to show only the 4-way handshake packets. You need to see all four EAPOL packets (Message 1 of 4 through Message 4 of 4) for a complete handshake. If you only see 2 or 3, the handshake is incomplete and won't crack — capture again and force another handshake with aireplay-ng.

Example 3: Investigate a slow website

Your client says "the website is slow." Open Wireshark, browse to the slow site, capture for 30 seconds, then:

  1. Apply filter http to see HTTP requests
  2. Right-click the first HTTP request → Follow → HTTP Stream to see the complete request/response
  3. Check the time delta column — large gaps between request and response point to server-side slowness
  4. Apply dns to check if DNS lookups are slow
  5. Use Statistics → Conversations → TCP to see which connections took longest

Example 4: Detect a port scan

If someone is nmap-scanning your machine, Wireshark sees it immediately. Apply this filter:

Wireshark — Detect port scans
# SYN packets without ACK — typical of -sS stealth scan tcp.flags.syn == 1 and tcp.flags.ack == 0 # Hundreds of these from one IP = port scan

If you see one source IP sending SYN packets to dozens of different destination ports in quick succession, that's a port scan. Right-click the source IP → Apply as Filter → Selected to see everything that attacker is doing.

Example 5: Find DNS exfiltration

Some malware exfiltrates data over DNS to bypass firewalls. Suspicious DNS patterns include very long subdomain names (often base64-encoded data) and unusually high DNS volume to one domain.

Wireshark — DNS analysis
# Show all DNS queries dns # DNS queries with suspiciously long names (often exfiltration) dns.qry.name.len > 40 # Use Statistics → DNS to see query distribution # Spike in queries to one domain = exfil candidate

Following Streams

"Follow Stream" is one of Wireshark's most useful features. Instead of looking at packets one at a time, it reconstructs an entire conversation into a single readable view.

Right-click any packet and select Follow → TCP Stream (or HTTP Stream, or UDP Stream). You'll see the complete back-and-forth conversation — for HTTP, that means the full request and response with headers, cookies, form data, and HTML body all in one window.

The dialog also shows packet directions in different colors (client→server vs server→client), making it easy to spot what each side said.

The Statistics Menu (Underrated)

Most beginners ignore the Statistics menu, which is a mistake. It contains some of Wireshark's most powerful analysis tools:

💡 Workflow tip: When you open a capture you didn't make yourself (e.g., from an incident response), the first thing to do is run Statistics → Protocol Hierarchy. It gives you an at-a-glance view of what's in the capture before you start digging into individual packets.

Tshark — Wireshark in the Terminal

Wireshark ships with tshark, a command-line version with all the same dissection power. It's essential for headless servers, scripting, and processing huge captures.

Terminal — Tshark basics
# Capture on eth0 with no filter (Ctrl+C to stop) $ sudo tshark -i eth0 # Capture only HTTP, write to file $ sudo tshark -i eth0 -f "tcp port 80" -w http-capture.pcap # Read an existing capture file $ tshark -r capture.pcap # Apply display filter to a capture file $ tshark -r capture.pcap -Y "http.request.method == POST" # Extract specific fields (e.g., all visited hostnames) $ tshark -r capture.pcap -Y "http.request" -T fields -e http.host www.google.com api.github.com www.cloudflare.com # Dump all DNS queries seen $ tshark -r capture.pcap -Y dns -T fields -e dns.qry.name # Live capture, pipe through grep for real-time monitoring $ sudo tshark -i eth0 -Y http -T fields -e ip.src -e http.request.uri | grep login

Tshark is also the easiest way to process huge captures — opening a 2GB pcap in Wireshark GUI takes forever, but tshark with a tight display filter can grep through it in seconds.

Capturing in Monitor Mode (WiFi)

By default, your WiFi card only captures traffic destined for your own machine. To capture all wireless traffic in range — including handshakes from other devices — you need monitor mode. This requires a compatible USB WiFi adapter (built-in laptop cards almost never work).

Terminal — Enable monitor mode
# Kill processes that interfere with monitor mode $ sudo airmon-ng check kill # Put your adapter in monitor mode $ sudo airmon-ng start wlan0 Found 1 process(es) that could cause trouble. PHY Interface Driver Chipset phy0 wlan0 rtw88 Realtek RTL8812AU (monitor mode enabled on wlan0mon) # Now launch Wireshark and capture on wlan0mon $ wireshark # Select wlan0mon as the capture interface

In monitor mode, you'll see 802.11 frames including beacons, probe requests, and association/authentication frames from every nearby device. Useful filters:

Wireshark — 802.11 filters
# Show only beacon frames (APs advertising themselves) wlan.fc.type_subtype == 0x08 # Show only probe requests (clients looking for known networks) wlan.fc.type_subtype == 0x04 # Show deauth packets (deauth attacks!) wlan.fc.type_subtype == 0x0c # Show 4-way EAPOL handshakes eapol # Filter to a specific BSSID wlan.bssid == aa:bb:cc:dd:ee:ff

For the full WiFi pentesting workflow, see my WPA2 cracking tutorial — Wireshark is used there to verify captured handshakes before cracking.

Decrypting HTTPS Traffic

By default, you can't read HTTPS traffic in Wireshark — it's encrypted, that's the whole point. But there are two scenarios where decryption is possible:

Method 1: SSLKEYLOGFILE (modern, recommended)

Browsers like Chrome and Firefox can be configured to log TLS session keys to a file. Wireshark can then use those keys to decrypt the captured HTTPS.

Terminal — Set up TLS decryption
# Set the environment variable before launching the browser $ export SSLKEYLOGFILE=~/sslkeys.log $ firefox & # Or for Chrome: $ google-chrome --ssl-key-log-file=~/sslkeys.log & # In Wireshark: Edit → Preferences → Protocols → TLS # Set "(Pre)-Master-Secret log filename" to ~/sslkeys.log # Now capture and HTTPS traffic from that browser will be decrypted

Method 2: Server private key (legacy)

If you have the server's RSA private key, you can decrypt HTTPS traffic — but only for non-Perfect-Forward-Secrecy cipher suites. Modern TLS 1.3 uses ephemeral keys so this method rarely works anymore.

🚨 Important: Decrypting HTTPS only works for traffic where YOU have the keys — your own browser sessions, or a server you control. You cannot magically decrypt other people's HTTPS traffic. If you could, the internet would be broken. Anyone claiming otherwise is selling snake oil.

Saving & Sharing Captures

Wireshark saves captures in .pcap or .pcapng format. Both are widely compatible — tcpdump reads .pcap, modern Wireshark prefers .pcapng (supports comments, more metadata).

Wireshark — File operations
# Save the whole capture # File → Save As → choose .pcapng or .pcap # Save only filtered packets # Apply display filter, then: # File → Export Specified Packets → check "Displayed" → Save # Convert formats with tshark $ tshark -r input.pcapng -w output.pcap -F pcap
⚠️ Before sharing: A capture file contains everything that went over the wire — including any plaintext passwords, cookies, session tokens, internal IP addresses, and personal data. Treat capture files like you'd treat database dumps. Don't email them, don't put them in public buckets, don't post them on forums. If you need to share for analysis, anonymize first (Wireshark has built-in tools under Edit → Preferences → Name Resolution for IP anonymization).

Performance Tips for Large Captures

Wireshark struggles with multi-gigabyte captures because it loads everything into RAM. Strategies for handling big captures:

Defender vs. Attacker Perspectives

Wireshark is dual-use — same tool, different goals.

From the attacker's side

From the defender's side

Common Issues & Troubleshooting

"No interfaces found" or empty interface list

You either don't have permission to capture or your capture driver isn't installed. On Linux, run sudo dpkg-reconfigure wireshark-common and select Yes to allow non-root capture, then re-add yourself to the wireshark group. On Windows, install or reinstall Npcap. On macOS, grant Network Monitoring permission in System Settings.

"Can't see traffic from other devices on my network"

Modern switched networks isolate traffic — your switch only sends each port the traffic destined for that port. To see other devices' traffic you need either:

"Wireshark says I can capture but no packets appear"

You're probably on the wrong interface. Look at the little sparklines next to interface names on the welcome screen — the one with traffic is the right one. If your laptop has multiple interfaces (eth0, wlan0, docker0, lo), make sure you're on the one actually connected to the internet.

"Wireshark crashes on large captures"

Wireshark loads the whole capture into RAM. For files over 1GB, use tshark with a display filter to extract the subset you need, or split the file with editcap -c 100000 big.pcap split_ (splits into chunks of 100,000 packets each).

"Display filter is red / won't apply"

Syntax error. Common causes: using = instead of ==, using single quotes instead of double quotes, mistyped field names. Wireshark turns the filter bar red when the syntax is invalid and green when it's valid. Start typing and watch for the color change.

Frequently Asked Questions

Can Wireshark see HTTPS traffic?

By default, no — HTTPS is encrypted. You can see the TLS handshake (Client Hello, Server Hello, certificates) and the IP addresses of who's talking, but the payload is encrypted. Decryption is only possible if you control one end of the connection and can extract the TLS session keys (via SSLKEYLOGFILE for your own browser, for example).

Is Wireshark legal?

Wireshark itself is 100% legal — it's just a packet analyzer with legitimate uses in IT, networking, security research, and education. What's illegal is unauthorized monitoring of networks you don't own or have permission to test. Capturing on your home network: fine. Capturing on a coffee shop WiFi: illegal under wiretap laws in most countries. When in doubt, get written permission first.

How is Wireshark different from tcpdump?

Both use the same underlying capture library (libpcap), but tcpdump is command-line only and shows you packets one at a time in a terse format. Wireshark has a full GUI with protocol dissectors that show packets structured by protocol layers, plus advanced analysis features (Follow Stream, Statistics, IO Graphs). Use tcpdump for quick captures and remote/headless work; use Wireshark for analysis. They share file format (.pcap) so you can capture with tcpdump and analyze in Wireshark.

What's the difference between Wireshark and Burp Suite?

Both inspect network traffic, but at different layers. Wireshark is a passive packet analyzer that sees everything on the wire at the network/transport layer (TCP, UDP, ICMP, etc.). Burp Suite is an HTTP/HTTPS interception proxy designed specifically for web app testing — it actively sits between your browser and the target, lets you modify requests before they're sent, and includes web-specific features (Repeater, Intruder, Scanner). For network/protocol analysis: Wireshark. For web app testing: Burp Suite. They complement each other.

Do I need a special network card to use Wireshark?

For wired Ethernet, any standard NIC works. For wireless monitor mode (capturing 802.11 frames including from other devices), you need a USB WiFi adapter with a compatible chipset — built-in laptop WiFi cards almost never work. See my WiFi adapter guide for the best options.

Can I run Wireshark in a virtual machine?

Yes, with caveats. Wired Ethernet works fine on the VM's virtual interface. For WiFi monitor mode, you'll need USB passthrough of a compatible USB WiFi adapter to the VM (which can be flaky in VirtualBox, more reliable in VMware). For most pentesting use, you'll get a much smoother experience running Kali on bare metal or installing Wireshark natively on the host OS.

What should I learn next after Wireshark?

Three good directions: (1) Learn tcpdump — it's on every server and you'll use it constantly for headless captures. (2) Learn tshark for scripting and processing big captures. (3) Pair Wireshark with active tools — capture while running Nmap scans to see exactly what nmap is sending, or capture while running aircrack-ng workflows to understand the 802.11 frames.

How long does it take to get good at Wireshark?

You can be productive in a few hours — learn the three panes, learn 10 display filters, and you can solve real problems. Getting fluent takes months of regular use because the value is in recognition — knowing what's normal so anomalies jump out at you. Practice on your own network traffic, and capture during every tool you use. After 6 months of regular use, weird traffic patterns become as obvious as misspelled words in your native language.