Je dois trouver mon adresse IP externe à partir d'un script shell. Au moment où j'utilise cette fonction:
myip () {
lwp-request -o text checkip.dyndns.org | awk '{ print $NF }'
}
Mais cela dépend perl-libwww
, perl-html-format
, perl-html-tree
installé. Quels autres moyens puis-je obtenir mon adresse IP externe?
linux
shell-script
ip
Eugene Yarmash
la source
la source
Réponses:
Je recommanderais de l'obtenir directement à partir d'un serveur DNS.
La plupart des autres réponses ci-dessous impliquent toutes de passer par HTTP à un serveur distant. Certaines d'entre elles ont nécessité l'analyse syntaxique de la sortie ou ont utilisé l'en-tête User-Agent pour que le serveur réponde en texte brut. Celles-ci changent assez souvent (descendre, changer leur nom, mettre en place des annonces, changer le format de sortie, etc.).
Utiliser
dig
avec OpenDNS comme résolveur:Peut-être alias dans votre
bashrc
donc il est facile de se souvenirRépond avec une adresse IP simple:
Syntaxe
(Abréviation de https://ss64.com/bash/dig.html ) :
Le
ANY
type de requête renvoie un enregistrement AAAA ou A. Pour préférer une connexion IPv4 ou IPv6 spécifiquement, utilisez les options-4
ou-6
en conséquence.Pour que la réponse soit une adresse IPv4, remplacez ANY par
A
; pour IPv6, remplacez-le parAAAA
.Notez qu'il ne peut renvoyer que l'adresse utilisée pour la connexion. Par exemple, lors de la connexion sur IPv6, il ne peut pas renvoyer l'adresse A.Serveurs alternatifs et exemples
Outre OpenDNS, Akamai et Google proposent des services DNS similaires:
Exemple d'alias qui demande spécifiquement une adresse IPv4:
Et pour IPv6:
Dépannage
Si la commande ne fonctionne pas pour une raison quelconque, il peut y avoir un problème avec le fournisseur en amont, l'outil de ligne de commande ou autre chose. Pour aider à comprendre pourquoi cela ne fonctionne pas, exécutez la commande sans
+short
pouvoir révéler les détails de la requête DNS. Par exemple:la source
myip.opendns.com
DNS public Googles?curl http://canhazip.com
. Voir le site askubuntu.com/a/427092/2273REMARQUE: Il s’agit d’une adresse IP externe (celle que les serveurs d’Internet voient lorsque vous vous y connectez). Si vous voulez une adresse IP interne (celle que votre ordinateur utilise pour les connexions, qui peut être différente), voyez ceci répondre .
TL; DR - Méthodes les plus rapides en 2015
La méthode la plus rapide utilisant DNS:
ou en utilisant externalip :
Le plus rapide en utilisant HTTP:
ou en utilisant externalip:
Le plus rapide utilisant HTTPS avec un certificat valide:
ou en utilisant externalip:
Utiliser telnet:
Avec
nc
commande:ou en utilisant externalip:
Avec
telnet
commande:Utilisation de FTP:
ou en utilisant externalip:
Tout ce qui précède peut être exécuté en utilisant mon script externalip en tant que:
Maintenant une longue histoire ...
Il existe de nombreuses options de différents serveurs fournissant l’IP externe, en particulier via HTTP posté ici ou ailleurs.
J'ai fait un point de repère pour voir si certains d'entre eux sont meilleurs que les autres et j'ai été surpris par les résultats. Par exemple, l'un des ifconfig.me les plus largement recommandés était presque toujours le plus lent pour moi, prenant parfois plusieurs secondes pour répondre. Beaucoup ne fonctionnent pas sur HTTPS ou fonctionnent, mais ont des certificats non valides. Certains ont des temps de réponse très incohérents.
Des repères
HTTP et HTTPS
Voici la source de mon script externalip-benchmark que j'ai utilisé:
Vous pouvez l'exécuter vous-même pour voir quels services mentionnés ici valent la peine d'être utilisés:
Mes résultats que j'ai obtenus le 03/04/2015 à Varsovie - les adresses ont été modifiées pour protéger l'innocent:
Meilleurs temps de réponse http:
Meilleurs temps de réponse https:
(Remarque: certaines réponses rapides ont un contenu vide - elles ne sont pas valides.)
Meilleurs temps moyens de ping:
Voici les résultats que j'ai obtenus le 03/04/2015 à Amsterdam:
Meilleurs temps de réponse http:
Meilleurs temps de réponse https:
Meilleurs temps moyens de ping:
(Les pings 999999 signifient 100% de perte de paquets.)
DNS
À des fins de comparaison, voici des moments où d’autres méthodes sont testées le 2015-06-16 de Varsovie et d’Amsterdam.
En utilisant:
prend généralement (temps réel) à propos de:
Il existe actuellement quatre résolveurs utilisables de cette façon:
Ils donnent tous le même temps de réponse à Varsovie et à Amsterdam, mais cela n’est peut-être pas le cas ailleurs.
Avec 208.67.222.222, l'adresse IP de resolver1.opendns.com au lieu de son nom de domaine est plus rapide:
mais peut ne pas fonctionner à l'avenir si l'adresse IP change jamais (bien que cela puisse être peu probable pour un résolveur DNS bien connu - je devrais peut-être utiliser l'adresse IP dans mon script externalip - veuillez commenter).
Telnet
Telnet avec
nc
outelnet
commande (voir ci-dessus) prend généralement:(Il n'y a pas de différence notable entre les commandes
nc
ettelnet
.)FTP
Noms de domaine
Toutes les méthodes seront plus rapides (surtout lors de la première utilisation) lorsque les adresses IP seront utilisées à la place des noms de domaine des services donnés (sauf avec HTTP qui peut utiliser des serveurs virtuels basés sur l'hôte et ne pas fonctionner avec une adresse IP nue - pas testé), mais cessera de fonctionner lorsque les services changeront l’adresse IP, de sorte qu’elle sera plus rapide mais moins durable
commentaires
Si vous voyez des résultats intéressants à partir de votre emplacement ou si vous pensez que certains autres hôtes devraient être recommandés au lieu de ceux que j'ai choisis, merci de poster un commentaire. S'il manque un service important, veuillez commenter ou publier un problème sur GitHub. J'aimerais que ce message reste à jour avec un choix actuel de services les plus performants.
la source
myip.opendns.com
méthode DNS avec la réponse de Krinkle ? Actuellement, il semble que ce soit le gagnant par défaut parce qu’il n’est au courant d’aucun autre fournisseur pour cette méthode, mais il serait quand même utile de comparer les autres méthodes.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) etcurl http://canhazip.com
(36.71.64.71). Comment puis-je décider lequel est correct?Site remplacé par un site de travail néerlandais.
la source
-s
option est-elle vraiment nécessaire dans ce cas? J'ai essayé avec / sans dans mon fedora 15 - bash 4.2.10 (1) et cela a fonctionné dans les deux sens.whatismyip.com
a supprimé le service gratuit pour vérifier les adresses IP externes. Donc, j'ai bien peur que cela ne soit plus correct.icanhazip.com
fonctionne encore.Depuis whatsmyip.org et ifconfig.me ont déjà été mentionnés:
la source
curl
solutions (bien qu’elles soient valables) dépendent toujours d’une bibliothèque externe (libcurl
).Vous pouvez utiliser ifconfig.me comme alternative à whatismyip.org.
Ifconfig.me a aussi quelques fonctionnalités supplémentaires. Pour savoir quelles autres informations vous pouvez recevoir, visitez le site Web.
la source
la source
<img src='ipimg.php'/>
$ curl -s http://whatismyip.org | grep -o '\([[:digit:]]\{1,3\}\.\)\{3\}[[:digit:]]\{1,3\}'
Amazon AWS
Exemple de sortie:
Je l'aime parce que:
la source
Je préfère utiliser curlmyip.com. C'est aussi simple que:
curl curlmyip.com
C'est court et simple à retenir.
la source
bash
l'intention du PO», vous ne pouvez pas vous passer de l'-s
option mentionnée dans d'autres réponses.-s
commutateur, c'est de l'exécuter en mode silencieux, c'est-à-dire. les messages d'erreur ne seront pas affichés. Cela dépend donc de la manière dont il veut que son script traite les erreurs. La commande elle-même renvoie une adresse IP aussi fiable que l’utilisation de-s
.OU
OU
OU
OU
OU
OU
OU
OU
OU
OU
OU
Référence
la source
la source
wget icanhazip.com
fonctionne.| tail -n1
pièce et voyez ce que vous obtenez de la procurationnetcat icanhazip.com 80
. On dirait que cela ignore$http_proxy
et amis, car la spécification du proxy et du port avec-x
juste abouti à un processus de blocage.netcat proxy 3128 <<<$'GET http://icanhazip.com/ HTTP/1.0\n\n' | tail -n 1
pour un proxy HTTP de base (en supposant qu'il s'exécute sur le port 3128). Cependant, vous obtiendrez évidemment l'adresse IP du proxy.Host:
tête de requête - l’hébergement virtuel basé sur le nom était l’une des améliorations majeures de HTTP 1.1. Modifiez la demande pour spécifier HTTP / 1.1 ou supprimez l'en-tête Host (je recommande l'ancien).Si, après avoir lu toutes ces suggestions, vous souhaitez lire encore plus, voici un script Bash sur-conçu.
Il contient une liste de serveurs DNS et HTTP qui semblent bien fonctionner à partir de février 2017.
Si vous l’avez
dig
, il essaiera d’abord le DNS qui est presque d’un ordre de grandeur plus rapide que les différents services HTTP.Il sort à la première réponse qu'il obtient.
Si vous n'en avez pas
dig
ou si tous les serveurs DNS ont échoué, il essaie ensuite les services HTTP jusqu'à ce qu'il obtienne une réponse.Les serveurs sont classés par ordre alphabétique, mais sont mélangés avant utilisation pour éviter de toujours utiliser le même.
Exemple d'utilisation (j'ai appelé le script
myip
):Mettez en commentaire la
verbose
variable en haut du script pour éviter d’imprimer le serveur utilisé.Mise à jour: ce script est maintenant également sur Github où je pourrais le mettre à jour si nécessaire:
https://github.com/mivk/myip
la source
Si vous souhaitez utiliser HTTPS pour éviter certains pièges:
la source
Voici une autre alternative qui dépend des hôtes dont les activités sont résolues par la gestion d'une adresse IP dynamique plutôt que par des sites "de service public" susceptibles de disparaître ou de changer de format.
Pour obtenir l'adresse IP dans un script, procédez comme suit:
Idéal dans le travail cron pour vérifier si une adresse IP dynamique a été modifiée et si certaines entrées de configuration doivent être modifiées.
la source
Cela fonctionne toujours pour moi, je l'utilise dans mon conky pour obtenir mon adresse IP.
la source
amazonaws
. Autrement dit, si vous n'avez AUCUN moyen de chercher sur Google. (même paslynx
).Étant donné que je ne me fie pas à la connexion ou au service, j'utilise le code suivant, qui tente d'obtenir l'adresse IP à l'aide de différents services (n'hésitez pas à en ajouter d'autres):
Pour ajouter plus de robustesse (par exemple, si l’un des services change de format), vous pouvez vérifier qu’il
$IP
s’agit d’une IP valide en utilisant la fonction suivante :la source
ifcfg.me prend en charge:
IPv4 et IPv6, encore plus de choses avec curl: ifcfg.me/?
la source
nslookup
lien entre ladig
méthode et la méthode dans la réponse de Krinkle ? Ils utilisent tous les deux DNS, non? Alors, puis-je laisser passer une option pourdig
lui permettre de récupérer le même enregistrement DNS que celuinslookup
en cours ici?dig +short . @ifcfg.me
si vous le souhaitezJe gère un service en nuage pour ma famille et j’ai créé ce script rapide, que j’exécutais
cron
tous les matins à 5 heures, parce que je n’étais pas cher et que je n’achèterais pas une adresse IP statique.Il saisit l'adresse IP publique et l'envoie par courrier électronique à mes utilisateurs. Faites-le en format hyperlien afin que ma mère n'ait pas à taper les ports ni quoi que ce soit. Peut-être que quelqu'un d'autre peut l'utiliser.
la source
Cela affichera l'adresse IP actuelle dans une fenêtre contextuelle:
la source
J'ai configuré un service qui renvoie une adresse IP sous forme de texte JSON / XML ou brut. Vous pouvez les trouver ici
http://ipof.in/txt
La même URL avec / json et / xml vous donnera également d'autres formats
Si vous voulez HTTPS, vous pouvez utiliser les mêmes URL avec le préfixe https. L'avantage est que même si vous êtes en Wifi, vous aurez l'adresse publique.
Donc, un simple alias myip = "curl https://ipof.in/txt " obtiendra votre IP
la source
Alternativement, vous pouvez utiliser STUN qui a été inventé pour répondre à cette question de manière automatisée et qui est largement utilisé dans les communications Internet, par exemple par SIP et WebRTC .
En utilisant un stunclient (sur debian / ubuntu do
apt-get install stuntman-client
) faites simplement:où
A.B.C.D
est l'adresse IP de votre machine sur le réseau local et où se trouvent lesW.X.Y.Z
serveurs d'adresse IP, tels que les sites Web vus de l'extérieur (et celui que vous recherchez). En utilisant,sed
vous pouvez réduire la sortie ci-dessus à une seule adresse IP:Pour une recherche alternative STUN utilisant uniquement des outils de base en ligne de commande, reportez-vous à ma réponse sur AskUbuntu (conçu comme un exercice amusant et non pour une utilisation en production).
la source
W3m Plaintext-Browser est idéal pour la bash. Vous pouvez utiliser
grep
ettail
pour raccourcir la réponse comme suit:la source
Utilisez curl pour accéder au service ip de shtuff.it
la source
En utilisant une requête DNS même derrière un routeur NAT traduisant des adresses DNS, cela peut fonctionner:
ou, vous pouvez utiliser la méthode de requête HTTP à la place:
la source