How to detect ARP spoofing from a packet capture

ARP maps IP addresses to hardware addresses on a local network, and it trusts whatever it hears. A machine that answers "the gateway is at my MAC address" can put itself in the middle of its neighbours' traffic. The lie has to be repeated to stick, and that repetition is visible in a capture.

By Stuart Mathieson7 minute readWireshark + tsharkUpdated 12 October 2026
The quick way

PCAPNG Analyzer Pro flags this on upload: addresses announced by more than one MAC (with the MACs), floods of requests from one device, and unsolicited announcements, each with the usual harmless causes. A spoofing finding can raise a local alert automatically.

See a sample incident report →
In this guide
  1. How ARP spoofing works
  2. Capture in the right place
  3. Find addresses with two MACs
  4. Read the reply pattern
  5. Rule out legitimate causes
  6. Spot ARP floods and scans
  7. Manual vs automated workflow

1. How ARP spoofing works

To send a packet to the gateway, a host asks "who has 192.168.1.1?" and caches the MAC address in the reply. Hosts also accept replies they never asked for. An attacker sends forged replies to each victim, saying the gateway's address belongs to the attacker's MAC, and the victims start sending their traffic to the attacker. It forwards the traffic on, reading or altering it as it passes.

Cache entries expire after a short while, so the attacker re-sends the forged replies every few seconds. A capture therefore shows one IP address answered for by two hardware addresses, again and again.

2. Capture in the right place

ARP never leaves the local network segment, and forged replies are usually sent directly to each victim rather than broadcast. A capture on one ordinary host sees only the replies aimed at that host. For a full picture, capture on a victim's own machine, or from a switch port mirroring (SPAN) the access switch that serves the segment. A capture taken beyond the router won't contain this segment's ARP at all.

3. Find addresses claimed by more than one MAC

Wireshark already checks for this and marks the packets with an expert warning. Filter for them:

arp.duplicate-address-detected

To list every IP address that more than one MAC claimed, across replies and announcements:

tshark -r capture.pcapng -Y "arp.opcode == 2 || arp.isgratuitous" \
  -T fields -e arp.src.proto_ipv4 -e arp.src.hw_mac \
  | sort -u | awk '{ print $1 }' | uniq -d

On a test capture with a spoofed gateway, both methods pointed at the same address: Wireshark flagged every one of the 30 forged replies, and the list contained only 192.168.1.1.

4. Read the reply pattern

Count replies per sender to see who is answering for which address:

tshark -r capture.pcapng -Y "arp.opcode == 2" \
  -T fields -e arp.src.hw_mac -e arp.src.proto_ipv4 | sort | uniq -c | sort -rn
     30 de:ad:be:ef:00:66	192.168.1.1
      6 00:11:22:33:44:01	192.168.1.1

The real gateway answered six genuine requests. The other MAC sent 30 replies that nobody asked for, five to each of six hosts, every two seconds. Signs of spoofing:

Confirm the gateway's real MAC from a trusted source, such as the router's own interface or your network documentation. Then find the other MAC in the switch's MAC address table: that tells you which port, and so which device.

5. Rule out legitimate causes

6. Spot ARP floods and scans

A host sending hundreds of requests is usually scanning its subnet for live hosts, as discovery tools do; switch-flooding attacks look similar. Count requests per sender:

tshark -r capture.pcapng -Y "arp.opcode == 1" -T fields -e eth.src | sort | uniq -c | sort -rn | head

Wireshark also raises arp.packet-storm-detected when requests arrive faster than its threshold. Then check whether the sender runs an approved inventory or monitoring tool.

Prevent it at the switch.

Dynamic ARP Inspection with DHCP snooping drops forged replies before they reach anyone, and port security limits what a single port can claim. Encryption limits the damage: a machine in the middle of a TLS connection sees only ciphertext.

Manual method vs PCAPNG Analyzer

Manual method

  1. Capture on the affected segment.
  2. Filter Wireshark's duplicate-address warnings.
  3. List addresses claimed by more than one MAC.
  4. Count replies per sender and check vendors.
  5. Trace the MAC to a switch port and rule out failover.

With PCAPNG Analyzer

  1. Upload the capture, or ingest it from a watched folder.
  2. Review the ARP findings and the MAC addresses they name.
  3. Filter the packet list to ARP, with the spoofed address as the source IP, to see every reply that claimed it.
What the ARP findings measure

The spoofing finding (high) lists every IP address that ARP traffic announced from two or more MAC addresses; address probes from devices joining the network are ignored. The flood finding counts requests per sender: 500 or more is medium, and 2,000 or more high. The announcement finding reports gratuitous ARP, which is normal when devices start up or fail over, so it is informational unless one source repeats it or several do. None of these can see ARP from segments the capture didn’t cover.

Catch the machine in the middle

Flag spoofed addresses and ARP floods in every capture, on a server you control.

Compare Free and ProSelf-host it