from argparse import ArgumentParser from time import sleep import scapy.all as scapy deviceList = {} def getArguments(): myParser = ArgumentParser() myParser.add_argument("-r") myParser.add_argument("-l") return myParser.parse_args() def ipControl(ip): c = ip.count("/") d = ip.count(".") if (d == 3): ip = ip.replace("/", ".").split(".") for i in ip[:4]: if (not i.isnumeric()) or (int(i) not in range(0, 255)): return False if (c == 0): return True elif (c == 1): return (ip[-1] in ("8", "16", "24", "32")) else: return False else: return False def scan(ipRange): arpPacket = scapy.ARP(psrc="", pdst=ipRange) broadcastPacket = scapy.Ether(dst="ff:ff:ff:ff:ff:ff") arpBroadcastPacket = broadcastPacket/arpPacket answeredList = scapy.srp(arpBroadcastPacket, retry=1, timeout=1, verbose=False)[0] for info in answeredList: info = info[1] if (info.psrc not in deviceList): deviceList[info.psrc] = info.hwsrc def display(): print(" IP MAC") print("--------------------------------------") for (ip, mac) in deviceList.items(): print(ip.ljust(20), mac) arguments = getArguments() ip_range = arguments.r loop_value = arguments.l if (ip_range) and (ipControl(ip_range)): if (loop_value != None) and (int(loop_value) > 0): for i in range(0, int(loop_value)): scan(ip_range) sleep(1) else: scan(ip_range) display() else: print("[!]-> IP range error! <-[!]")