python3实用小工具--wifi路由器厂商查看器(附源码)


本次使用python编写一款wifi路由器厂商查看器,能够扫描并查看附近wifi的基本信息,包括ssid、MAC地址、路由器所属厂商、加密方式、信道、信号强度、wifi信号类型等等,这里最重要的是 路由器所属厂商,Let’s Go!

一.准备工作

python标准库:re、subprocess。

二.效果展示

1.结果

请添加图片描述
使用了pprint打印输出的结果。

2.依赖

请添加图片描述
本次设备厂商查找主要依赖于oui.txt.

三.基本思路

在这里插入图片描述

四.源代码

import re
import subprocess
from pprint import pprint

class Parse_Mac_Addr(object):
    def __init__(self):
        self.oui_file=r'./oui.txt'
        self.load_oui_file()

    def load_oui_file(self):
        with open(self.oui_file,'r',encoding='utf-8')as f:
            self.oui_file_content=f.readlines()

    def get_popen_result(self,cmd):
        find_str = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
        execute_result = find_str.stdout.read().decode('gbk',errors='ignore')
        return execute_result

    def get_loacl_wifi(self):
        cmd='netsh wlan show networks mode=bssid'
        local_wifi_infos=self.get_popen_result(cmd)
        # print(local_wifi_infos)
        wifi_data_list=[]
        wifi_ssids=re.findall('SSID \d+ : (.*?)\r\n',local_wifi_infos)  #ssid
        wifi_macs=re.findall('BSSID 1.*: (.*?)\r\n',local_wifi_infos)   #mac地址
        wifi_singles=re.findall('信号.*: (.*?)\r\n',local_wifi_infos)     #信号强度
        wifi_types=re.findall('无线电类型.*: (.*?)\r\n',local_wifi_infos)    #无线电类型
        wifi_encrypts=re.findall('加密.*: (.*?) \r\n',local_wifi_infos)   #加密方式
        wifi_auts=re.findall('身份验证.*: (.*?)\r\n',local_wifi_infos)      #身份验证方式
        wifi_channels=re.findall('频道.*: (\d+) \r\n',local_wifi_infos)   #信道
        wifi_base_rates=re.findall('基本速率\(Mbps\).*: (.*?)\r',local_wifi_infos)  #基本速率
        wifi_other_rates=re.findall('其他速率.*: (.*?)\r',local_wifi_infos)     #其他速率
        for data in zip(wifi_ssids,wifi_macs,wifi_singles,wifi_types,wifi_encrypts,wifi_auts,wifi_channels,wifi_base_rates,wifi_other_rates):
            item={
    
    }
            item['wifi_ssid']=data[0]
            item['wifi_single']=data[2]
            wifi_mac=data[1]
            wifi_brand=self.do_search(self.format_mac(wifi_mac))
            item['wifi_type']=data[3]
            item['wifi_encrypt']=data[4]
            item['wifi_mac']=wifi_mac
            item['wifi_aut']=data[5]
            item['wifi_channel']=data[6]
            item['wifi_base_rate']=data[7]
            item['wifi_other_rate']=data[8]
            item['wifi_brand']=wifi_brand
            wifi_data_list.append(item)
        pprint(wifi_data_list,sort_dicts=True)
        print(f'附近有{
      
      len(wifi_data_list)}个可连接wifi')
        return wifi_data_list

    def format_mac(self,mac):
        if '-' in mac:
            mac_format=''.join(mac.split('-'))
        elif ':' in mac:
            mac_format=''.join(mac.split(':'))
        elif ':' in mac:
            mac_format=''.join(mac.split(':'))
        else:
            mac_format=mac
        if len(mac_format)==12:
            return mac_format[:6].upper()
        else:
            print('mac地址不合法!')

    def do_search(self,mac):
        for line in self.oui_file_content:
            if mac in line:
                brand_=re.findall('\(base 16\)\t\t(.*?)$',line)
                brand=brand_[0]
                return brand
            else:
                brand='未知厂商'
        return brand


if __name__ == '__main__':
    p=Parse_Mac_Addr()
    # test_mac = '00-16-EA-AE-3C-40'
    # wifi=p.format_mac(test_mac)
    # print(p.do_search(wifi))
    p.get_loacl_wifi()

五.总结

本次使用python撰写了一个wifi路由器厂商查看器,能够帮助我们自动扫描附近的wifi,列出其详细信息包括网卡所属厂商信息,方便又实用,依赖于oui.txt,我把它放在了蓝奏云大家可以自取。思路、代码方面有什么不足欢迎各位大佬指正、批评!

猜你喜欢

转载自blog.csdn.net/a1397852386/article/details/120161444