martes, 12 de febrero de 2013

Script en bash para cambiar la mac

Para el que pedía scripts, ahí va uno:

#!/bin/bash

# Este script cambia la dirección MAC la tarjeta ethernet por una nueva que
# se genera de manera pseudoaleatoria.

mac_gen() {

RANGE=256
i=0

n=$RANDOM
let "n %= $RANGE"
let r=n%2
let n=n+r
n=`printf '%x\n' $n`

mac=`printf $n:`

while [ $i -lt 5 ]; do

    n=$RANDOM
    let "n %= $RANGE"
    n=`printf '%x\n' $n`

    if [ $i -lt 4 ]; then
         mac=${mac}`printf $n:`
    fi

    if [ $i = 4 ]; then
         mac=${mac}`printf $n`
    fi

    let i=i+1

done

}

mac_gen

echo MAC: $mac

exec ifconfig eth0 hw ether $mac

2 comentarios:

  1. Creo haber encontrado un bug en línea 11, donde dice:

    let n=n+r

    En el caso de que n=255, n pasará a ser 256, fuera del rango RANGE. Se podría poner n=n-r, o bien mi versión más compacta de la función :

    mac_gen(){

    RANGE=256

    #bucle for, mucho más guay que while
    #para cada uno de los 6 números de la mac
    for i in {0..5}; do
    let "n = $RANDOM % $RANGE"

    if [ $i -eq 0 ]; then
    #eliminamos impares
    let "n = (n/2)*2"
    fi

    mac=${mac}`printf '%02x' $n`

    if [ $i -ne 5 ]; then
    #añadir dos puntos excepto al final de la mac
    mac=${mac}`printf:`
    fi
    done
    }

    ResponderEliminar
  2. Estoy que lo peto. A mí me gusta más python:

    #!/usr/bin/env python

    import random #num aleatorios
    import os #ejecutar comandos en consola

    RANGE = 256
    mac = ""

    for i in range(0,6):
    #python necesita identación dentro del for

    n = random.randrange(RANGE)

    #fuera impares
    if(i==0): n = (n/2)*2

    mac += '%02x' % n

    if(i!=5): mac += ':'

    #end for

    print('MAC: ' + mac)
    os.system("ifconfig eth0 hw ether " + mac)

    ResponderEliminar