Seguridad Wireless - Wifi

Equipos y materiales => Puntos de acceso, routers, switchs y bridges => Openwrt & LEDE => Mensaje iniciado por: daskoud en 01-12-2016, 18:05 (Jueves)

Título: nivel de señal wifi
Publicado por: daskoud en 01-12-2016, 18:05 (Jueves)
Hola buenas a toso,

Me gustaría pedir ayuda para obtener la variable del nivel de señal de wifi, ya que necesito extraer esa variable y enviar su contenido por puerto serial a un micro controlador.
Problema es que no se utilizar el script shell y necesito un poco de ayuda para obtener esa variable y enviarla por el puerto TX.

Gracias un saludos.
Título: Re: nivel de señal wifi
Publicado por: danitool en 01-12-2016, 18:17 (Jueves)
Hace tiempo en el foro, raphik y algunos otros habíamos hecho un script para mostrar la fuerza de la señal en los leds.

Si no me equivoco para extraer el nivel de señal wifi usábamos esta línea
Código: [Seleccionar]
cat /proc/net/wireless | awk 'NR==3 {print $4}' | sed 's/\.//'
Aunque solo te interese esa línea, los scripts están colgados en la wiki
https://wiki.openwrt.org/doc/howto/led.wifi.meter
Título: Re: nivel de señal wifi
Publicado por: daskoud en 01-12-2016, 18:21 (Jueves)
perdon por preguntarte esto, no se utilizar script solo utilizo lenguaje C.
Como podria guardar lo que recibo por esa linea en una variable para luego poder utilizara con un echo para enviarlo en un pin.
Y otra cosa lo que recibo por esa linea que tipo de dato es (caracteres, numeos,..)

Gracias por responder.
Título: Re: nivel de señal wifi
Publicado por: danitool en 01-12-2016, 18:31 (Jueves)
perdon por preguntarte esto, no se utilizar script solo utilizo lenguaje C.
Como podria guardar lo que recibo por esa linea en una variable para luego poder utilizara con un echo para enviarlo en un pin.
Y otra cosa lo que recibo por esa linea que tipo de dato es (caracteres, numeos,..)

Gracias por responder.

lo que obtienes de esa línea es un número negativo, el RSSI (Received Signal Strength Indicator)
algo tal que así
Código: [Seleccionar]
-71Supongo que podrías hacer lo mismo en lenguaje C, accediendo mediante un file descriptor a /proc/net/wireless y mediante lenguaje C extraer el RSSI.

O bien otra opción sería combinar script y código C, con un script hacer un loop usando la línea con cat de modo que envíe el RSSI a un archivo temporal /tmp/RSSI , y en tu código escrito en C obtener el valor de ahí directamente

Título: Re: nivel de señal wifi
Publicado por: daskoud en 01-12-2016, 18:38 (Jueves)
La verdad pensaba hacer algo similar, es decir crear un script que haga un loop así cada cierto tiempo envía por echo la variable al puerto de serie del router hacia el microcontrolador. (Una descripción muy superficial pero luego ya surgirán los Problemas  ;D).

Pero me han enseñado este código :
 
Código: [Seleccionar]
$(cat /proc/net/wireless | awk 'NR==3 {printf "%0.0f %% \n", $3/70*100}')
y este otro que me has pasado:

Código: [Seleccionar]
cat /proc/net/wireless | awk 'NR==3 {print $4}' | sed 's/\.//'
hay alguna diferencia importante??
Título: Re: nivel de señal wifi
Publicado por: danitool en 01-12-2016, 18:55 (Jueves)
Código: [Seleccionar]
$(cat /proc/net/wireless | awk 'NR==3 {printf "%0.0f %% \n", $3/70*100}')
parece más económico ya que no usa sed, aunque ignoro si devuelve lo mismo
Título: Re: nivel de señal wifi
Publicado por: Ficht en 01-12-2016, 19:09 (Jueves)
Código: [Seleccionar]
$(cat /proc/net/wireless | awk 'NR==3 {printf "%0.0f %% \n", $3/70*100}')
parece más económico ya que no usa sed, aunque ignoro si devuelve lo mismo

dvuelve esto
Código: [Seleccionar]
$(cat /proc/net/wireless | awk 'NR==3 {printf "%0.0f %% \n", $3/70*100}')

-ash: 64: not found

y..
Código: [Seleccionar]
cat /proc/net/wireless | awk 'NR==3 {print $4}' | sed 's/\.//'

-65
Título: Re: nivel de señal wifi
Publicado por: daskoud en 01-12-2016, 23:02 (Jueves)
Vaya... :-\

Me parece que tendré que aprender a manejar el bash shell script de linux para poder aprovechar y entender a fondo los router con firmware openwrt.


Ficht si utilizas este codigo:
Código: [Seleccionar]
cat /proc/net/wireless | awk 'NR==3 {printf "%0.0f %% \n", $3/70*100}'te da la señal wifi en porcentaje
Título: Re: nivel de señal wifi
Publicado por: Ficht en 01-12-2016, 23:48 (Jueves)
Vaya... :-\

Me parece que tendré que aprender a manejar el bash shell script de linux para poder aprovechar y entender a fondo los router con firmware openwrt.


Ficht si utilizas este codigo:
Código: [Seleccionar]
cat /proc/net/wireless | awk 'NR==3 {printf "%0.0f %% \n", $3/70*100}'te da la señal wifi en porcentaje

Sí, en efecto.

Código: [Seleccionar]
~# cat /proc/net/wireless | awk 'NR==3 {printf "%0.0f %% \n", $3/70*100}'

64 %
Título: Re: nivel de señal wifi
Publicado por: raphik en 01-12-2016, 23:49 (Jueves)
El nivel de señal está en el archivo cat /proc/net/wireless, que se puede leer con el comando "cat":

Código: [Seleccionar]
root@OpenWrt:~# cat /proc/net/wireless
Inter-| sta-|   Quality        |   Discarded packets               | Missed | WE
 face | tus | link level noise |  nwid  crypt   frag  retry   misc | beacon | 22
 wlan0: 0000   40.  -76.  -256        0      0      0   1784      3        0

El resto del código ( awk 'NR==3 {printf "%0.0f %% \n", $3/70*100}' ) sirve para extraer el valor que interesa, que en el caso de arriba es 40, aplicarle un factor de corrección y expresarlo porcentualmente. Aplicando el que aquí se propone, tendríamos que el nivel de señal de mi router es del 40/70*100 = 57 %.

Compilar un programa en C para OpenWrt no es tarea baladí. Por aquí ya lo hemos intentado y, al menos a mí, no me ha dado buenos resultados. Mejor Lua o el propio Bash. Si te apetece, pásate por el hilo https://foro.seguridadwireless.net/openwrt/base-practica-de-desarrollo/.

Saludos.
Título: Re: nivel de señal wifi
Publicado por: daskoud en 02-12-2016, 00:12 (Viernes)
Gracias raphik,

he estado toqueteando el comando y si se cumple lo que dices, pero me he fijado que el valor de noise nunca cambia esto es normal?
Título: Re: nivel de señal wifi
Publicado por: raphik en 03-12-2016, 14:11 (Sábado)
No sé si tu router calcula de verdad el valor noise o se lo está inventando.

Bueno, a tu proyecto sólo le queda sacar el dato por puerto serie. En OpenWrt (como en Linux), para escribir en el puerto serie se utiliza un fichero especial.

Para enviar el contenido de una variable a puerto serie:
Código: [Seleccionar]
echo $mi_variable > /dev/ttyS0
Saludos.
Título: Re: nivel de señal wifi
Publicado por: daskoud en 03-12-2016, 18:29 (Sábado)
existe alguna pagina que te muestre mas comandos de este tipo, como por ejemplo hacer un scan de ap mediante script ?
Título: Re: nivel de señal wifi
Publicado por: Tki2000 en 04-12-2016, 07:55 (Domingo)
existe alguna pagina que te muestre mas comandos de este tipo, como por ejemplo hacer un scan de ap mediante script ?

Muestra un listado de las wifis internas del router:
Código: [Seleccionar]
iw devEn mi caso devuelve wlan0 y wlan1.

Escanea redes con una de las wifis anteriormente devueltas:
Código: [Seleccionar]
iw wlan1 scan
Busca información sobre el comando iw en linux y te dará más resultados de cómo usarlo.
Sobre scripts ya prefritos, para usarlos, puede que te encuentres alguno, del que puedas aprovechar algo, porque cada script está adaptado a las necesidades del que lo hace. Depende de las necesidades que tú tengas.
Título: Re: nivel de señal wifi
Publicado por: raphik en 04-12-2016, 10:56 (Domingo)
existe alguna pagina que te muestre mas comandos de este tipo ... ?

Claro que existe. Busca comandos linux en Internet y verás... Pero ten en cuenta que OpenWrt es un Linux para máquinas con escasos recursos y no todos los comandos de Linux funcionan en OpenWrt.

hacer un scan de AP ...

Como dice Tki2000, lo primero es averiguar el nombre de la wifi interna (generalmente es wlan0):
Código: [Seleccionar]
iw dev
Para escanear los AP y obtener un listado legible y ordenado por nivel de señal:
Código: [Seleccionar]
iw dev wlan0 scan | egrep "signal|SSID" | sed -e "s/\tsignal: //" -e "s/\tSSID: //" | awk '{ORS = (NR % 2 == 0)? "\n" : " "; print}' | sort
Saludos.
Título: Re: nivel de señal wifi
Publicado por: danitool en 04-12-2016, 11:20 (Domingo)
creo que iwinfo usa las mismas librerías que Luci para obtener información del wifi, así que devería devolver lo mismo que Luci devuelve en la interfaz web.
Título: Re: nivel de señal wifi
Publicado por: daskoud en 04-12-2016, 13:33 (Domingo)
La verdad muchas gracias desde que he abierto este tema he aprendido bastante incluso ya me puedo mover por shell script de putty ;D , Ademas todo ese código proporcionado me ha servido y lo tengo funcionando.

Abro otro post para otras dudas ya que veo que me salgo del tema.

Gracias.