?>/script>'; } ?> crear varias conexiones automáticas como en windows Widgets Magazine

Autor Tema: crear varias conexiones automáticas como en windows  (Leído 3598 veces)

0 Usuarios y 1 Visitante están viendo este tema.

mazingerz80

  • Visitante
crear varias conexiones automáticas como en windows
« 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!


Chumpy

  • Visitante
Re: crear varias conexiones automáticas como en windows
« Respuesta #1 en: 22-07-2013, 19:25 (Lunes) »
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?


mazingerz80

  • Visitante
Re: crear varias conexiones automáticas como en windows
« Respuesta #2 en: 22-07-2013, 22:45 (Lunes) »
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


Chumpy

  • Visitante
Re: crear varias conexiones automáticas como en windows
« Respuesta #3 en: 23-07-2013, 01:27 (Martes) »
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?