Seguridad Wireless - Wifi
Equipos y materiales => Puntos de acceso, routers, switchs y bridges => Openwrt & LEDE => Mensaje iniciado por: mazingerz80 en 22-07-2013, 13:02 (Lunes)
-
Hola,
No sé si está tratado en el foro el tema de hacer varias conexiones automáticas de redes wifi en openwrt, me gustaría poder hacerlo de forma que trate la pérdida de conexión a través de pings, y cuando haya pérdida de paquetes cambie a otra red. Un detalle curioso es que las redes cuando se cambien automáticamente deben estar en interface WAN (interface creada para la tarjeta wifi usb en modo cliente).
El caso es que tengo el magicconnect.tar que trae 2 scripts: aap y ssid.
No sé como modificar los scripts para que funcionen como he explicado más arriba.
???
Creo que es bastante interesante. ¿Alguien me echa una mano?
Muchas gracias de antemano, saludos!
-
Te refieres a que esté conectado a una red y cambie a otra o a que esté conectado siempre a ambas y utilice una u otra?
-
Te refieres a que esté conectado a una red y cambie a otra o a que esté conectado siempre a ambas y utilice una u otra?
Hola Chumpy,
Gracias por contestar.
Me refiero que sea como en windows, yo le pongo al router por ejemplo 3 redes, y que el script se encargue de tener una red operativa, escaneándola mediante pings satisfactorios, y en caso de que fallen los pings, que pase a la segunda red, si la segunda red falla también con los pings, que pase a la tercera, y después de vuelta a la primera.
Pero sólo creo una interfaz "wan", donde automáticamente el script asocia la red activa, ya que para usar una tarjeta wifi usb como cliente, necesito que sólo use una interfaz llamada "wan" como he comentado, es decir, que no use varias interfaces.
Tengo como comentaba el magicconnect.tar, el cual consta de 2 scripts: aap y ssid, expongo los scripts por si ayudan, a ver si podemos aclarar su funcionamiento, ya que de programación ando más bien escaso:
----------------------------------------------------
Script aap:
#!/usr/bin/awk -f
BEGIN {
chan=0;
essid="";
encr=0;
psk2=0;
psk=0;
i=0;
# find interface - start by finding if in sta mode
while( "uci show wireless" | getline) {
if(/mode=sta/) {
split($0,wl,".");
iface=wl[2];
}
}
close("uci show wireless")
"uci get wireless." iface ".device" | getline radio
close("uci get wireless." iface ".device")
"uci -P /var/state get wireless." iface ".ifname" | getline ifname
close("uci -P /var/state get wireless." iface ".ifname")
"uci get ssid.core.keepalive" | getline keepalive
close("uci get ssid.core.keepalive")
system("ifconfig " ifname " up")
for(;;){
while( "iwlist " ifname " scan" | getline ) {
scan[i++]=$0;
}
close("iwlist wlan0 scan")
for (j=0;j<i;j++) {
$0=scan[j];
if ($1 == "Cell" || $1 == EOF ) {
if(chan == 0) continue;
# we're at the end of a record
# process data we have and try to connect
if(psk2 == 1) crypt = "psk2";
else if (psk == 1) crypt ="psk";
else if (encr == 1) crypt = "wep";
else crypt = "none";
psk=0;
psk2=0;
encr=0;
rkey="";
# first we see if we're in blacklist
bl="0"
"uci -q get ssid.black." essid | getline bl
close("uci -q get ssid.black." essid)
if ( bl == "1" ) {
print essid " blacklisted";
continue;
}
# now we get key if we're encrypted
if ( crypt != "none" ) {
"uci -q get ssid.white." essid | getline rkey
close("uci -q get ssid.white." essid)
if ( rkey == "" ) {
print essid " is encrypted and key not in whitelist";
continue;
}
}
system("uci set wireless." radio ".channel=" channel);
system("uci set wireless." iface ".ssid=" essid);
if (crypt == "none") {
system("uci set wireless." iface ".encryption=none");
system("uci -q delete wireless." iface ".key");
}
else {
system("uci set wireless." iface ".key=" rkey);
system("uci set wireless." iface ".encryption=" crypt);
}
system("uci show wireless > /tmp/keepalive");
system("wifi up");
while(system("sleep 60; wget -q -T 30 -O /dev/null " keepalive) == 0) {
# system("ifconfig wlan0 >> /tmp/keepalive")
}
}
else {
# now test for the things we want
# channel
if (/Channel:[0-9]/) {
m=match($0,"Channel");
if (RSTART > 0) {
s=substr($0,m);
n=match(s,/[0-9]+/);
chan=substr(s,n,RLENGTH)}
continue;
}
# we don't need else as we break on successful find
if (/^ *ESSID/) {
m=match($0,"\".*\"");
if (RSTART > 0) essid=substr($0,m+1,RLENGTH-2);
continue;
}
if (/^ *Encryption key:on/) {
encr = 1;
continue;
}
if (/^ *IE: IEEE 802.11i\/WPA2/) {
psk2=1;
continue;
}
if (/^ *IE: WPA /) {
psk=1;
continue;
}
}
}
}
}
----------------------------------------------------
Script ssid:
config ssid black
option "4jwireless" "1"
option "badssid2" "1"
config ssid white
option "goodssid1" "key1"
option "goodssid2" "key2"
config ssid core
option "keepalive" "http://Your/Web/Based/Magic/Cookie"
------------------------------------------------------------------------------
Aquí explica su funcionamiento (configuración):
https://forum.openwrt.org/viewtopic.php?id=21636
Un saludo
-
El código es bastante explicativo, y echándole una ojeada al hilo que mencionas solo hay que añadir en ssid white las redes a las que quieres conectar, sin embargo parece que ha habido varias revisiones del código, no se si la que has puesto es la última, pero creo que no. Sería interesante encontrar cual es el punto más avanzado del desarrollo, para si surgen problemas no tener que repetir el trabajo.
De todas formas ¿has comprobado que no funcione?