Alors, qu’est-ce qu’une adresse mac ? Celui-ci peut être physique ou virtuel. Cela peut être identifié par le fabricant pour s’assurer que toutes les machines personnalisées sont uniques. L’adresse mac d’une machine, là encore, pourrait être examinée à l’aide d’une carte réseau et du bon logiciel. Dans ce didacticiel, nous verrons comment mettre à jour votre adresse mac à l’aide de Python.
Comment mettre à jour votre adresse Mac à l’aide de Python sous Windows
import subprocess
import winreg
import re
import codecs
Créer une variable pour stocker la liste de l’adresse mac
mac_to_change_to = ["0A1122334455", "0E1122334455", "021122334455", "061122334455"]
Créez une liste vide pour stocker toutes les adresses MAC que nous voulons collecter
mac_addresses = list()
Nous commençons par créer une expression régulière (regex) pour les adresses MAC, puis nous créons une regex pour les noms de transport, puis nous créons une regex pour sélectionner l’index de l’adaptateur.
macAddRegex = re.compile(r"([A-Za-z0-9]{2}[:-]){5}([A-Za-z0-9]{2})")
transportName = re.compile("({.+})")
adapterIndex = re.compile("([0-9]+)")
Nous utilisons Python pour exécuter la commande getmac, puis capturons la sortie, puis nous divisons la sortie sur la nouvelle ligne afin de pouvoir travailler avec les lignes individuelles.
getmac_output = subprocess.run("getmac", capture_output=True).stdout.decode().split('\n')
Ici, nous parcourons la sortie pour utiliser la regex pour trouver les adresses Mac, puis nous utilisons la regex pour trouver le nom de transport
for macAdd in getmac_output:
macFind = macAddRegex.search(macAdd)
transportFind = transportName.search(macAdd)
if macFind == None or transportFind == None:
continue
mac_addresses.append((macFind.group(0),transportFind.group(0)))
Créez un menu simple pour sélectionner l’adresse Mac que l’utilisateur souhaite mettre à jour.
print("select the MAC Address want to update")
for index, item in enumerate(mac_addresses):
print(f"{index} - Mac Address: {item[0]} - Transport Name: {item[1]}")
Invitez l’utilisateur à sélectionner l’adresse Mac qu’il souhaite mettre à jour
option = input("Select the number of the MAC address you want to change:")
Créez une console simple qui permet à l’utilisateur de sélectionner l’adresse MAC. Si l’utilisateur sélectionne une adresse MAC valide, remplacez-la. Sinon, donnez une erreur pour vous assurer que seules les valeurs valides sont choisies.
while True:
print("Which MAC address would you like us to use? ")
for index, item in enumerate(mac_to_change_to):
print(f"{index} - Mac Address: {item}")
update_option = input("Select the item number of the new MAC address you want to use:")
if int(update_option) >= 0 and int(update_option) < len(mac_to_change_to):
print(f"Mac Address you selected: {mac_to_change_to[int(update_option)]}")
break
else:
print("this address is not valid, please select different address")
Nous connaissons la première partie de la clé, ajouterons le dossier où je rechercherai les valeurs
controller_key_part = r"SYSTEM\ControlSet001\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}"
Nous nous connectons au registre HKEY_LOCAL_MACHINE. Si nous spécifions Aucun, cela signifie que nous nous connectons au registre de la machine locale
with winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE) as hkey:
Créez une liste pour les 21 dossiers pour utiliser un opérateur ternaire. La valeur de transport de votre adresse Mac doit se situer dans cette plage.
controller_key_folders = [("\\000" + str(item) if item < 10 else "\\00" + str(item)) for item in range(0, 21)]
Nous parcourons maintenant la liste des dossiers que nous avons créés et essayons d’ouvrir la clé. Ensuite, nous devons spécifier le registre auquel nous nous sommes connectés
for key_folder in controller_key_folders:
try:
with winreg.OpenKey(hkey, controller_key_part + key_folder, 0, winreg.KEY_ALL_ACCESS) as regkey:
try:
count = 0
while True:
name, value, type = winreg.EnumValue(regkey, count)
count = count + 1
if name == "NetCfgInstanceId" and value == mac_addresses[int(option)][1]:
new_mac_address = mac_to_change_to[int(update_option)]
winreg.SetValueEx(regkey, "NetworkAddress", 0, winreg.REG_SZ, new_mac_address)
print("Successfully matched Transport Number")
break
except WindowsError:
pass
except:
pass
Maintenant, nous devons désactiver et activer les périphériques sans fil
run_disable_enable = input("Do you want to disable and re-enable your wireless device(s). Press Y or y to continue:")
# Changes the input to lowercase and compares it to Y. If they match, the rest of the function will run. And if they don’t then function will never run
if run_disable_enable.lower() == 'y':
run_last_part = True
else:
run_last_part = False
# The `run_last_part` variable should be set to True or False based on above code
while run_last_part:
Maintenant, nous devons désactiver et activer les adaptateurs réseau
Remarque : si nous obtenons une liste de tous les adaptateurs réseau et qu’il y a une erreur, vous devez ignorer les erreurs car il n’aime pas le format dans lequel la commande renvoie les données.
network_adapters = subprocess.run(["wmic", "nic", "get", "name,index"], capture_output=True).stdout.decode('utf-8', errors="ignore").split('\r\r\n')
for adapter in network_adapters:
# getting the index for each of the adapter available
adapter_index_find = adapterIndex.search(adapter.lstrip())
# If the user's adapter has wireless in its description, we're going to toggle it off and on.
if adapter_index_find and "Wireless" in adapter:
disable = subprocess.run(["wmic", "path", "win32_networkadapter", "where", f"index={adapter_index_find.group(0)}", "call", "disable"],capture_output=True)
if(disable.returncode == 0):
print(f"Disabled {adapter.lstrip()}")
# enable the network adapter again.
enable = subprocess.run(["wmic", "path", f"win32_networkadapter", "where", f"index={adapter_index_find.group(0)}", "call", "enable"],capture_output=True)
if (enable.returncode == 0):
print(f"Enabled {adapter.lstrip()}")
Exécutez à nouveau la commande getmac pour vérifier si l’adresse MAC que nous avons changée fait partie de la liste renvoyée en exécutant « getmac ». S’il est présent, nous avons réussi.
getmac_output = subprocess.run("getmac", capture_output=True).stdout.decode()
mac_add = "-".join([(mac_to_change_to[int(update_option)][i:i+2]) for i in range(0, len(mac_to_change_to[int(update_option)]), 2)])
if mac_add in getmac_output:
print("Mac Address Success")
break
Et que maintenant nous pouvons exécuter le code pour changer l’adresse mac
Remarque : avant d’exécuter le code, assurez-vous d’ouvrir votre invite de commande avec Exécuter en tant qu’administrateur et de vous connecter également à un réseau sans fil.
Sortir:
Comment mettre à jour votre adresse Mac en utilisant Python sous Linux
Tout d’abord, vérifions l’adresse mac actuelle. Pour cela, vous pouvez utiliser la commande suivante dans votre terminal
Ifconfig
Voyons maintenant comment mettre à jour votre adresse Mac à l’aide de Python :
import subprocess
Ajoutez votre nom de réseau
interface = "wlan0"
Ajoutez la nouvelle adresse mac que vous souhaitez modifier
mac = "00:11:11:11:11:07"
Maintenant, détruisons le réseau
subprocess.call(["ifconfig", interface, "down"])
Changez maintenant l’adresse mac
subprocess.call(["ifconfig", interface, "hw", "ether", mac])
Et enfin, activons le réseau
subprocess.call(["ifconfig", interface, "up"])
Maintenant, pour exécuter le code, ouvrez le terminal dans le même répertoire où se trouve votre fichier python, puis exécutez le code.
Sortir:
Avant de changer l’adresse mac
Après avoir changé l’adresse mac
Derniers mots
Nous espérons que vous avez apprécié notre article sur la mise à jour de votre adresse mac à l’aide de Python et que vous l’avez trouvé utile. Nous savons que dans le monde moderne, la technologie est partout, cela signifie donc que nos ordinateurs sont utilisés à diverses fins. Bien que les ordinateurs aient des objectifs variés, ils sont tous liés d’une manière ou d’une autre. Si vous avez des questions ou des commentaires à propos de ce blog, n’hésitez pas à nous contacter à.
Voici quelques tutoriels utiles que vous pouvez lire :
- Concurrency in Python
- Basic Neural Network in Python to Make Predictions
- Monitor Python scripts using Prometheus
- How to Implement Google Login in Flask App
- How to create a Word Guessing Game in Python
- Convert an image to 8-bit image
- Schedule Python Scripts with Apache Airflow
- Create Sudoku game in Python using Pygame
- How to Deploy Flask API on Heroku?
- Create APIs using gRPC in Python