Layer 2

Detect ARP spoofing in a PCAP

Updated ยท Worked on public sample captures, each linked to its report

Users on one VLAN report broken sessions, an IDS logs a duplicate address for the gateway, or an audit asks you to prove that nobody sits between a segment and its router. A capture from that segment answers the question if you know which evidence to trust. To detect ARP spoofing in a PCAP, look past the duplicate-address warning: arpspoof repeats its forged reply every two seconds and trips it, but a poisoning that forges two frames and goes quiet trips nothing, and only the victim's changed next hop gives it away.

ARP view of a PCAP with ARP spoofing: two MAC addresses answer for the gateway 192.168.1.1
ARP view of arpspoof.pcap: the spoofer 08:00:27:2D:F8:5A carries the router icon, next to the real gateway 08:00:27:5E:01:7C and the victim 08:00:27:B8:B7:58.

Capture where the poisoning happens

ARP lives inside one broadcast domain, so a capture from a router uplink or another VLAN shows nothing useful. Take it on the segment in question: a mirror of the access switch port that serves a suspected victim, the victim host itself, or a mirror of the VLAN when you do not know which host is targeted. Start the capture before the problem you are chasing, because the strongest evidence is a change, and a change needs a before. The arpspoof sample has eight minutes of ordinary browsing before the first forged reply. The arppoison sample has under five seconds, and that is still enough: the victim sends 28 frames to the real gateway first.

Write down the gateway's real MAC address before you open any view. Take it from the router's own interface, the switch's MAC table or the DHCP server, not from a host that might already be poisoned.

When the attack comes and goes, leave a ring buffer running on the mirror port, for example dumpcap -i eth1 -b filesize:100000 -b files:24 -w segment.pcapng, and upload the file that covers the complaint. Resist a capture filter of arp alone. It keeps the files small, but it would have cut the one-shot sample in the table below down to its four ARP frames and dropped the data frames that prove the redirect.

Two poisonings, one false alarm

CaptureForged ARPRhythmDuplicate-address hitsClearest evidence
arpspoof against one victim26 replies, then 5 restoresevery 2.00 s for 50 s26two MACs reply as 192.168.1.1
one-shot poisoning1 request and 1 replyonce, at 4.6 s0the victim's next hop changes from a Cisco to an HP card
Windows lab hostnoneroutine requests0the router asks as two addresses, each with one MAC

The first row is what most detection rules expect: a tool repeating its lie on a timer. Wireshark's expert info flags all 26 forged replies, and a rate threshold on unsolicited replies would fire within seconds. The second row defeats both. The attacker sends a request that carries the gateway's address as its sender, which poisons the victim's cache as surely as a reply, adds one reply, and goes quiet. The real Cisco gateway never sends ARP during the capture, so Wireshark has no second binding to compare and reports nothing. The proof sits in the data frames: until 0.42 seconds the victim's traffic to the internet goes to 00:26:0b:31:07:33, and from 6.55 seconds it goes to 00:25:b3:bf:91:ee.

Reading the ARP and Ethernet views

The ARP view draws every MAC address in the capture as a node, with switches that show or hide requests, replies and gratuitous ARP and a count beside each. Two icons mark nodes worth a look: a flag for a MAC that uses more than one IP address as a sender, and the router icon for a MAC whose frames carry more than one sender MAC inside. In arppoison.pcapng the HP card gets the flag. In arpspoof.pcap the spoofer gets the router icon, because its restore replies carry the real gateway's MAC. Point at a node and its tooltip lists the addresses it used, split into requests, replies and gratuitous announcements. Work through the nodes in this order:

  1. Find every MAC whose tooltip names the gateway's IP address. More than one, as in arpspoof, is a conflict on its face.
  2. If only one MAC names it, compare that MAC with the one you wrote down. In the arppoison sample the gateway address 172.16.0.1 appears only under 00:25:B3:BF:91:EE.
  3. Open the Ethernet devices view, which names each card's vendor. There the Hewlett Packard card that claims the gateway sits next to the Cisco card that carried the victim's traffic before 4.6 seconds.
Ethernet devices view of an ARP spoofing PCAP: the Dell victim sends frames to a Cisco gateway and to a Hewlett Packard card
Ethernet devices view of arppoison.pcapng: the Dell victim sends frames both to the Cisco gateway and to the Hewlett Packard card that claims the gateway's address.

The vendor test fails in virtual labs. All three machines in arpspoof.pcap carry the VirtualBox prefix 08:00:27, which the devices view reports as PCS Systemtechnik, so only the address you recorded tells the spoofer from the router there.

One MAC with two addresses is not always an attack

In the Cobalt Strike sample the router de:89:b0:97:1b:6c sends ARP requests as 10.127.0.1 and as 154.61.71.13, and the ARP view gives it the same flag as the HP card in arppoison. Here the flag is a false alarm: each address has exactly one MAC, and all 898 of the host's frames to the internet go to that router. Routers with secondary addresses, firewalls doing NAT and hosts with several IPs on one card all look like this.

ARP view flag on a router that uses two IP addresses in a PCAP: a false alarm for ARP spoofing
ARP view of the Cobalt Strike sample: the router DE:89:B0:97:1B:6C is flagged for using two addresses, although no other card claims either of them.

Other events change ARP legitimately:

  • a VRRP or HSRP failover, where the new active router announces the shared virtual MAC (00:00:5e:00:01:xx for VRRP);
  • address conflict detection from RFC 5227, whose probes carry 0.0.0.0 as the sender address;
  • proxy ARP, where a router answers for addresses behind it with its own MAC.

Each of these comes from the router's own card or a documented virtual MAC. None of them sends a workstation's traffic through another workstation.

Confirming the finding in Wireshark

Three filters cover both styles of attack. The first is the expert check, the second lists every reply that claims the gateway with its sender, and the third prints the next hop the victim's own traffic used:

arp.duplicate-address-detected
arp.opcode == 2 && arp.src.proto_ipv4 == 192.168.1.1
tshark -r arppoison.pcapng -Y "ip.src == 172.16.0.107 && !(ip.dst == 172.16.0.0/24)" \
  -T fields -e frame.time_relative -e eth.dst

On arpspoof.pcap the second filter returns 36 replies: 26 forged ones sent from 08:00:27:2d:f8:5a, five restores that the same machine sends with the real gateway's MAC inside, and five genuine replies from 08:00:27:5e:01:7c. The restores matter for the timeline. A clean tool hands the victim its cache back when it stops, so the window of exposure ends at the last restore, 538.7 seconds into the capture, and the cache holds no trace afterwards.

After the spoofer is confirmed

MITRE ATT&CK lists this as T1557.002, ARP Cache Poisoning. Find the switch port behind the spoofing MAC in the MAC address table and take it offline, then scope the window from the first forged frame to the last restore. Anything the victim sent in cleartext in that window, logins included, should be treated as read; the cleartext password audit shows how to list it. TLS sessions in the same window exposed server names and certificates only. Dynamic ARP Inspection with DHCP snooping on the access VLAN drops forged replies at the port, and the ARP poisoning report covers those defenses in detail.

What analysts ask about ARP spoofing

Why does Wireshark's duplicate address warning miss some ARP poisoning?
It needs two MAC addresses advertising the same IP inside the capture. When the real gateway sends no ARP while the capture runs, there is nothing to compare, and only the changed next hop in data frames shows the attack.
Can ARP spoofing be seen in a capture from another subnet?
No. ARP never leaves its broadcast domain, so capture on the affected VLAN: a mirror of its access switch, or the suspected victim itself.
Does ARP spoofing work against IPv6 hosts?
IPv6 has no ARP. Neighbor Discovery does the same job over ICMPv6 and can be forged the same way, so look for neighbor advertisements that claim the router's address from a second MAC.
Why does the spoofer keep repeating its replies?
Hosts refresh their ARP caches, and one genuine reply from the gateway would undo the poisoning. Repeating the forged reply, every two seconds in the arpspoof sample, keeps the victim pointed at the wrong MAC.

More use cases

Further reading