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 :