¿Comando para determinar mi IP pública?

525

Si consulto google , puedo ver mi IP pública. ¿Hay algo en la línea de comandos de Ubuntu que me dé la misma respuesta?

    
pregunta kfmfe04 16.01.2012 - 12:50

22 respuestas

747

Si no está detrás de un enrutador, puede encontrarlo usando ifconfig .

Si se encuentra detrás de un enrutador, su computadora no sabrá la dirección IP pública ya que el enrutador realiza una traducción de la dirección de red. Puede preguntar a algún sitio web cuál es su dirección IP pública utilizando curl o wget y extraer la información que necesita de él:

curl -s checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'  

o más corto

curl ipinfo.io/ip
    
respondido por el Michael K 16.01.2012 - 12:56
363

Para encontrar la IP externa, puede usar servicios externos basados ​​en la web o usar métodos basados ​​en el sistema. El más fácil es usar el servicio externo, también las soluciones basadas en ifconfig funcionarán en su sistema solo si no está detrás de un NAT . los dos métodos se han discutido a continuación en detalle.

Encontrar IP externa utilizando servicios externos

La manera más fácil es usar un servicio externo a través de un navegador de línea de comandos o herramienta de descarga. Como wget está disponible de manera predeterminada en Ubuntu, podemos usar eso.
Para encontrar su IP, use-

$ wget -qO- http://ipecho.net/plain ; echo

Cortesía :

También puedes usar lynx (navegador) o curl en lugar de wget con variaciones menores al comando anterior, para encontrar tu IP externa.

Usar curl para encontrar el IP:

$ curl ipecho.net/plain

Para un mejor uso de salida formateada:

$ curl ipecho.net/plain ; echo

Un método más rápido (posiblemente el más rápido) con dig con OpenDNS como resolver:

  

Todas las demás respuestas aquí pasan por HTTP a un servidor remoto. Algunos de   ellos requieren el análisis de la salida, o dependen del encabezado User-Agent   para hacer que el servidor responda en texto sin formato. También cambian bastante   con frecuencia (bajar, cambiar su nombre, poner anuncios, puede cambiar   formato de salida, etc.).

     
  1. El protocolo de respuesta DNS está estandarizado (el formato seguirá siendo compatible).
  2.   
  3. Históricamente los servicios de DNS (OpenDNS, Google Public DNS, ...) tienden a sobrevivir mucho más tiempo y son más estables, escalables y generalmente se ven mejor   después de lo que sea que el nuevo servicio de cadera whatismyip.com hoy esté caliente.
  4.   
  5. (para aquellos geeks que se preocupan por la micro-optimización), este método debe ser inherentemente más rápido (solo en unos pocos micro segundos).
  6.   

Usar digir con OpenDNS como resolver:

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

111.222.333.444

Copiado de: enlace

Encontrar IP externa sin depender de servicios externos

  • Si conoce el nombre de su interfaz de red

Escriba lo siguiente en su terminal:

$ LANG=c ifconfig <interface_name> | grep "inet addr" | awk -F: '{print }' | awk '{print }'

En lo anterior, reemplace <interface_name> con el nombre de su interfaz real, por ejemplo: eth0 , eth1 , pp0 , etc ...

Ejemplo de uso:

$ LANG=c ifconfig ppp0 | grep "inet addr" | awk -F: '{print }' | awk '{print }'
111.222.333.444
  • Si no conoce el nombre de su interfaz de red

Escriba lo siguiente en su terminal (esto obtiene el nombre y la dirección IP de cada interfaz de red en su sistema):

$ LANG=c ifconfig | grep -B1 "inet addr" |awk '{ if (  == "inet" ) { print  } else if (  == "Link" ) { printf "%s:" , } }' |awk -F: '{ print  ": "  }'

Ejemplo de uso:

$ LANG=c ifconfig | grep -B1 "inet addr" |awk '{ if (  == "inet" ) { print  } else if (  == "Link" ) { printf "%s:" , } }' |awk -F: '{ print  ": "  }'
lo: 127.0.0.1
ppp0: 111.222.333.444

N.B: las salidas son indicativas y no reales.

Cortesía: enlace

ACTUALIZAR

  1. LANG=c se ha agregado a los usos basados ​​en ifconfig , por lo que siempre proporciona la salida en inglés, independientemente de la configuración regional.
respondido por el saji89 01.06.2012 - 14:10
103

Mi favorito siempre ha sido:

curl ifconfig.me

simple, fácil de escribir.

Tendrá que instalar curl primero;)

Si ifconfig.me está inactivo, pruebe icanhazip.com y / o ipecho.net

curl icanhazip.com

o

curl ipecho.net
    
respondido por el Panther 01.06.2012 - 14:41
55

icanhazip.com es mi favorito.

curl icanhazip.com

Puede solicitar IPv4 explícitamente:

curl ipv4.icanhazip.com

Si no tiene curl , puede usar wget en su lugar:

wget -qO- icanhazip.com
    
respondido por el yprez 01.06.2012 - 19:23
44

He encontrado que todo es molesto y lento, así que escribí el mío. Es simple y rápido.

Su API está en enlace

Ejemplos:

curl ident.me
curl v4.ident.me
curl v6.ident.me
    
respondido por el Pierre Carrier 03.01.2013 - 16:49
37

Puede utilizar una solicitud DNS en lugar de una solicitud HTTP para averiguar su IP pública:

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

Utiliza el servidor resolver1.opendns.com dns para resolver el mágico myip.opendns.com hostname para su dirección IP.

    
respondido por el jfs 27.02.2014 - 16:07
18

El que estoy usando es:

wget -O - -q icanhazip.com

Sí, puedes tener ip: -)

    
respondido por el jflaflamme 16.01.2012 - 15:20
16

Amazon AWS

curl http://checkip.amazonaws.com

Salida de muestra:

123.123.123.123

Me gusta porque:

  • devuelve solo el texto plano IP, nada más
  • proviene de un proveedor conocido que es poco probable que se desconecte pronto
12

Escriba esto exactamente, presione Ingrese donde se indica:

telnet ipecho.net 80 Introduzca
GET /plain HTTP/1.1 Introduzca
HOST: ipecho.net Introduzca
BROWSER: web-kit Ingrese
Ingrese

Esto envía manualmente una solicitud HTTP, que devolverá su IP en la parte inferior de un HTTP/1.1 200 OK reply

Ejemplo de salida:

$ telnet ipecho.net 80
Trying 146.255.36.1...
Connected to ipecho.net.
Escape character is '^]'.
GET /plain HTTP/1.1
HOST: ipecho.net
BROWSER: web-kit

HTTP/1.1 200 OK
Date: Tue, 02 Jul 2013 07:11:42 GMT
Server: Apache
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Cache-Control: no-cache
Pragma: no-cache
Vary: Accept-Encoding
Transfer-Encoding: chunked
Content-Type: text/html

f
111.222.333.444
0
    
respondido por el Liam 02.07.2013 - 08:38
9

Otro rápido (podría ser el más rápido, relativamente)

curl ipecho.net/plain
    
respondido por el Mohnish 31.12.2013 - 21:49
8

Para esto, se inventó STUN . Como cliente puede enviar una solicitud a un servidor STUN disponible públicamente y hacer que devuelva la dirección IP que ve. Algo así como el bajo nivel de whatismyip.com, ya que no usa HTTP ni servidores DNS inteligentemente diseñados, sino el protocolo STUN increíblemente rápido.

Usando stunclient

Si tiene stunclient instalado ( apt-get install stuntman-client en debian / ubuntu), simplemente puede hacer:

$stunclient stun.services.mozilla.com
Binding test: success
Local address: A.B.C.D:42541
Mapped address: W.X.Y.Z:42541

donde A.B.C.D es la dirección IP de su máquina en la red local y W.X.Y.Z es la dirección IP de los servidores, como los sitios web ven desde el exterior (y la que está buscando). Al usar sed , puede reducir el resultado anterior a solo una dirección IP:

stunclient stun.services.mozilla.com |
    sed -n -e "s/^Mapped address: \(.*\):.*$//p"

Sin embargo, su pregunta era cómo encontrarlo usando la línea de comando, lo que podría excluir el uso de un cliente STUN. Entonces me pregunto ...

Usando bash

Una solicitud STUN puede realizarse manualmente, enviarse a un servidor STUN externo utilizando netcat y procesarse posteriormente utilizando dd , hexdump y sed como lo siguiente:

$echo -en '\x00\x01\x00\x08\xc0\x0c\xee\x42\x7c\x20\x25\xa3\x3f\x0f\xa1\x7f\xfd\x7f\x00\x00\x00\x03\x00\x04\x00\x00\x00\x00' |
    nc -u -w 2 stun.services.mozilla.com 3478 |
    dd bs=1 count=4 skip=28 2>/dev/null |
    hexdump -e '1/1 "%u."' |
    sed 's/\.$/\n/'

El eco define una solicitud STUN binaria (0x0001 indica Solicitud de enlace) con longitud 8 (0x0008) con cookie 0xc00cee y algunas cosas pegadas de wireshark. Solo los cuatro bytes que representan la IP externa se toman de la respuesta, se limpian e imprimen.

Trabajo, pero no recomendado para uso en producción: -)

P.S. Muchos servidores STUN están disponibles ya que es una tecnología central para SIP y WebRTC. Usar uno de Mozilla debería ser seguro para la privacidad, pero también podría usar otro: lista de servidores STUN

    
respondido por el Victor Klos 09.10.2015 - 19:21
7

Tengo un servicio estúpido para esto por telnet. Algo como esto:

telnet myip.gelma.net

Your IPv4: xxx.xxx.xxx.xxx
Your IPv6: ::ffff:xxxx:xxxx

Siéntase libre de usarlo.

    
respondido por el Gelma 13.03.2014 - 13:37
4

Puedes leer una página web usando solo bash, sin curl , wget :

$ exec 3<> /dev/tcp/icanhazip.com/80 && # open connection
  echo 'GET /' >&3 &&                   # send http 0.9 request
  read -u 3 && echo $REPLY &&           # read response
  exec 3>&-                             # close fd
    
respondido por el jfs 18.09.2014 - 12:47
2

Utilice cURL con ipogre.com (se admiten IPv4 e IPv6).

IPv4

curl ipv4.ipogre.com

IPv6

curl ipv6.ipogre.com

enlace

    
respondido por el Jacob 31.12.2013 - 06:07
2

Para aquellos de nosotros con acceso de inicio de sesión a nuestros enrutadores, usar una secuencia de comandos para preguntarle al enrutador cuál es su 'dirección IP WAN es la forma más eficiente de determinar la dirección IP externa. Por ejemplo, el siguiente script de python imprime la IP externa para mi enrutador Medialink MWN-WAPR300N:

import urllib, urllib2, cookielib
import re
from subprocess import check_output as co

cookie_jar = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie_jar))
urllib2.install_opener(opener)

def get(url, values=None):
  data = None
  if values: data = urllib.urlencode(values)
  req = urllib2.Request(url, data)
  rsp = urllib2.urlopen(req)
  return rsp.read()

router = co(['ip', '-o', 'ro', 'list', '0.0.0.0/0']).split()[2]
url = "http://" + router

get(url+"/index.asp")
get(url+"/LoginCheck", dict(checkEn='0', Username='admin', Password='admin'))
page = get(url+"/system_status.asp")

for line in page.split("\n"):
  if line.startswith("wanIP = "):
    print line.split('"')[1]
    exit(1)

Tenga en cuenta que esto no es muy seguro (como en el caso de las credenciales de texto sin formato y el inicio de sesión en la mayoría de los enrutadores), y ciertamente no es portátil (debe cambiarse para cada enrutador). Sin embargo, es muy rápido y una solución perfectamente razonable en una red doméstica físicamente segura.

Para personalizar el script de otro enrutador, recomiendo usar el complemento tamperdata en firefox para determinar qué solicitudes HTTP hacer.

    
respondido por el KarlC 27.03.2014 - 04:08
2

Estos obtendrán las direcciones IP locales:

ifconfig

o para un resultado más corto:

ifconfig | grep inet

también

ip addr show

y probablemente:

hostname -I

Esto debería obtener el IP externo

wget http://smart-ip.net/myip -O - -q ; echo

N.B. Si no te importa instalar curl , esto también:

curl http://smart-ip.net/myip
    
respondido por el Wilf 27.06.2014 - 18:08
1

Si ha instalado lince en Ubuntu, escriba

lynx bot.whatismyipaddress.com
    
respondido por el Binny 09.01.2013 - 13:35
1

Muchos enrutadores domésticos pueden ser consultados por UPnP:

curl "http://fritz.box:49000/igdupnp/control/WANIPConn1" -H "Content-Type: text/xml; charset="utf-8"" -H "SoapAction:urn:schemas-upnp-org:service:WANIPConnection:1#GetExternalIPAddress" -d "<?xml version='1.0' encoding='utf-8'?> <s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'> <s:Body> <u:GetExternalIPAddress xmlns:u='urn:schemas-upnp-org:service:WANIPConnection:1' /> </s:Body> </s:Envelope>" -s

Luego, grep la dirección IP de la respuesta.

grep -Eo '\<[[:digit:]]{1,3}(\.[[:digit:]]{1,3}){3}\>'
    
respondido por el jms 18.09.2016 - 22:45
0

Si usa DD-WRT , esto funciona para mí:

curl -s 192.168.1.1 | grep "ipinfo" | awk -v FS="(IP: |</span)" '{print }'

o

curl -s -u your_ddwrt_username:your_ddwrt_password http://192.168.1.1 | grep "ipinfo" | awk -v FS="(IP: |</span)" '{print }'
  • Donde 192.168.1.1 es la dirección IP de la puerta de enlace / enrutador del enrutador DD-WRT.

  • El componente -s significa silencioso (es decir, no muestra la información de progreso del curl).

  • Debería mencionar que uso lo anterior con "DD-WRT v24-sp2 (01/04/15) std" .
respondido por el CMP 14.04.2017 - 18:14
-2

Simplemente envíe un traceroute para cualquier sitio web o servicio.

sudo traceroute -I google.com

La línea 2 siempre parece ser mi dirección IP pública después de que pasa la puerta de enlace de mi enrutador.

user@user-PC ~ $ sudo traceroute -I google.com
traceroute to google.com (173.194.46.104), 30 hops max, 60 byte packets
 1  25.0.8.1 (25.0.8.1)  230.739 ms  231.416 ms  237.819 ms
 2  199.21.149.1 (199.21.149.1)  249.136 ms  250.754 ms  253.994 ms**

Entonces, haz un comando bash.

sudo traceroute -I google.com | awk -F '[ ]' '{ if (  ="2" ) { print  } }'

Y el resultado ...

(199.21.149.1)

No creo depender de scripts PHP y el género es una buena práctica.

    
respondido por el woahguy 24.07.2015 - 18:34
-2

Un comando sin dependencias, excepto que 8.8.8.8 es un DNS de GOogle:

echo $(ip route get 8.8.8.8 | awk '{print $NF; exit}')
    
respondido por el Rolf 19.08.2015 - 09:57
-2

usa ip !

ip addr show

luego busque el adaptador correspondiente (no lo , y generalmente eth0 ), y ubique la dirección IP cerca de inet .

    
respondido por el Eliran Malka 16.08.2016 - 01:06

Lea otras preguntas en las etiquetas