Necesito encontrar mi dirección IP externa de un script de shell. En este momento uso esta función:
myip () {
lwp-request -o text checkip.dyndns.org | awk '{ print $NF }'
}
Pero depende perl-libwww
, perl-html-format
, perl-html-tree
instalado. ¿De qué otras formas puedo obtener mi IP externa?
linux
shell-script
ip
Eugene Yarmash
fuente
fuente
Respuestas:
Recomiendo obtenerlo directamente de un servidor DNS.
La mayoría de las otras respuestas a continuación implican pasar por HTTP a un servidor remoto. Algunos de ellos requirieron el análisis de la salida, o se basaron en el encabezado User-Agent para que el servidor respondiera en texto plano. Esos cambian con bastante frecuencia (baja, cambia su nombre, publica anuncios, puede cambiar el formato de salida, etc.).
Utilizando
dig
con OpenDNS como solucionador:Quizás lo alias en tu,
bashrc
así que es fácil de recordarResponde con una dirección IP simple:
Sintaxis
(Abreviado de https://ss64.com/bash/dig.html ) :
El
ANY
tipo de consulta devuelve un registro AAAA o A. Para preferir específicamente la conexión IPv4 o IPv6, use las opciones-4
o en-6
consecuencia.Para requerir que la respuesta sea una dirección IPv4, reemplace CUALQUIERA con
A
; para IPv6, reemplácelo con.AAAA
Tenga en cuenta que solo puede devolver la dirección utilizada para la conexión. Por ejemplo, cuando se conecta a través de IPv6, no puede devolver la dirección A.Servidores alternativos y ejemplos
Además de OpenDNS, hay servicios DNS similares proporcionados por Akamai y Google:
Ejemplo de alias que solicita específicamente una dirección IPv4:
Y para IPv6:
Solución de problemas
Si el comando no funciona por alguna razón, puede haber un problema con el proveedor ascendente, la herramienta de línea de comando u otra cosa. Para ayudar a comprender por qué no funciona, ejecute el comando sin la
+short
opción de revelar los detalles de la consulta DNS. Por ejemplo:fuente
myip.opendns.com
en Google Public DNS?curl http://canhazip.com
. Ver askubuntu.com/a/427092/2273NOTA: Se trata de una dirección IP externa (la que ven los servidores en Internet cuando se conecta a ellos). Si desea una dirección IP interna (la que su computadora está utilizando para las conexiones, que puede ser diferente), vea esto contestar .
TL; DR - Métodos más rápidos en 2015
El método más rápido usando DNS:
o usando externalip :
El más rápido usando HTTP:
o usando externalip:
El más rápido usando HTTPS con un certificado válido:
o usando externalip:
Usando telnet:
Con
nc
comando:o usando externalip:
Con
telnet
comando:Usando FTP:
o usando externalip:
Todo lo anterior se puede ejecutar usando mi script externalip como:
Ahora una larga historia ...
Hay muchas opciones de diferentes servidores que proporcionan la IP externa, especialmente a través de HTTP publicado aquí o en otro lugar.
Hice un punto de referencia para ver si alguno de ellos es mejor que los demás y los resultados me sorprendieron. Por ejemplo, uno de los ifconfig.me más recomendados fue casi siempre el más lento para mí, a veces me llevó muchos segundos responder. Muchos no funcionan a través de HTTPS, o funcionan pero tienen certificados no válidos. Algunos tienen tiempos de respuesta muy inconsistentes.
Puntos de referencia
HTTP y HTTPS
Esta es la fuente de mi script de referencia externa que utilicé:
Puede ejecutarlo usted mismo para ver qué servicios mencionados aquí vale la pena usar:
Mis resultados que obtuve el 2015-04-03 de Varsovia: se han cambiado las direcciones para proteger a los inocentes:
Mejores tiempos de respuesta http:
Mejores tiempos de respuesta https:
(Nota: hay algunas respuestas rápidas con contenido vacío, no válidas).
Mejores tiempos promedio de ping:
Aquí están los resultados que obtuve el 03/04/2015 de Amsterdam:
Mejores tiempos de respuesta http:
Mejores tiempos de respuesta https:
Mejores tiempos promedio de ping:
(Los pings 999999 significan una pérdida de paquetes del 100%).
DNS
A modo de comparación, aquí hay momentos que otros métodos toman, probados el 16/06/2015 en Varsovia y Amsterdam.
Utilizando:
generalmente toma (tiempo real del reloj de pared) aproximadamente:
En realidad, hay cuatro resolvers que se pueden usar de esta manera:
Todos dan los mismos tiempos de respuesta en Varsovia y Ámsterdam, pero este puede no ser el caso en otros lugares.
Con 208.67.222.222, la IP de resolver1.opendns.com en lugar de su nombre de dominio es más rápida:
pero puede no funcionar en el futuro si la IP cambia alguna vez (aunque puede ser poco probable para un resolutor DNS bien conocido; tal vez debería usar la IP en mi script de externalip , por favor comente).
Telnet
Telnet con
nc
otelnet
comando (ver arriba) generalmente toma:(No hay una diferencia notable entre los comandos
nc
ytelnet
).FTP
Nombres de dominio
Todos los métodos serán más rápidos (especialmente cuando se ejecutan por primera vez) cuando se usarán direcciones IP en lugar de los nombres de dominio de los servicios prestados (excepto con HTTP que puede usar servidores virtuales basados en host y no funcionar con IP desnuda) no probado) pero dejará de funcionar cuando los servicios cambien la dirección IP, por lo que puede ser más rápido pero menos a prueba de futuro.
Comentarios
Si ve algunos resultados interesantes de su ubicación, o si cree que se deberían recomendar algunos otros hosts en lugar de los que he elegido, publique un comentario. Si falta algún servicio importante, comente o publique un problema en GitHub. Me gustaría mantener esta publicación actualizada con una selección actual de los mejores servicios.
fuente
myip.opendns.com
método DNS como en la respuesta de Krinkle ? Actualmente parece que es ganador por defecto debido a que no conoce a ningún otro proveedor para este método, pero aún sería útil compararlo con los otros métodos.dig +short myip.opendns.com @resolver1.opendns.com
(36.86.63.180),dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short
(118.98.115.34) ycurl http://canhazip.com
(36.71.64.71). ¿Cómo puedo decidir cuál es el correcto?Sitio reemplazado por uno holandés en funcionamiento.
fuente
-s
opción realmente necesaria en este caso? Intenté con / sin él en mi fedora 15 - bash 4.2.10 (1) y funcionó en ambos sentidos.whatismyip.com
ha eliminado el servicio gratuito para verificar la IP externa. Entonces, me temo que esto ya no es correcto.icanhazip.com
todavía funciona.Desde whatsmyip.org e ifconfig.me ya se han mencionado:
fuente
curl
soluciones (aunque válidas) aún dependen de una biblioteca externa (libcurl
).Puede usar ifconfig.me como alternativa a whatismyip.org.
También ifconfig.me tiene algunas funciones adicionales. Para saber qué otra información puede recibir, visite el sitio web.
fuente
fuente
<img src='ipimg.php'/>
$ curl -s http://whatismyip.org | grep -o '\([[:digit:]]\{1,3\}\.\)\{3\}[[:digit:]]\{1,3\}'
Amazon AWS
Salida de muestra:
Me gusta porque:
fuente
Prefiero usar curlmyip.com Es tan simple como:
curl curlmyip.com
Es corto y simple de recordar.
fuente
bash
—la intención del OP—, no puede prescindir de la-s
opción mencionada en otras respuestas.-s
switch es ejecutarlo en modo silencioso, es decir. No se mostrarán mensajes de error. Entonces se trata de cómo quiere que su guión maneje los errores. El comando en sí devolverá una dirección IP de manera tan confiable como usar el-s
.O
O
O
O
O
O
O
O
O
O
O
Referencia
fuente
fuente
wget icanhazip.com
funciona.| tail -n1
parte y ver qué obtienes del proxynetcat icanhazip.com 80
. Parece que ignora$http_proxy
y amigos, porque especificar el proxy y el puerto con-x
solo resultó en un proceso de bloqueo.netcat proxy 3128 <<<$'GET http://icanhazip.com/ HTTP/1.0\n\n' | tail -n 1
para un proxy HTTP básico (suponiendo que se esté ejecutando en el puerto 3128). Sin embargo, obviamente obtendrá la dirección IP del proxy.Host:
encabezado de solicitud: el alojamiento virtual basado en nombres fue una de las principales mejoras en HTTP 1.1. Cambie la solicitud para especificar HTTP / 1.1 o elimine el encabezado Host (recomiendo el primero).Si después de leer todas estas sugerencias desea leer aún más, aquí hay una secuencia de comandos Bash posiblemente sobredimensionada.
Contiene una lista de servidores DNS y HTTP que parecen funcionar bien a partir de febrero de 2017.
Si lo ha hecho
dig
, primero prueba DNS, que es casi un orden de magnitud más rápido que los diversos servicios HTTP.Sale en la primera respuesta que recibe.
Si no tiene
dig
o si todos los servidores DNS fallaron, entonces prueba los servicios HTTP hasta que recibe una respuesta.Los servidores se enumeran alfabéticamente, pero se barajan antes de usarlos para evitar usar siempre el mismo.
Ejemplo de uso (llamé al script
myip
):Comente la
verbose
variable en la parte superior del script para evitar imprimir el servidor utilizado.Actualización: este script ahora también está en Github, donde podría actualizarlo cuando sea necesario:
https://github.com/mivk/myip
fuente
Si desea utilizar HTTPS para evitar posibles dificultades:
fuente
Aquí hay otra alternativa que depende de los hosts que el negocio resuelve en torno a la administración de IP dinámica en lugar de los sitios de "servicio público" que pueden desaparecer o cambiar de formato.
Para obtener la dirección IP en un script, simplemente haga:
Excelente para usar en el trabajo cron para verificar si la IP dinámica ha cambiado y algunas entradas de configuración deben cambiarse.
fuente
Esto siempre funciona para mí, lo uso en mi conky para obtener mi dirección IP.
fuente
amazonaws
. Es decir, si NO tiene forma de buscarlo en Google. (ni siquieralynx
)Como no confío en la conexión o en el servicio, utilizo el siguiente código, que intenta obtener la IP utilizando diferentes servicios (siéntase libre de agregar más):
Para agregar más solidez (por ejemplo, si uno de los servicios cambia su formato), puede verificar que
$IP
sea una IP válida utilizando la siguiente función :fuente
ifcfg.me admite:
IPv4 e IPv6, incluso más cosas con curl: ifcfg.me/?
fuente
nslookup
se relaciona el método con eldig
método en la respuesta de Krinkle ? Ambos usan DNS, ¿verdad? Entonces, ¿puedo pasar alguna opción paradig
que recupere el mismo registro DNS quenslookup
está haciendo aquí?dig +short . @ifcfg.me
si lo deseasEjecuté un servicio en la nube para mi familia e hice este script rápido que ejecuto
cron
todas las mañanas a las 5 porque soy barato y no compraré una IP estática.Toma la IP pública y la envía por correo electrónico a mis usuarios. Lo hice por correo electrónico en formato de hipervínculo para que mi mamá no tenga que escribir los puertos ni nada. Quizás alguien más pueda usarlo.
fuente
Esto mostrará la dirección IP actual en una ventana emergente:
fuente
He configurado un servicio que devuelve la dirección IP como JSON / XML o texto sin formato. Usted puede encontrarlos aquí
http://ipof.in/txt
La misma URL con / json y / xml también le dará otros formatos
Si desea HTTPS, puede usar las mismas URL con el prefijo https. La ventaja es que incluso si está conectado a una red wifi obtendrá la dirección pública.
Entonces un simple alias myip = "curl https://ipof.in/txt " obtendrá su IP
fuente
Alternativamente, puede usar STUN, que se inventó para responder esta pregunta de manera automatizada y se usa ampliamente en las comunicaciones de Internet, por ejemplo, SIP y WebRTC .
Usando un cliente aturdidor (en debian / ubuntu do
apt-get install stuntman-client
) simplemente haga:dónde
A.B.C.D
está la dirección IP de su máquina en la red local y dónde se encuentran losW.X.Y.Z
servidores de direcciones IP como los sitios web desde el exterior (y el que está buscando). Si lo usased
, puede reducir la salida anterior a solo una dirección IP:Para una búsqueda alternativa de STUN utilizando nada más que herramientas básicas de línea de comandos, vea mi respuesta en AskUbuntu (pensado como un ejercicio divertido, no para uso en producción).
fuente
El w3m Plaintext-Browser es ideal para la fiesta. Puede usar
grep
ytail
acortar la respuesta de la siguiente manera:fuente
Usa curl para acceder al servicio ip de shtuff.it
fuente
Usando una solicitud DNS incluso detrás de un enrutador NAT que traduce direcciones DNS, esto puede funcionar:
o, puede usar el método de solicitud HTTP en su lugar:
fuente