import time,threading,socket,os,re,sys from scapy.all import srp, Ether, ARP threads = [] # 获取该IP计算机名、MAC地址 def GetHost(IPAddress): try: ans,unans = srp(Ether(dst="FF:FF:FF:FF:FF:FF")/ARP(pdst=IPAddress), timeout=2,verbose=False) except Exception as e: print("IP:%s MAC地址获取失败!!!"%IPAddress) else: for send, rcv in ans: IPAddress = rcv.sprintf("%ARP.psrc%") MACAddress = rcv.sprintf("%Ether.src%") # 根据IP查询主机名 try: (hostname,aliaslist,addresslist) = socket.gethostbyaddr(IPAddress) print("主机名:%s IP地址:%s MAC地址:%s"%(hostname, IPAddress, MACAddress)) except Exception as e: print("主机名:%s IP地址:%s MAC地址:%s"%("获取失败", IPAddress, MACAddress)) return # 生成该段IP地址 def IPScan(IPPrefix): for i in range(1,254): IPAddress = '%s.%s'%(IPPrefix,i) th = threading.Thread(target=GetHost,args=(IPAddress,)) threads.append(th) if __name__ == "__main__": print("开始时间:%s"%time.ctime()) IPPrefix = input("请输入IP前三段(***.***.***):") IPScan(IPPrefix) for t in threads: t.start() # 主线程中等待所有子线程退出 for t in threads: t.join() print("结束时间:%s"%time.ctime()) os.system('pause') #按任意键继续