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


37

¿Hay alguna manera de obtener mi dirección IP pública (WAN) en la línea de comando? Estoy detrás de un enrutador (red LAN), con una dirección IP dinámica asignada por mi ISP.

He visto soluciones utilizando un servicio web externo (como ifconfig.me ), pero quiero saber si puedo hacerlo sin un servicio externo.


¿Puede agregar más detalles sobre la configuración de su red? ¿Está detrás de un enrutador / conmutador que TIENE acceso a Internet y está tratando de determinar la dirección IP de WAN que el enrutador / conmutador obtiene de su ISP?
slm

@slm Estoy detrás de un enrutador y una hormiga para averiguar la IP asignada al enrutador por el ISP
user61954

Vea la tercera forma que acabo de agregar a mi respuesta. Querrá ver si hay una manera de obtener su IP WAN de su enrutador. ¿De qué marca / modelo es el enrutador?
slm

Tienes que consultar algún tipo de servicio externo. En términos generales, una computadora no tiene idea de qué dirección IP otras computadoras verán sus conexiones.
David Schwartz

Respuestas:


27

Suponiendo que el sistema dispone de 2 dispositivos de Ethernet, eth0y eth1, y eth0está conectado a la red LAN, por ejemplo IPs 192.168.1.X. y su eth1dispositivo está conectado a su proveedor de Internet (WAN) que va a querer utilizar la siguienteifconfig comando para obtener su IP para el lado WAN.

NOTA: Las primeras 2 formas suponen que las está ejecutando contra una computadora que tiene 2 dispositivos ethernet y que una de ellas está conectada a su ISP (módem por cable y / o módem DSL). En este escenario, el dispositivo ethernet (eth1) se configurará con su dirección IP en Internet (WAN IP).

1er camino

                          +------------------------+
  +--------+    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 puedes usar el ipcomando.

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

2da forma

Si necesita averiguarlo desde un sistema que solo se encuentra en la LAN, puede configurar una clave ssh sin contraseña y agregarla a una cuenta en su máquina LAN para que pueda acceder de forma remota al sistema con el acceso WAN de esta manera.

                                                            +----------------+
  +--------+    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

3er camino

Si no puede ingresar a la caja que tiene acceso a WAN y está usando un enrutador / conmutador doméstico, como una caja de Linksys o Netgear. Es posible que pueda obtener la IP de ese dispositivo a través de una página de estado HTTP. También he hecho esto en el pasado, algo similar a lo que se describe en esta publicación del foro whatismyip.com .

                                                               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 depende en gran medida del enrutador / conmutador que tenga, ya sea una marca Linksys, Netgear, etc. Cada uno tendrá su propia página única con la IP de WAN.

4ta forma

Enviar una consulta a un sitio de Internet externo que informará su dirección IP de WAN.

NOTA: Soy consciente de que la pregunta original mencionaba que estaban buscando alternativas a este enfoque, pero lo estoy poniendo aquí para que esta respuesta cubra 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 - ipv4bot.whatismyipaddress.com
54.234.1.33

# 2nd server
% curl 'https://api.ipify.org?format=json'

{"ip":"54.234.1.33"}
% curl 'https://api.ipify.org?format=txt'
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í: CÓMO: Verifique su dirección IP externa desde la línea de comando


Tengo algo así como mi sistema se conecta a un enrutador y está conectado a la intrnet
user61954

55
Como declaró que no está conectado directamente, ninguno de los eth*dispositivos tendrá la IP WAN. A menos que su enrutador admita ssh, tiene acceso, y si está configurado, esto no funcionará. No votando a favor, pero cualquiera que intente hacer esto es consciente.
AaronLS

Vuelva a leer su pregunta. Él dice que tiene acceso a LAN, solo que no tiene acceso a Internet, elemento # 1. El ítem # 2 dice que está obteniendo una IP dinámica de su ISP, supongo que tiene otro sistema en su conexión LAN única e Internet O tiene un enrutador / conmutador doméstico con él e Internet.
slm

Votantes, intente dejar un comentario, esta respuesta es, con mucho, la más completa y, sin embargo, la gente está votando. @ user61954 incluso dijo en sus comentarios que está detrás de un enrutador, por lo que uno de los métodos que describí funcionará.
slm

Yo voté a favor. Pero la primera y la segunda forma no funcionan, solo devuelve la dirección localip. ¡Gracias!
Jared Burrows

12

Si su sistema tiene instalado curl (la mayoría lo hace), puede usar

curl ifconfig.me

Hola, gracias, esto me ayuda, solo una pregunta, ¿Cuál es el "ifconfig.me"? Conozco la función ifconfig, pero generalmente no estoy con esto. ¿Me puede dar un enlace para leerlo o explicarlo? --Actualización-- no leí la pregunta. ups
Aby W

ifconfig.me es un sitio web que le brinda su IP.
Rory

ifconfig.me no es compatible con https, por lo que podría ser falsificado. No es una buena idea usarlo para verificar si su VPN está activa.
Dan Dascalescu

9

Cuando está detrás de un enrutador NAT con UPNP, puede usar miniupnpc para detectar la dirección IP wan:

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

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

Puede usarlo en un script, por ejemplo, para 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

5

Lo más probable es que el enrutador debe proporcionar una forma de obtener la IP externa si no se debe o no se puede utilizar un servicio externo (como ya se indicó en algunas otras respuestas). Para servicios externos, en la mayoría de las otras respuestas, se utiliza un servicio web. Esta respuesta en Unix SE sugiere usar DNS en su lugar.

Por ejemplo, usando digcon OpenDNS como resolver:

dig +short myip.opendns.com @resolver1.opendns.com

+1, pero al final del día es lo mismo que usar, curl ident.meya que confiamos en un servicio específico (en myip.opendns,comun servidor DNS especial)
nhed

4

Obtenga información de su enrutador a través de ssh o curl.

Uso curl para preguntar a dyndns por mi ip pública, pero ese comando parece no ser aplicable para usted, ¿verdad?

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


2

Desafortunadamente, no hay forma de detectar mecanismos como NAT que no impliquen contactar un servicio remoto. NAT es por naturaleza completamente transparente para el usuario, además de servicios rotos, y no existe un protocolo estándar para el descubrimiento de NAT.

Pero en lo que respecta a los servicios externos, tengo que sugerir el rápido y sencillo que escribí, ident.me, que puede usar tanto para IPv4 como para IPv6; para su forma más simple que puede usar curl ident.mey la API completa está documentada en http://api.ident.me/


1

Si su enrutador admite NAT PMP (Protocolo de asignación de puertos), es posible que pueda recuperar su IP pública utilizando natpmp.

Hay una interfaz de línea de comando para la biblioteca natpmp de linux llamada natpmpc. En ubuntu, está en el paquete natpmp-utils . Mi enrutador no parece admitir natpmp, por lo que no estoy seguro de que la utilidad natpmpc le devuelva su IP pública.


0

El comando de Linux que busca es ifconfigsuponer que está conectado directamente a Internet.

Si no es así y acceder a través de servidores proxy o enrutamiento especial, la forma más fácil (como lo indican otros) es iniciar sesión / acceder a otro host y verificarlo desde allí.

Además, es posible que desee analizar esta pregunta con su administrador de sistemas de vecindario amigable.


ifconfiges obsoleto.
BatchyX

"comando traceroute, pero da la ip local del lan, 192.168.1.1". Así que supongo que hay un lan. Por lo tanto, debe haber algún tipo de enrutador / puerta de enlace / nat en alguna parte. Entonces ifconfig no dará una dirección IP pública ya que la composición de op no está directamente conectada a internet.

@BatchyX. ¿Qué sistema operativo estás ejecutando? Todos los sistemas en los que me estoy ejecutando tienen ifconfig. Fedora, CentOS, Ubuntu, etc.
slm

2
@batchx: ¿Y de dónde sacas esa información? No estoy de acuerdo contigo en eso.
mdpc

1
@sim: Porque un comando está presente no significa que no esté en desuso. Solo mira la ifconfigúltima fecha de lanzamiento. Ahora mira la ìproute2última versión. En cuanto a una fuente, consulte lartc.org/howto/lartc.iproute2.html#LARTC.IPROUTE2.WHY
BatchyX

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.