Python一键扫描局域网在线IP和对应Mac地址
使用多线程扫描局域网在线IP和对应Mac地址,新鲜出炉的代码,可以搭配其他局域网工具来使用。二楼有个更简洁的2.0版本
import os
import re
import threading
ips = []
def local_ip_mac():#本机IP和MAC
output = os.popen('ipconfig /all')
for i in output:
if '物理地址.' in i:
mac = i.split(':').strip()
if 'IPV4' in i.upper() and '(' in i:
ip = i.split(':').split('(').strip()
if ip and mac:
return
def ip_online(ip):#判断IP是否在线
cmd = f'ping -n 1 {ip}'
output = os.popen(cmd)
if any('TTL' in i.upper() for i in output):
ips.append(ip)
def ip2mac(ip):#通过IP查MAC
loc_ip, mac = local_ip_mac()
if ip == loc_ip:
return mac
cmd = f'arp -a {ip}'
output = os.popen(cmd)
outstr = ' '.join(list(output))
if '未找到 ARP 项' not in outstr:#排除本机
macs = re.findall('(({2}-){5}{2})', outstr, re.S)
for i in macs:
if len(i) == 17:
return i
def speed_up(func, args_list):#多线程
thread_list = []
for i in args_list:
t = threading.Thread(target=func, args=(i, ))
thread_list.append(t)
for t in thread_list:
t.start()
t.join()
if __name__ == '__main__':
print('扫描中,稍等片刻...')
loc_ip, mac = local_ip_mac()
ip_range = '.'.join(loc_ip.split('.')[:-1])#通过本机IP拼接IP段
ip_list =
speed_up(ip_online, ip_list)#多线程扫描
res = [(i, ip2mac(i)) for i in sorted(ips)]
print('扫描结果:', sorted(res))
页:
[1]