吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2402|回复: 3
收起左侧

[Python 转载] 硬件厂商MAC地址生成查询器

[复制链接]
qw_dmz 发表于 2021-12-9 14:31

说明

在论坛里闲逛的时候突然看到的
指定硬件厂商MAC地址生成
首先还是感谢这位老哥提供的思路以及MAC地址查询网站
mac地址查询网站
其次还是因为报毒啊,所以不太想用。
自己用Python3写了一个。
这里就直接把代码公开了。毕竟还是别人的想法。
由于读取CSV还是用的遍历形式。启动还是略微有些费时
有更好的办法欢迎提出。

使用说明

直接点击选择厂商点击生成即可生成新的MAC地址
也可以复制电脑的MAC地址进行查询
输入框限制了输入内容。非法格式的内容无法输入

下载方法

直接用代码自己编译即可。
或者直接从网站下载
pythonProject1.zip (910.84 KB, 下载次数: 60)

代码

import csv
import random
import pyperclip
from itertools import islice
from tkinter import *
import wx

# -*- coding:utf-8 -*-

macAddlist = []
macManufacturerlist = []
reader = []
'''读取MAC设备文件'''
with open(file="./files/oui.csv",mode="r",encoding='utf-8') as f:
    reader = csv.reader(f)
    for row in islice(reader,1,None):
        macAddlist.append(row[1])
        macManufacturerlist.append(row[2])

        """
            for index in range(len(macAddlist)):
                self.SperListView1.Append([macManufacturerlist[index],macAddlist[index]])
        """

def FormatMac(inputMAC):
    """
    格式化MAC地址
    :param inputMAC:
    :return: 格式化后的mac地址
    """
    if(len(inputMAC.strip()) > 17):
        return False
    standardMAC = ''
    for str in inputMAC:
        if(str == ':' or str == '-' or str == '.'):
            pass
        else:standardMAC += str

    return standardMAC.upper()

class Frame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, title='MAC地址查询&生成器', size=(580, 300),name='frame',style=541072384)
        self.StarWindow = wx.Panel(self)
        self.Centre()
        self.Edit_MAC = wx.TextCtrl(self.StarWindow,size=(180, 35),pos=(80, 5),value='',name='text',style=0)
        self.Edit_MAC.Bind(wx.EVT_TEXT, self.Edit_MAC_nrbgb)
        self.Edit_MAC.SetMaxLength(17)
        self.LableText1 = wx.StaticText(self.StarWindow,size=(67, 18),pos=(8, 15),label='MAC地址:',name='staticText',
                                        style=2321)
        self.BTN_Select = wx.Button(self.StarWindow,size=(80, 35),pos=(270, 5),label='查询',name='button')
        self.BTN_Select.Bind(wx.EVT_BUTTON,self.BTN_Select_anbdj)
        self.LableText2 = wx.StaticText(self.StarWindow,size=(64, 18),pos=(8, 62),label='生产商:',name='staticText',
                                        style=2321)
        self.Edit_Manufacturer = wx.TextCtrl(self.StarWindow,size=(180, 35),pos=(80, 54),value='',name='text',style=16)
        self.BTN_Copy = wx.Button(self.StarWindow,size=(80, 35),pos=(269, 54),label='复制',name='button')
        self.BTN_Copy.Bind(wx.EVT_BUTTON,self.BTN_Copy_anbdj)
        self.SperListView1 = wx.ListCtrl(self.StarWindow,size=(354, 160),pos=(6, 94),name='listCtrl',style=8227)
        self.SperListView1.AppendColumn('生产厂商', 0,260)
        self.SperListView1.AppendColumn('MAC地址头', 0,89)
        for index in range(len(macAddlist)):
            self.SperListView1.Append([macManufacturerlist[index], macAddlist[index]])
        self.BTN_Generate = wx.Button(self.StarWindow,size=(80, 35),pos=(354, 54),label='生成',name='button')
        self.BTN_Generate.Bind(wx.EVT_BUTTON,self.BTN_Generate_anbdj)
        self.Edit_Lest = wx.TextCtrl(self.StarWindow,size=(100, 35),pos=(449, 7),value='',name='text',style=0)
        self.LableText3 = wx.StaticText(self.StarWindow,size=(69, 16),pos=(368, 19),label='MAC尾号:',name='staticText',
                                        style=2321)
        self.ComBox1 = wx.ComboBox(self.StarWindow, value=':', pos=(493, 54), name='comboBox', choices=[':', '-', '.'],
                                   style=16)
        self.ComBox1.SetSize((57, 31))
        self.ComBox1.Bind(wx.EVT_TEXT,self.ComBox1_wbfsbh)
        self.Lable4 = wx.StaticText(self.StarWindow, size=(50, 24), pos=(440, 62), label='分隔符:', name='staticText',
                                    style=2321)

    def Edit_MAC_nrbgb(self,event):
        """
        输入框内容检测
        :param event:
        :return:
        """
        editmac = self.Edit_MAC.GetLineText(0).upper()
        for num in range(len(editmac)):
            if(ord(editmac[num]) >= ord('0') and ord(editmac[num]) <= ord('F')):
                pass
            elif(editmac[num] == ':' or editmac[num] == '-' or editmac[num] == '.'):
                pass
            else:self.Edit_MAC.Remove(num,num+1)

    def BTN_Select_anbdj(self,event):
        """
        查询厂商信息按钮事件
        :param event:
        :return:
        """
        inputMAC = self.Edit_MAC.GetLineText(0)
        isStation = FormatMac(inputMAC)
        if(isStation):
            macindex = macAddlist.index(isStation[:6])
            Manufacturerditel = macManufacturerlist[macindex]
            self.Edit_Manufacturer.Clear()
            self.Edit_Lest.Clear()
            self.Edit_Manufacturer.AppendText(Manufacturerditel)
            self.Edit_Lest.AppendText(isStation[6:12].swapcase())
            self.SperListView1.Focus(macindex)
            self.SperListView1.Select(macindex)
            #ListItem1 =  self.SperListView1.GetItemText(macindex,col=1)
            #print(ListItem1)

    def BTN_Generate_anbdj(self,event):
        """
        生成新的MAC地址
        :param event:
        :return:
        """
        macindex = self.SperListView1.GetFocusedItem();
        inputMAC = self.SperListView1.GetItemText(macindex, col=1)
        newMAC  = inputMAC + str(hex(random.randint(0x0,0xf)))[2:3]
        for nu in range(5):
            newMAC += str(hex(random.randint(0x0, 0xf)))[2:3]
        self.Edit_MAC.Clear()
        self.Edit_MAC.AppendText(newMAC)
        print(newMAC)

    def BTN_Copy_anbdj(self,event):
        """
        复制厂商信息
        :param event:
        :return:
        """
        Manufacturer = self.Edit_Manufacturer.GetLineText(0)
        if(Manufacturer != ""):
            pyperclip.copy(Manufacturer)

    def ComBox1_wbfsbh(self,event):
        """
        下拉框监听,分隔符修改
        :param event:
        :return:
        """
        inputMAC = self.Edit_MAC.GetLineText(0)
        isStation = FormatMac(inputMAC)
        stationFGF = self.ComBox1.GetValue()
        if (isStation):
            if (stationFGF== ".") :staNUM = 4
            else:staNUM = 2
            self.Edit_MAC.Clear()
            StationMac = ''
            for Snum in range(len(isStation)):
                if (Snum % staNUM == 0 and Snum != 0):
                    StationMac += stationFGF
                StationMac += isStation[Snum]
            self.Edit_MAC.AppendText(StationMac)
            #print(StationMac)

class myApp(wx.App):
    def  OnInit(self):
        self.frame = Frame()
        self.frame.Show(True)
        return True

if __name__ == '__main__':
    app = myApp()
    app.MainLoop()

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

xu2006 发表于 2021-12-9 19:17
点赞大神!消灭零回复
zqlcpu 发表于 2021-12-9 20:09
robboter 发表于 2022-3-2 21:04
我的intel wi-fi 6 ax201 160MHz不支持换mac地址,有没有遇到这个问题的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 07:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表