BSSID(虚拟mac)生成规则:BSSID =物理MAC+(射频IDx16+WLANID-1)
双频AP,射频ID只有0(2.4G) 1(5G)三频AP,射频ID有0(2.4G)1(5G) 2(5G) 有2.4G终端,有5G终端。AP终端是三频AP,故一个物理mac地址,实际有3个BSSID的虚拟MAC
与脚本同一目录下,有wlan_mac.txt文件,里面包含AP的物理mac地址。
感谢@埋头苦干的墨小白,提供文本转16进制方法,连接:https://blog.csdn.net/qq_42875304/article/details/123927029
代码如下:
```python
def str2hex(s):
#定义初始值
odata = 0;
#全部表示大写
su =s.upper()
#进入循环,每一个大写字母进行转化ASCII码(使用ord函数)。一组2进制表示字母和数字。
for c in su:
#转化数字或字母变成ASCII码
tmp=ord(c)
#判断码字符在数字区域
if tmp <= ord('9') :
#ASCII码(2进制数字)的前4位,代表其他意思。使用 << 向右移动4位,表示具体 tmp 的数值。
odata = odata << 4
# 用odata数字加上tmp 与 0 的差值,就是十进制数字。
odata += tmp - ord('0')
#判断码字符在字母A-F区域
elif ord('A') <= tmp <= ord('F'):
##ASCII码(2进制数字)的前4位,代表其他意思。使用 << 向右移动4位,表示具体 tmp 的数值。
odata = odata << 4
# 获取字母码值与字母A的码值的差别,并加上10。把字母转成具体十进制数字。
odata += tmp - ord('A') + 10
# odata 是持续叠加的,把每个数字、字母的对应的值叠加到一起,变成十进制数字
return odata
wl_mac_list = []
with open('wlan_mac.txt') as f:
for j in f.readlines():
wl_mac_list.append(j[:12])
for wl_mac in wl_mac_list:
rfid_lst = [0,1,2]
wid = 2
for rfid in rfid_lst:
bssid_s_w = str2hex(wl_mac) + rfid*16 + wid-1
bssid_s_w_mac = hex(bssid_s_w)[2:].upper()
#如果mac地址前面有数字0,则计算缺少0的个数,进行添加
if len(wl_mac) > len(bssid_s_w_mac):
geshu = len(wl_mac)-len(bssid_s_w_mac)
bssid_s_w_mac = geshu*'0'+bssid_s_w_mac
bssid_mac = ""
for i in range(1,len(bssid_s_w_mac)+1):
if i%4 == 0:
bssid_mac = bssid_mac + bssid_s_w_mac[i-4:i] + ":"
print(bssid_mac[:-1])