add scapy arpscanner
This commit is contained in:
47
scapy_arp.py
Normal file
47
scapy_arp.py
Normal file
@@ -0,0 +1,47 @@
|
||||
from scapy.all import srp, Ether, ARP
|
||||
from threading import Thread
|
||||
from ipaddress import IPv4Network
|
||||
from pprint import pprint
|
||||
from time import sleep, time
|
||||
|
||||
threads = []
|
||||
|
||||
clients = list()
|
||||
class Scanner(Thread):
|
||||
def __init__(self, ip):
|
||||
super().__init__()
|
||||
self.ip = ip
|
||||
|
||||
def run(self):
|
||||
# The below code from https://www.thepythoncode.com/article/building-network-scanner-using-scapy
|
||||
packet = Ether(dst="ff:ff:ff:ff:ff:ff") / ARP(pdst=self.ip)
|
||||
# this is a tuple, which index 0 is host that answers arp request.
|
||||
# while index 1 is unanswered when no host answers arp request.
|
||||
result = srp(packet, timeout=3, verbose=0)[0]
|
||||
# the result is a tuple with index 0 as sent, and 1 as received.
|
||||
for _, received in result:
|
||||
# psrc is the arp responder's ip address
|
||||
# hwsrc is the arp responder's mac address
|
||||
clients.append(
|
||||
{
|
||||
"ip": received.psrc,
|
||||
"mac": received.hwsrc
|
||||
}
|
||||
)
|
||||
# maintain consistency by forcing this method to sleep for 1 second
|
||||
# before beginning the next host.
|
||||
sleep(1)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
start = time()
|
||||
for ip in IPv4Network('192.168.178.0/24').hosts():
|
||||
t = Scanner(str(ip))
|
||||
threads.append(t)
|
||||
t.start()
|
||||
|
||||
for t in threads:
|
||||
t.join()
|
||||
|
||||
pprint(clients)
|
||||
print(f"Executed in {time() - start} seconds.")
|
||||
Reference in New Issue
Block a user