Python实现十六进制字符计算。案例计算终端连接华为无线AP,对应BSSID。手机端显示虚拟MAC地址

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])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

信飞翔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值