English 发表于 2022-8-13 22:52:58

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]
查看完整版本: Python一键扫描局域网在线IP和对应Mac地址