Muchas gracias a vuestra ayuda
(en la 0.5 os añadiré en los créditos, os lo merecéis mas que de sobra
)
@alister, gracias por el tip. Después de investigar mucho, llego a la conclusión de que solo existen 3 rutas para poder ver la MAC Original:
/run/udev/data/n?, donde después hay que averiguar a que interfaz pertenece. Lo gracioso es que en Ubuntu no funciona (sale todo menos la MAC
)
/etc/udev/rules.d/70-persistent-net.rules La otra alternativa que hay
/sys/class/net/$INTERFACE/phy80211/addresses, esta ultima solo muestra el de las tarjetas wireless (eso parece), pues paraa mi eth0 no hay dicha ruta...
@geminis_demon, gracias por iluminarme el camino ( los loops todavía no los tengo tan controlados).
Tu script funciona perfecto bajo Wifislax, pero en Ubuntu las rutas del /run no sirven, así que le añadí alternativas a esa ruta por si fallase (una tontería, pero para mi limitada capacidad fue mucho tiempo perdido
)
readarray -t interfaces < <(ip link | grep "<" | cut -d " " -f 2 | cut -d ":" -f 1 | grep -v lo)
for INTERFACE in ${interfaces[@]}; do
for N in $(ls /run/udev/data|grep "^n[0-9]$"); do
MODEL_ID="$(find /sys/devices -name "$INTERFACE"|rev|cut -d'/' -f3-|rev)"
if [ "$(cat /run/udev/data/$N|grep "$MODEL_ID")" ]; then
rutaprincipal=$(cat /run/udev/data/$N|grep "MATCHADDR")
if [ $rutaprincipal ]; then
MAC_ORIGINAL="$(cat /run/udev/data/$N|grep "MATCHADDR"|cut -d'=' -f2-)"
elif [ -z $rutaprincipal ]; then
rutasecundaria=$(cat /etc/udev/rules.d/70-persistent-net.rules | grep $INTERFACE | awk '{print $4}' | grep -o -P '(?<=").*(?=")')
if [ $rutasecundaria ]; then
MAC_ORIGINAL="$(cat /etc/udev/rules.d/70-persistent-net.rules | grep $INTERFACE | awk '{print $4}' | grep -o -P '(?<=").*(?=")')"
elif [ -z $rutasecundaria ]; then
MAC_ORIGINAL="$(cat /sys/class/net/$INTERFACE/phy80211/addresses)"
fi
fi
MAC_ACTUAL="$(cat /sys/class/net/$INTERFACE/address)"
echo "================================\\"
echo -e " INTERFACE:\e[1;35m $INTERFACE \e[0m \\"
echo -e "MAC ORIGINAL: $MAC_ORIGINAL #"
echo -e " MAC ACTUAL:\e[1;31m $MAC_ACTUAL \e[0m /"
echo "================================/"
break
fi
done
done
Otra cosa que me molestaba un poco era que con el comando ifconfig no podía cambiar ninguna interfaz que estuviese en modo monitor. Investigando un poco, encontré que con
ip link set dev eth0 address xx:xx:xx:xx:xx:xx si podía hacerlo, así que decidí sustituirlo por el ifconfig ( a ver si alguno me puede decir si he hecho bien o no)
Todo parece funcionar perfecto con él, y creía que ya tenía lista para sacar la 0.5 pero me he encontrado con un comportamiento extraño en el script.... Cuando voy a cambiar la MAC ( o restaurarla), solo me cambia/restaura 1 por cada vez que ejecuto el script. Es decir, tengo que ejecutar el script X veces para X interfaces... (cosa que no pasa cuando ejecuto la opción -m (macchanger)).
Me parece que los comandos que usa el script tienen que estar en distintas partes de la memoria, y no en una misma, por lo que, si no me equivoco, eso ya son cosas del C (no me hagáis mucho caso, digo muchas tonterías de vez en cuando). La verdad es que estoy en un callejón sin salida y no tengo ni idea de como puedo solucionar eso, a ver si a alguno de vosotros se os ocurre algo...
@USUARIONUEVO, en cuanto consiga solucionar esta caca, me instalo el Wifislax en el HDD y me pongo a probar el parámetro --autostart, para perfeccionarlo al máximo
Si alguno le quiere echar un ojo a la supuesta "0.5" (el codigo completo), que me avise
Salu2