思路是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)
