思路是10/16 进制的转换 和 字符串的处理
开始造轮子
1、判断是否是mac地址
正则匹配是否符合条件
1
import
re
2
3
def
isMac(string):
4
preg = re.compile(
'
^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$
'
)
5
ret =
preg.match(string)
6
if
ret
is
None:
7
return
False
8
else
:
9
return
True
2、mac转int
替换掉冒号转16进制
1
def
macToInt(mac):
2
mac = mac.replace(
"
:
"
,
""
)
3
return
int(mac, 16)
3、int转mac
转回16进制后进行补位和补冒号
1
def
intToMac(intMac):
2
#
mac地址每段都是2位 不足位数补0 例如:f:23:54 => 0f:23:54
3
if
len(hex(intMac)) % 2 !=
0:
4
hexStr =
'
0{0:X}
'
.format(intMac)
5
else
:
6
hexStr =
'
{0:X}
'
.format(intMac)
7
8
i =
0
9
ret =
""
10
11
while
i <= len(hexStr) - 2
:
12
if
ret ==
""
:
13
ret = hexStr[i:(i + 2
)]
14
else
:
15
ret =
""
.join([ret,
"
:
"
, hexStr[i:(i + 2
)]])
16
i = i + 2
17
return
ret
4、获取下n个mac
转成int后进行数值计算
1
def
getNextMac(macAddr, n):
2
return
intToMac(macToInt(macAddr) + n)
5、获取上n个mac
转成int后进行数值计算
1
def
backOldMac(macAddr, n):
2
return
intToMac(macToInt(macAddr) - n)
6、mac地址比较
转换为int后进行值比较
1
def
compareMac(macA, macB):
2
return
macToInt(macA) >= macToInt(macB)
7、mac地址个数计算
转换成int后进行减法运算
1
def
calcMacNum(mac_start, mac_end):
2
mac_start =
mac_start
.upper()
3
mac_end =
mac_end
.upper()
4
ret = macToInt(mac_end) - macToInt(mac_start) + 1
5
if
ret <
0:
6
ret =
0
7
return
ret
8、反转mac地址
mac地址的反序化,去掉冒号后反转字符串然后加回冒号
1
def
macReverse(mac):
2
info = mac.split(
"
:
"
)
3
info.reverse()
4
return
"
:
"
.join(info)

