Test Foro de elhacker.net SMF 2.1

Programación => Scripting => Mensaje iniciado por: lagranladilla en 26 Junio 2013, 22:36 PM

Título: [BASH] Script que compruebe si wlan1 esta conectada
Publicado por: lagranladilla en 26 Junio 2013, 22:36 PM
Hola!
hacia mucho tiempo que no realizava un Script en bash y ahora quiero realizar algo muy sencillo pero que no acabo de encontrarle solucion!.

La idea seria poner un script al inicio del sistema que compruebe si mi tarjeta wifi (wlan1), q va por USB y es externa esta conectada al ordenador.
En el caso de que lo este se le cambiaria la MAC:


#!/bin/bash

UP=$(ifconfig | grep -o 'wlan1')

if ["$UP"="wlan!"]; then
      ifconfig wlan1 down
      macchanger -A wlan1 
      ifconfig wlan1 up
fi


Me da error en la linea donde llamo al if, me dice lo siguiente:

[wlan1=wlan1]: orden no encontrada

Creo que estoy haciendo algo mal... si wlan1 esta connectada entonces UP devuelve wlan1 no?

creo que la estoy liando y deberia ser mucho mas sencillo

Gracias de antemanooo!!
Título: Re: [BASH] Script que compruebe si wlan1 esta conectada
Publicado por: -- KiLiaN -- en 26 Junio 2013, 22:54 PM
Prueba asi, en bash los espacios en blanco cuentan mucho.

Código (bash) [Seleccionar]
#!/bin/bash

UP=$(sudo ifconfig | grep -o 'eth1')
echo $UP
if [ $UP = eth1 ]; then
     ifconfig wlan1 down
      macchanger -A wlan1 
      ifconfig wlan1 up
fi
Título: Re: [BASH] Script que compruebe si wlan1 esta conectada
Publicado por: lagranladilla en 26 Junio 2013, 23:33 PM
Bien! era eso!!  ;-)

Ahora el script se ejecuta pero a la hora de cambiar la MAC, la consola devuelve:


Permanent MAC: 48:02:##:##:##:## (unknown)
Current   MAC: 48:02:##:##:##:## (unknown)
ERROR: Can't change MAC: interface up or not permission: Invalid argument


He intentado cambiar la MAC de la interficie realizando los comandos uno a uno como sudo a traves del terminal y me da el mismo error... A que se puede deber?? Podria ser alguna clase de incompatibilidad del Macchanger?? yo nunca he oido que puda acurrir...

pd: (las "#" las pongo yo, en el ordenador me aparece la MAC correctamente  ;))
Título: Re: [BASH] Script que compruebe si wlan1 esta conectada
Publicado por: -- KiLiaN -- en 26 Junio 2013, 23:41 PM
Lo ejecutas con sudo?
Título: Re: [BASH] Script que compruebe si wlan1 esta conectada
Publicado por: lagranladilla en 26 Junio 2013, 23:45 PM
Si!

esta en /home/"user"/Escritorio y se llama S99mac ya que luego pensaba ponerlo en la carpeta /etc/rc2.d

lo ejecuto como sudo ./S99mac

:S
Título: Re: [BASH] Script que compruebe si wlan1 esta conectada
Publicado por: lagranladilla en 27 Junio 2013, 00:42 AM
tambien si escribo, dice:

sudo ifconfig wlan1 hw ether AA:AA:AA:AA:AA:AA
SIOCSIFHWADDR: Argumento inválido


con el wlan0 me funciona tanto el script como los comandos.. La tarjeta wlan1 es  nueva, es una wifisky con un chipset ralink 3070
Título: Re: [BASH] Script que compruebe si wlan1 esta conectada
Publicado por: lagranladilla en 27 Junio 2013, 13:06 PM
bien, finalmente probando con otra entena (wisacom con chipset realtek 8187L), el script me funciona perfectamente con lo que deduzco que el problema viene del chipset o de la misma antena... He probado tambien con otros sistemas (wifislax, kali linux...) y el problema persiste.

Dejo el script final por si alguien quisiera usarlo:

Código (bash) [Seleccionar]
#!/bin/bash

# wlan0 & eth0

ifconfig eth0 down
ifconfig wlan0 down
macchanger -A eth0
macchanger -A wlan0
ifconfig eth0 up
ifconfig wlan0 up

# wlan1 y 2, dispositivos externos (si existe)

UP=$(ifconfig | grep -o 'wlan1')
UP2=$(ifconfig | grep -o 'wlan2')

if [ "$UP" = wlan1 ]; then

ifconfig wlan1 down
macchanger -A wlan1
ifconfig wlan1 up
fi

if [ "$UP2" = wlan2 ]; then

ifconfig wlan2 down
macchanger -A wlan2
ifconfig wlan2 up
fi
#fin del script


Para poner el Script al inicio de sessión uno de los metodos seria copiarlo en la carpeta /etc/rc2.d y nombrarlo S99mac (con permisos de ejecucion).

salud!
Título: Re: [BASH] Script que compruebe si wlan1 esta conectada
Publicado por: -Myx- en 28 Junio 2013, 04:57 AM
Otra forma de hacer lo mismo:

Código (bash) [Seleccionar]

#!/bin/bash
for interface in /sys/class/net/*; do
    [[ $interface = 'lo' ]] && continue
    ifconfig "$interface" down
    macchanger -A "$interface"
    ifconfig "$interface" up
done


Tambien se puede jugar con udev para hacer lo mismo...creo

http://www.reactivated.net/writing_udev_rules.html