Skip to main content
  1. Scripts/
  2. Python/

Macchanger

·409 words·2 mins· ·
MAC Macchanger
Fouen
Author
Fouen
Soy un joven informatico interesado en la ciberseguridad
Table of Contents

¿Qué es una dirección MAC?
#

Una dirección MAC es un identificador único asignado a cada tarjeta de red (NIC) por el fabricante. Tiene una longitud de 48 bits y generalmente se representa en formato hexadecimal, como 00:1A:2B:3C:4D:5E. Las direcciones MAC se utilizan para identificar dispositivos en una red local y gestionar el tráfico de red a nivel de la capa de enlace de datos del modelo OSI.


¿Por qué cambiar la dirección MAC?
#

Hay varias razones por las que alguien podría querer cambiar la dirección MAC de su interfaz de red:

  1. Privacidad: Ocultar la dirección MAC original para dificultar el rastreo de dispositivos en una red.
  2. Seguridad: Superar restricciones de red que filtran el acceso en función de direcciones MAC específicas.
  3. Pruebas y Diagnósticos: Simular dispositivos diferentes para probar configuraciones de red o solucionar problemas.
  4. Bypass de Filtrado MAC: Acceder a redes que utilizan filtrado de direcciones MAC para restringir el acceso.

Código
#

import argparse
import re
import subprocess


def get_arguments():
    parser = argparse.ArgumentParser(description="Herramienta para cambiar una dirección MAC ")
    parser.add_argument("-i", "--interface", required=True, dest="interface", help="Nombre interfaz de red")
    parser.add_argument("-m", "--mac", required=True, dest="mac_address", help="Nueva dirección MAC")

    return parser.parse_args()
        

def validate(interface, mac):

    valid_interface = re.match(r'^[e][n|t][s|h|o]\d{1,2}$', interface)
    valid_mac = re.match(r'^([A-Fa-f0-9$]{2}[:]){5}[A-Fa-f0-9]{2}$', mac)

    return valid_interface and valid_mac

def change_mac(interface, mac):

    if validate(interface, mac):
        subprocess.run(["ifconfig", interface, "down"])
        subprocess.run(["ifconfig", interface, "hw", "ether", mac])
        subprocess.run(["ifconfig", interface, "up"])

        print("\nLa MAC ha sido cambiada exitosamente")

    else:
        print("\nLos datos introducidos no son correctos")


def main():
    args = get_arguments()

    change_mac(args.interface, args.mac_address)

if __name__ == '__main__':

    main()

Cómo funciona?
#

1. Función get_arguments()
#

  • argparse.ArgumentParser: Crea un nuevo objeto de análisis de argumentos.
  • add_argument: Define los argumentos que el script espera.
    • -i o --interface: Argumento obligatorio que especifica la interfaz de red.
    • -m o --mac: Argumento obligatorio que especifica la nueva dirección MAC.
  • parse_args(): Analiza los argumentos de la línea de comandos y los devuelve como un objeto.

Función validate()
#

  • re.match(): Compara una cadena con una expresión regular.

  • valid_interface: Verifica que la interfaz de red comience con e, n, t, s, h o o y esté seguida por uno o dos dígitos.

  • valid_mac: Verifica que la dirección MAC esté en el formato XX:XX:XX:XX:XX:XX, donde X es un dígito hexadecimal.

Función change_mac()
#

  • validate(): Llama a la función de validación.
  • subprocess.run(): Ejecuta comandos del sistema:
    • ifconfig <interface> down: Desactiva la interfaz.
    • ifconfig <interface> hw ether <mac>: Cambia la dirección MAC.
    • ifconfig <interface> up: Reactiva la interfaz.
  • print(): Muestra un mensaje de éxito o error según corresponda.
Créditos a s4vitar