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
Creo haber encontrado un bug en línea 11, donde dice:
ResponderEliminarlet 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
}
Estoy que lo peto. A mí me gusta más python:
ResponderEliminar#!/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)