ubuntu18.04简单的mac地址修改工具
from netifaces import ifaddresses,AF_INET,AF_PACKET
from ruamel import yaml
import os
class Mynetiface:
def __init__(self):
self.count = 0
self.ifNameDict = {"iftype": ["ethernets","vlans"],
"ifname": ["mgmt0","10GigEth0-0-0","10GigEth0-0-1","10GigEth0-0-2","10GigEth0-0-3",\
"GigEth0-1-0","GigEth0-1-1","GigEth0-1-2","GigEth0-1-3","GigEth0-1-4","GigEth0-1-5",\
"GigEth0-1-6","GigEth0-1-7","base","fp2cp1","fp2cp2"]
}
self.mcpIfNameDict = {"iftype": ["ethernets","vlans"],
"ifname": ["mgmt0","base","cp2fp1","cp2fp2"]
}
self.ifnameList = ["enp13s0","enp6s0f1","enp6s0f0","enp4s0f1","enp4s0f0","enp11s0f0","enp11s0f1","enp11s0f2","enp11s0f3",\
"enp8s0f0","enp8s0f1","enp8s0f2","enp8s0f3","enp14s0"]
self.path = "/etc/netplan/01-netcfg.yaml"
if not os.path.exists(self.path):
self.path = "/etc/netplan/50-cloud-init.yaml"
def get_macaddr(self,ifnameList):
addr_list = []
loop = 0
ifNameDict = self.ifNameDict
print(ifnameList)
for i in ifnameList:
try:
loop = loop + 1
addr = ifaddresses(i)[AF_PACKET][0]['addr']
addr_list.append(addr)
except ValueError:
print(1)
try:
addr = ifaddresses(ifNameDict["ifname"][loop-1])[AF_PACKET][0]['addr']
addr_list.append(addr)
except Exception as e:
print(e)
pass
return addr_list
def get_base_mac(self,base_mac,count):
mac_old = base_mac.split(":")[-1]
mac_int = int("0x" + str(mac_old),16)
if count == 0:
mac_int = mac_int + 1
else:
mac_int = mac_int + 2
if mac_int < 16:
mac_hex = hex(mac_int).replace("0x","0")
else:
mac_hex = str(hex(mac_int)[-2:])
mac = base_mac[0:-2] + mac_hex
return mac
def alter(self,path,iftype,ifname,mac):
with open(path, encoding="utf-8") as f:
content = yaml.load(f, Loader=yaml.RoundTripLoader)
if iftype == 'ethernets':
try:
content['network'][iftype][ifname]['match']['macaddress'] = mac
except KeyError as k1:
print(k1)
pass
else:
content['network'][iftype][ifname]['macaddress'] = mac
with open(path, 'w', encoding="utf-8") as nf:
yaml.dump(content, nf, Dumper=yaml.RoundTripDumper)
def update_mac(self):
PATH = self.path
ifnameList = self.ifnameList
ifNameDict = self.ifNameDict
mcpIfNameDict = self.mcpIfNameDict
macsList = self.get_macaddr(ifnameList)
print("macsList:",macsList)
for i in range(0,2):
get_mac = self.get_base_mac(macsList[-1],count=i)
macsList.append(get_mac)
print(macsList)
if len(macsList) > 6:
print("DP update MAC!!!")
macDict = ifNameDict["ifname"]
for ifName,MAC in zip(macDict,macsList):
if ("cp" or "Act") not in ifName:
ifType = ifNameDict["iftype"][0]
else:
ifType = ifNameDict["iftype"][1]
self.alter(PATH,ifType,ifName,MAC)
else:
print("CP update MAC!!!")
macDict = mcpIfNameDict["ifname"]
for ifName,MAC in zip(macDict,macsList):
if ("cp" or "Act") not in ifName:
ifType = mcpIfNameDict["iftype"][0]
else:
ifType = mcpIfNameDict["iftype"][1]
self.alter(PATH,ifType,ifName,MAC)
if __name__ == "__main__":
miface = Mynetiface()
miface.update_mac()