Seguridad Wireless - Wifi

Equipos y materiales => Puntos de acceso, routers, switchs y bridges => Openwrt & LEDE => Mensaje iniciado por: farguis en 11-02-2014, 17:14 (Martes)

Título: Conocer Ip dinámica
Publicado por: farguis en 11-02-2014, 17:14 (Martes)
Hola, tengo una duda acerca de conocer la ip dinámica que en ese momento tengo. He visto varios foros en los cuales puedo crear un servidor DDNS o también piyar alguno "gratuito" (en este momento no se si siguen siendo) pero eso realmente no es lo que quiero hacer.

Quiero que de alguna manera, desde el mismo router, pueda descubrir cual es la ip que el ISP me ha asignado en ese momento.

He visto también algo como

CURRENT_IP=`(echo -e "GET / HTTP/1.0\n\n"; sleep 0.5) | telnet checkip.dyndns.org 80 2> /dev/null | grep Current | sed 's/^.*Current IP Address: \(.*\)<.body.*/\1/'

pero existe la conexión a un servidor externo cosa que no quiero. Alguien puede darme alguna solución?

Gracias!
Título: Re: Conocer Ip dinámica
Publicado por: Pteridium en 11-02-2014, 18:52 (Martes)
Pues mira por donde era algo que también me estaba preguntando.
Código: [Seleccionar]
wget -qO- http://ipecho.net/plainY si tienes curl instalado en el router (raro):
Código: [Seleccionar]
curl ifconfig.mePreferiblemente la primera opción.
Título: Re: Conocer Ip dinámica
Publicado por: jar229 en 11-02-2014, 19:04 (Martes)
Interesante  ;)

Lo añado a: [Índice] Hilos relevantes de OpenWrt (https://foro.seguridadwireless.net/openwrt/(indice)-hilos-relevantes-de-openwrt/)
Título: Re: Conocer Ip dinámica
Publicado por: farguis en 11-02-2014, 19:30 (Martes)
Muchas Gracias me ha ido de lujo!!  ;D ;D

He utilizado la segunda opción porque como puse, no queria conectarme a un servidor o pagina externa (caso 1). Solo he tenido que instalar el paquete curl y listo.

Gracias otra vez y un saludo.
Título: Re: Conocer Ip dinámica
Publicado por: Tki2000 en 11-02-2014, 19:58 (Martes)
A mi me ha funcionado esto y no necesito tener curl:

"3g-wan" es mi interfaz de simyo y al hacer esto me devuelve la IP que me han asignado:

Código: [Seleccionar]
ifconfig | grep 3g-wan -A 1 | grep "inet addr" | awk -F" " '{ print $2 }' | awk -F":" '{ print $2 }'
Resultado:
Código: [Seleccionar]
10.143.3.221Seguro que hay alguna forma más fácil de hacerlo, pero así a bote pronto se me ha ocurrido esta...
Título: Re: Conocer Ip dinámica
Publicado por: Pteridium en 11-02-2014, 20:48 (Martes)
A mi me ha funcionado esto y no necesito tener curl:

"3g-wan" es mi interfaz de simyo y al hacer esto me devuelve la IP que me han asignado:

Código: [Seleccionar]
ifconfig | grep 3g-wan -A 1 | grep "inet addr" | awk -F" " '{ print $2 }' | awk -F":" '{ print $2 }'
Resultado:
Código: [Seleccionar]
10.143.3.221Seguro que hay alguna forma más fácil de hacerlo, pero así a bote pronto se me ha ocurrido esta...
Sí ese comando es bueno si el router está conectado a un modem DSL o 3G,o si tiene adsl operativo, pero si está detrás de otro router el interface wan soltará algo como esto:
Código: [Seleccionar]
192.168.1.1De todas maneras ese código es un muy buen aporte.  >:(
Título: Re: Conocer Ip dinámica
Publicado por: farguis en 11-02-2014, 20:48 (Martes)
Hola Tki2000, esa opción que dices es valida pero solo si te conectas directamente a la red suministrada por el ISP (red 3g en este caso). Por ejemplo uno que se conecte a traves de un punto de acceso por ejemplo, saldrá la ip que te otorga el dhcp por ejemplo.

Gracias por contestar.
Título: Re: Conocer Ip dinámica
Publicado por: Tki2000 en 11-02-2014, 22:01 (Martes)
Muchas Gracias me ha ido de lujo!!  ;D ;D

He utilizado la segunda opción porque como puse, no queria conectarme a un servidor o pagina externa (caso 1). Solo he tenido que instalar el paquete curl y listo.

Gracias otra vez y un saludo.

Según he entendido de este post el autor no quiere conectarse a ningún sitio externo para ver su IP, pero la segunda opción que ha usado también se conecta al servidor ifconfig.me, ¿no?

La opción que yo he dado no se conecta a ningún sitio, pero es necesario que seamos el router conectado directamente al ISP.
Otra opción sería hacer un telnet/ssh al router conectado y cribar la salida de ifconfig de la misma forma que he hecho yo.
Se entiende que 3g-wan habría que sustituirlo por la interfaz que esté conectada y de la que queremos saber su IP claro.
Título: Re: Conocer Ip dinámica
Publicado por: Tki2000 en 12-02-2014, 10:37 (Miércoles)
Otra forma de averiguar la IP del router remoto sin conectarse externamente es conectándose por SSH y preguntando por los datos que queramos.

Para ello necesitamos que al hacer SSH no nos pida la contraseña y podamos ejecutar un pequeño script que nos devuelva la IP en cuestión.

Este script está realizado con la idea de que en el router que está conectado al ISP está corriendo dropbear y tenemos acceso mediante SSH a él.

La idea es subir al router principal (el que está conectado al ISP) las claves de dropbear para que no nos pida autorización cada vez que nos conectamos y correr un script en el router principal que nos devuelva la IP externa mediante ifconfig.

Nos logueamos al router secundario y en la consola tecleamos lo siguiente:

Código: [Seleccionar]
dropbearkey -y -f /etc/dropbear/dropbear_rsa_host_key > /tmp/secondary-router-key.pub
scp /tmp/secondary-router-key.pub root@192.168.6.1:/etc/dropbear/authorized_keys
ssh -i /etc/dropbear/dropbear_rsa_host_key 192.168.6.1

La primera línea nos genera la clave pública del router secundario.
Con la segunda línea, copiamos la clave al router primario diciéndole que nos autorice directamente cuando entremos por ssh. Cuando la ejecutemos nos pedirá la contraseña ssh que tengamos en el router principal.
La tercera línea nos conecta mediante ssh del router secundario al router primario diciéndole que utilice el fichero de autentificación a partir del que hemos sacado la clave
Nos debe dejar entrar en el router sin introducir la clave

Si lo anterior nos ha funcionado, tecleamos exit para salir del router principal y nos quedamos en el shell del router secundario.

Ahora podemos teclear o poner en un script la siguiente línea que nos dará la IP externa del router principal al que nos conectamos por SSH:

Código: [Seleccionar]
ssh -i /etc/dropbear/dropbear_rsa_host_key 192.168.6.1 ifconfig | grep 3g-wan -A 1 | grep "inet addr" | awk -F" " '{ print $2 }' | awk -F":" '{ print $2 }'
Cambiar 192.168.6.1 por la dirección del router principal, root por el nombre del usuario que corresponda y 3g-wan por el nombre del interfaz conectado al exterior.
Título: Re: Conocer Ip dinámica
Publicado por: farguis en 12-02-2014, 17:17 (Miércoles)
Tki2000 tienes razon ifconfig.me es un servidor externo, con ese nombre pensaba que era un archivo  ^-^ jajaj. Pues la verdad que entonces no me sirve esa solución (con lo bonita que parecia). En cambio la que pones tu esta bastante bien pero claro tienes que tener en el router principal que tenga openwrt y entonces no me vale esa solución. Investigaré mas acerca de ello.
Título: Re: Conocer Ip dinámica
Publicado por: Tki2000 en 12-02-2014, 18:17 (Miércoles)
Tki2000 tienes razon ifconfig.me es un servidor externo, con ese nombre pensaba que era un archivo  ^-^ jajaj. Pues la verdad que entonces no me sirve esa solución (con lo bonita que parecia). En cambio la que pones tu esta bastante bien pero claro tienes que tener en el router principal que tenga openwrt y entonces no me vale esa solución. Investigaré mas acerca de ello.

No hace falta que tenga openwrt. El ejemplo que puse puede ser aplicable (a lo mejor con un poco de adaptación dependiendo de si los directorios coinciden o no) a cualquiera que tenga dropbear corriendo (y con bastante más adaptación si tiene otro servidor de SSH). De hecho el cribado de datos se puede hacer también de una página web. ¿Por casualidad el router del que quieres sacar la ip tiene un servidor web en el que aparezca la ip externa en alguna página? Por ejemplo, en un Belkin al que me conecto, al acceder a http://192.168.2.1 me aparece una página en la que se encuentra la IP externa que le han dado por ADSL. Si cribamos el código de la página podemos quedarnos con la IP igual que hacemos con lo que devuelve ifconfig. El problema es que para hacer esto hay que ver con qué contamos porque ya que no hay estándares definidos hay que hacer esto a mano para cada tipo de router.
Si quieres me lo mandas por privado, porque aparecerán datos que no se puedan publicar, e intento hacer un filtro para averiguar la IP de tu router y publico el código aquí.
Título: Re: Conocer Ip dinámica
Publicado por: gos en 12-02-2014, 20:51 (Miércoles)
Como comentan mas arriba peinando la web del router se puede sacar, especificando el usuario y password de acceso a la web en el curl con -u.
Como adicto al bash y los pipes que soy no me he podido resistir de probar. Por ejemplo podria ser:

Código: [Seleccionar]
curl -s -u vodafone:vodafone http://192.168.0.1/es_ES/diagnostic.html | grep 'var sInfoWanIp = ' | tr -s "=' " '\t' | cut -f 2

Esto devuelve la ip externa, aunque seguramente se tendra que adaptar segun el router.  
En mi caso el usuario y password para acceder seria vodafone:vodafone (robusto password que acostumbra a usar una teleco que ahora no recuerdo).  Y la pagina donde aparece la ip externa es diagnostic.html
La parte final dependera del router tambien.
Título: Re: Conocer Ip dinámica
Publicado por: gos en 12-02-2014, 20:58 (Miércoles)

Código: [Seleccionar]
ifconfig | grep 3g-wan -A 1 | grep "inet addr" | awk -F" " '{ print $2 }' | awk -F":" '{ print $2 }'Resultado:
Código: [Seleccionar]
10.143.3.221

Y un poco mas simplificado: 

Código: [Seleccionar]
ifconfig 3g-wan | grep 'inet addr' | tr -s ': ' '\t' | cut -f 4
Título: Re: Conocer Ip dinámica
Publicado por: Tki2000 en 13-02-2014, 08:38 (Jueves)
Seguro que hay alguna forma más fácil de hacerlo, pero así a bote pronto se me ha ocurrido esta...

Y un poco mas simplificado: 

Código: [Seleccionar]
ifconfig 3g-wan | grep 'inet addr' | tr -s ': ' '\t' | cut -f 4

Lo que yo decía...  ;D
Título: Re: Conocer Ip dinámica
Publicado por: farguis en 13-02-2014, 10:36 (Jueves)
Ok gracias por todo. Lo que queria hacerlo era de un modo general, para simplemente darle el router a unos amigos y asi poder crear un servidor php el cual crear conexiones dinamicas, y asi crear sessiones refrescando la base de datos como si fuera un servidor ddns pero sin llegar hacerlo, simplemente utilizando sql.

Queria dejar todo atado y asi si en un futuro fallara una página (como por ejemplo ifconfig.me) no tendría que cambiar a cada uno dicha página. Simplemente por dejarlo todo bien atado. Como cada uno tiene un router distinto pues lo haré con el curl ifconfig.me.

Aun asi la idea del dropbear es muy buena. :D
Título: Re: Conocer Ip dinámica
Publicado por: Tki2000 en 13-02-2014, 12:58 (Jueves)
Podríamos resumir que para averiguar la IP externa:

Estableciendo conexión externa -->> podemos tener un método general
Sin establecer conexión externa -->> los datos a filtrar dependen de cada router
Título: Re: Conocer Ip dinámica
Publicado por: neubauten en 28-03-2014, 12:54 (Viernes)
Hola a todos,

os dejo el método que yo utilizo por si a alguien le es útil. Mi router está conectado a internet a través de una dirección privada, pasa a través del NAT de otro router con lo que no me es posible consultar la ip pública localmente. Lo que yo necesitaba era conocer el cambio de la ip pública al poco tiempo de que se produjera porque utilizo mi ordenador de forma remota habitualmente. El proceso que sigo es conectarme por ssh a mi router (sobre un puerto no estándar) y desde el router enciendo el ordenador mediante etherwake, aprovechando la funcionalidad wake-on-lan de la tarjeta de red. Una vez he encendido el ordenador ya me es posible acceder a él de forma remota y me evito tenerlo encendido contínuamente cuando no lo utilizo.

Así que necesitaba conocer el cambio de la ip pública de mi router de forma periódica y remota. Para ello utilizo el siguiente script:
Citar
root@openwrt:~# cat /mail_ip.sh
#!/bin/sh
cd /tmp/
wget http://www.biranchi.com/ip.php
mv ip.php ip.txt
if cmp -s /tmp/old.txt /tmp/ip.txt
then
echo "doo nothing"
else
echo "The files are different"
mutt -s "openwrt"  aaaaaaaaa@gmail.aaa < /tmp/ip.txt
cp /tmp/ip.txt /tmp/old.txt
fi

root@openwrt:~#

Básicamente lo que hace el script es descargar la página www.biranchi.com/ip.php y guardarla en un fichero en la carpeta tmp (así evito reescribir en la memoria flash de manera innecesaria). Después cambio el nombre al fichero y lo comparo con otro fichero, old.txt. En la primera comprobación fallará, con lo que el script me envía un correo electrónico mediante mutt a la dirección de correo aaaaaaa@gmail.aaa. Al finalizar cambio el nombre del fichero ip.txt a old.txt para consevarlo como referencia para futuras comprobaciones. Aquí está la parte útil, ejecuto este script de forma periódica añadiendo la siguiente línea a cron:

Citar
root@openwrt:~# crontab -l
*/10 * * * * /mail_ip.sh
root@openwrt:~#

El script comprueba cada 10 minutos si se ha cambiado la ip pública de mi router y sólo en el caso de que sea así me envía un correo electrónico para notificarlo. Se puede variar el tiempo para hacerlo en el periodo que cada uno necesite. En mi caso lo normal es que no se produzcan cambios en semanas, pero me resulta más práctico que en el caso de que se produzca saberlo casi de forma inmediata. Además el script apenas supone ninguna carga para el router.

Para que sea posible el envío del correo es necesario tener instalado mutt y msmtp y libncurses. Yo añado el siguiente fichero en la carpeta /root para evitar que se genere un registro local de los mail enviados (escribe en la memoria flash igualmente):

Citar
root@openwrt:~# cat .muttrc
set realname="AAAAAAA"
set copy = no
root@openwrt:~#

Y también es necesario configurar msmtp con los datos del servidor de correo y la cuenta que se utilizará (en mi caso es de gmail) para hacer el envío de correos:

Citar
root@openwrt:~# cat /etc/msmtprc
# Example for a system wide configuration file

# A system wide configuration file is optional.
# If it exists, it usually defines a default account.
# This allows msmtp to be used like /usr/sbin/sendmail.
# The SMTP smarthost.
# Construct envelope-from addresses of the form "user@oursite.example".
#auto_from on
#maildomain oursite.example

# Use TLS.
#tls on
#tls_trust_file /etc/ssl/certs/ca-certificates.crt

# Syslog logging with facility LOG_MAIL instead of the default LOG_USER.


account default

host smtp.gmail.com
port 587
auth on
user aaaaah@aaaaa.com
password XXXXXXXXXX

auto_from off
from aaaaaaaa@gmail.aaa

tls on
tls_starttls on
tls_certcheck off

#logfile
#syslog LOG_MAIL
root@openwrt:~#

Espero que a alguien le sirva.

Saludos!