33 votos

¿Cómo puedo obtener mi dirección IP pública desde la línea de comandos, si estoy detrás de un router?

Hay una manera para mí para conseguir mi público (WAN) de la dirección IP en la línea de comandos? Estoy detrás de un router (red LAN), con una dirección IP dinámica asignada por mi ISP.

He visto soluciones mediante el uso de un webservice externo (como ifconfig.me), pero quiero saber si puedo hacerlo sin un servicio externo.

24voto

Batur Puntos 11

Suponiendo que el sistema tiene 2 dispositivos ethernet, eth0 y eth1 y eth0 está conectado a la LAN, decir IPs 192.168.1.X y su eth1 dispositivo está conectado a su ISP (WAN) que vas a querer usar el siguiente ifconfig comando para obtener la IP de la WAN.

NOTA: El 1 2 maneras de asumir que se está ejecutando en contra de un equipo que tiene 2 dispositivos ethernet y que uno de ellos está conectado a su ISP (módem por cable y/o módem DSL). En este escenario, el dispositivo de red (eth1) se configura con su dirección IP en la internet (IP de la WAN).

1 de manera

                          +------------------------+
  +--------+    WAN IP    |   Computer that wants  |  LAN IP
  |Internet|--------------|     to know WAN IP     |------------
  +--------+  54.234.1.33 | +------+      +------+ | 192.168.1.1
                          +-| eth1 |------| eth0 |-+
                            +------+      +------+

% ifconfig eth1 | awk '/inet / { print $2 }' | sed -e s/addr://
54.234.1.33

También puede utilizar el ip comando.

% ip addr show eth1|grep inet|awk '{print $2}' | sed 's#/.*##'
54.234.1.33

2º manera

Si usted necesita para encontrar este fuera de un sistema que se encuentra sólo en la LAN usted puede configurar una contraseña de menos de clave ssh y agregar a una cuenta en la red LAN de la máquina para que pudiera acceder de manera remota al sistema con el acceso a WAN como así.

                                                            +----------------+
  +--------+    WAN IP      +-------------+      LAN IP     | Computer that  |
  |Internet|----------------|remote-server|-----------------| wants to know  |
  +--------+  54.234.1.33  +----+-----+----+  192.168.1.x  +----+ WAN IP     |
                           |eth1|     |eth0|               |eth0|------------+
                           +----+     +----+               +----+

% ssh ruser1@remote-server "ifconfig eth1 | awk '/inet / { print \$2 }' | sed -e s/addr://"
54.234.1.33

3 de manera

Si usted es incapaz de ssh en el cuadro que tiene acceso a WAN y estás utilizando un router/switch como un Linksys o Netgear cuadro. Usted puede ser capaz de obtener la IP de ese dispositivo a través de un estado HTTP de la página. He hecho esto en el pasado, algo similar a lo que se describe en este whatismyip.com post del foro.

                                                               192.168.1.2
                                                            +----------------+
  +--------+    WAN IP      +-------------+      LAN IP     | Computer that  |
  |Internet|----------------|router/switch|-----------------| wants to know  |
  +--------+  54.234.1.33   +-------------+   192.168.1.x  +----+ WAN IP     |
                              192.168.1.1                  |eth0|------------+
                                                           +----+

# something like this....

% wget -q -O - http://<username>:<password>@192.168.1.1/Status_Router.asp | grep "ipaddress" | cut -d" " -f2

NOTA: Este enfoque es altamente dependiente en la que router/switch que tiene, si es un Linksys, Netgear, etc. de la marca. Cada uno tendrá su propia página única con la IP de la WAN.

Camino 4

El envío de una consulta en un sitio de internet externo que informe de su dirección IP de la WAN.

NOTA: soy consciente de que la pregunta original, mencionó que ellos estaban buscando alternativas a este enfoque, pero me voy a poner aquí para que esta respuesta cubre todas las bases.

                                                        +---------------+
  +-------------+   +--------+   +------+     LAN IP    | Computer that |
  |whatsmyip.com|---|Internet|---|router|---------------| wants to know |
  +-------------+   +--------+   +------+  192.168.1.x +----+ WAN IP    |
you're 54.234.1.33                                     |eth0|-----------+
                                                       +----+

# 1st server
% wget -qO - http://cfaj.freeshell.org/ipaddr.cgi
54.234.1.33

# 2nd server
% wget -qO - icanhazip.com
54.234.1.33

# 3rd server
% curl -s checkip.dyndns.org | sed 's#.*Address: \(.*\)</b.*#\1#'
54.234.1.33

Información adicional está disponible aquí: HOWTO: Compruebe que la Dirección IP externa de la línea de comandos

9voto

Rory Puntos 386

Si su sistema tiene curl instalado (la mayoría lo hacen), puede utilizar

curl ifconfig.me

7voto

daeme Puntos 41

Cuando estás detrás de un Router NAT con UPNP, puede utilizar miniupnpc para detectar la dirección ip de la wan:

# debian/ubuntu setup: 
# sudo apt-get install miniupnpc

# get WAN IP address from UPNP router:
upnpc -s | grep ^ExternalIPAddress | cut -c21-

Usted podría utilizar en un script por ejemplo, para el cron como:

#!/bin/bash
#
# In this example, lynx is used as http client. you could also use something else
# like wget etc.
# debian/ubuntu lynx setup: 
#
# apt-get install lynx
#

EXTIP=`upnpc -s | grep ^ExternalIPAddress | cut -c21-`
DDNSURL="http://your-ddns-service.com/update/my/ip/to/$EXTIP"
TFILE=/tmp/.WAN_IP
if [ -f $TFILE ]; then
        OXTIP=`head -1 $TFILE`
else
        touch $TFILE
        OXTIP="NULL"
fi
if [ "$EXTIP" != "$OXTIP" ]; then
        mv $TFILE "$TFILE~"
        echo "$EXTIP" > $TFILE
        lynx -source $DDNSURL > /dev/null
        echo "================================"
        date
        echo "WAN_IP = $EXTIP"
fi

3voto

Phill Healey Puntos 126

Recuperar información de tu router a través de ssh o curl.

Puedo usar curl para pedir dyndns para mi ip pública, pero la orden no parece aplicable para la derecha?

curl http://checkip.dyndns.org 2> /dev/null| perl -pe 's,.*Address: (\d+\.\d+\.\d+\.\d+).*,$1,'

2voto

Pierre Carrier Puntos 566

Desafortunadamente, no hay manera de detectar los mecanismos como el NAT que no implican contacto con un servicio remoto. NAT por su naturaleza, es completamente transparente para el usuario, además de rota servicios, y no hay ningún protocolo estándar para NAT descubrimiento.

Pero en cuanto a los servicios exteriores se refiere, tengo que sugieren que la rápida y sencilla escribí, ident.a mí, que se puede utilizar tanto para IPv4 e IPv6; por su forma más simple se puede utilizar curl ident.me y el total de la API está documentado en http://api.ident.me/

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: