J'ai besoin de trouver mon adresse IP externe à partir d'un script shell. Pour le moment j'utilise cette fonction :
myip () {
lwp-request -o text checkip.dyndns.org | awk '{ print $NF }'
}
Mais cela dépend de perl-libwww
, perl-html-format
, perl-html-tree
installée. De quelles autres manières puis-je obtenir mon adresse IP externe ?
Réponse acceptée :
Je vous recommande de l'obtenir directement à partir d'un serveur DNS.
La plupart des autres réponses ci-dessous impliquent toutes de passer par HTTP vers un serveur distant. Certains d'entre eux nécessitaient une analyse de la sortie ou s'appuyaient sur l'en-tête User-Agent pour que le serveur réponde en texte brut. Ceux-ci changent assez fréquemment (descendent, changent de nom, publient des annonces, peuvent changer de format de sortie, etc.).
- Le protocole de réponse DNS est standardisé (le format restera compatible).
- Historiquement, les services DNS (Akamai, Google Public DNS, OpenDNS, ..) ont tendance à survivre beaucoup plus longtemps et sont plus stables, plus évolutifs et généralement plus prisés que n'importe quel nouveau service HTTP whatismyip dot-com branché. aujourd'hui.
- Cette méthode est intrinsèquement plus rapide (ne serait-ce que de quelques millisecondes !).
Utiliser dig
avec un résolveur OpenDNS :
$ dig @resolver4.opendns.com myip.opendns.com +short
Peut-être l'alias dans votre bashrc
donc c'est facile à retenir
# https://unix.stackexchange.com/a/81699/37512
alias wanip='dig @resolver4.opendns.com myip.opendns.com +short'
alias wanip4='dig @resolver4.opendns.com myip.opendns.com +short -4'
alias wanip6='dig @resolver1.ipv6-sandbox.opendns.com AAAA myip.opendns.com +short -6'
Répond avec une adresse IP simple :
$ wanip # wanip4, or wanip6
80.100.192.168 # or, 2606:4700:4700::1111
Syntaxe
(Abrégé de https://ss64.com/bash/dig.html) :
usage: dig [@global-dnsserver] [q-type] <hostname> <d-opt> [q-opt]
q-type one of (A, ANY, AAAA, TXT, MX, ...). Default: A.
d-opt ...
+[no]short (Display nothing except short form of answer)
...
q-opt one of:
-4 (use IPv4 query transport only)
-6 (use IPv6 query transport only)
...
Le ANY
Le type de requête renvoie un enregistrement AAAA ou A. Pour préférer spécifiquement la connexion IPv4 ou IPv6, utilisez le -4
ou -6
options en conséquence.
Pour exiger que la réponse soit une adresse IPv4, remplacez TOUT par A
; pour IPv6, remplacez-le par AAAA
. Notez qu'il ne peut renvoyer que l'adresse utilisée pour la connexion. Par exemple, lors d'une connexion via IPv6, il ne peut pas renvoyer l'adresse A.
Serveurs alternatifs
Divers fournisseurs DNS proposent ce service, notamment OpenDNS, Akamai et Google Public DNS :
# OpenDNS (since 2009)
$ dig @resolver3.opendns.com myip.opendns.com +short
$ dig @resolver4.opendns.com myip.opendns.com +short
80.100.192.168
# OpenDNS IPv6
$ dig @resolver1.ipv6-sandbox.opendns.com AAAA myip.opendns.com +short -6
2606:4700:4700::1111
# Akamai (since 2009)
$ dig @ns1-1.akamaitech.net ANY whoami.akamai.net +short
80.100.192.168
# Akamai approximate
# NOTE: This returns only an approximate IP from your block,
# but has the benefit of working with private DNS proxies.
$ dig +short TXT whoami.ds.akahelp.net
"ip" "80.100.192.160"
# Google (since 2010)
# Supports IPv6 + IPv4, use -4 or -6 to force one.
$ dig @ns1.google.com TXT o-o.myaddr.l.google.com +short
"80.100.192.168"
Exemple d'alias qui demande spécifiquement une adresse IPv4 :
# https://unix.stackexchange.com/a/81699/37512
alias wanip4='dig @resolver4.opendns.com myip.opendns.com +short -4'
$ wanip4
80.100.192.168
Et pour votre adresse IPv6 :
# https://unix.stackexchange.com/a/81699/37512
alias wanip6='dig @ns1.google.com TXT o-o.myaddr.l.google.com +short -6'
$ wanip6
"2606:4700:4700::1111"
Dépannage
Si la commande ne fonctionne pas pour une raison quelconque, il peut y avoir un problème de réseau. Essayez d'abord l'une des alternatives ci-dessus.
Connexe :Vous essayez de récupérer des données à partir d'un lecteur RAID externe ?
Si vous soupçonnez un problème différent (avec le fournisseur en amont, l'outil de ligne de commande ou autre chose), exécutez la commande sans le +short
option pour révéler les détails de la requête DNS. Par exemple :
$ dig @resolver4.opendns.com myip.opendns.com
;; Got answer: ->>HEADER<<- opcode: QUERY, status: NOERROR
;; QUESTION SECTION:
;myip.opendns.com. IN A
;; ANSWER SECTION:
myip.opendns.com. 0 IN A 80.100.192.168
;; Query time: 4 msec