web-dev-qa-db-fra.com

Comment puis-je obtenir mon adresse IP externe dans un script Shell?

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 façons puis-je obtenir mon adresse IP externe?

288
Eugene Yarmash

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 sur 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. Celles-ci changent assez fréquemment (descendez, changez leur nom, affichez des annonces, peut changer le format de sortie, etc.).

  1. Le protocole de réponse DNS est standardisé (le format restera compatible).
  2. Historiquement, les services DNS ( OpenDNS , Google Public DNS , ..) ont tendance à survivre beaucoup plus longtemps et sont plus stables, plus évolutifs et généralement plus soignés que quoi que ce soit de nouveau hip whatismyip.com Le service HTTP est chaud aujourd'hui.
  3. Cette méthode est intrinsèquement plus rapide (ne serait-ce que de quelques millisecondes!).

Utiliser Dig avec OpenDNS comme résolveur:

Dig @resolver1.opendns.com ANY myip.opendns.com +short

Peut-être l'alias dans votre bashrc donc c'est facile à retenir

alias wanip='Dig @resolver1.opendns.com ANY myip.opendns.com +short'

Répond avec une adresse IP simple:

$ wanip
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 type de requête ANY renvoie un enregistrement AAAA ou A. Pour préférer la connexion IPv4 ou IPv6 en particulier, utilisez le -4 ou -6 options en conséquence.

Pour exiger que la réponse soit une adresse IPv4, remplacez ANY 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 de la connexion via IPv6, il ne peut pas renvoyer l'adresse A.

Serveurs alternatifs et exemples

En plus d'OpenDNS, il existe des services DNS similaires fournis par Akamai et Google:

$ Dig @ns1-1.akamaitech.net ANY whoami.akamai.net +short
80.100.192.168

$ 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:

alias wanip4='Dig @resolver1.opendns.com A myip.opendns.com +short -4'

$ wanip4
80.100.192.168

Et pour IPv6:

alias wanip6='Dig @resolver1.opendns.com AAAA myip.opendns.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 avec le fournisseur en amont, l'outil de ligne de commande ou autre chose. Pour comprendre pourquoi cela ne fonctionne pas, exécutez la commande sans le +short option pour révéler les détails de la requête DNS. Par exemple:

$ Dig @resolver1.opendns.com ANY myip.opendns.com

;; Got answer: ->>HEADER<<- opcode: QUERY, status: NOERROR

;; QUESTION SECTION:
;myip.opendns.com.      IN  ANY

;; ANSWER SECTION:
myip.opendns.com.   0   IN  AAAA    2606:4700:4700::1111

;; Query time: 4 msec
;; WHEN: Fri Apr 11 00:00:01 GMT 2011
465
Timo Tijhof

REMARQUE: il s'agit de adresse IP externe (celle que les serveurs sur Internet voient lorsque vous vous y connectez) - si vous le souhaitez adresse IP interne (celle que votre propre ordinateur utilise pour les connexions, qui peut être différente) voir ( cette réponse .

TL; DR - Méthodes les plus rapides en 2015

La méthode la plus rapide avec DNS:

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

ou en utilisant externalip :

externalip dns

Le plus rapide avec HTTP:

curl -s http://whatismyip.akamai.com/

ou en utilisant externalip:

externalip http

Le plus rapide utilisant HTTPS avec un certificat valide:

curl -s https://4.ifcfg.me/

ou en utilisant externalip:

externalip https

Utilisation de telnet:

Avec la commande nc:

nc 4.ifcfg.me 23 | grep IPv4 | cut -d' ' -f4

ou en utilisant externalip:

externalip telnet

Avec la commande telnet:

telnet 4.ifcfg.me 2>&1 | grep IPv4 | cut -d' ' -f4

En utilisant FTP:

echo close | ftp 4.ifcfg.me | awk '{print $4; exit}'

ou en utilisant externalip:

externalip ftp

Tout ce qui précède peut être exécuté en utilisant mon script externalip comme:

externalip dns
externalip http
externalip https
externalip telnet
externalip ftp

Maintenant une longue histoire ...

Il existe de nombreuses options de différents serveurs fournissant l'IP externe, en particulier via HTTP, publiés 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 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.

Repères

HTTP et HTTPS

C'est la source de mon script de référence externeip 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:

wget https://raw.githubusercontent.com/rsp/scripts/master/externalip-benchmark
chmod a+x externalip-benchmark
./externalip-benchmark

Mes résultats que j'ai obtenus le 2015-04-03 de Varsovie - les adresses ont été modifiées pour protéger les innocents:

Meilleurs temps de réponse http:

0.086s http://ip.tyk.nu/ - answer='172.31.133.7'
0.089s http://whatismyip.akamai.com/ - answer='172.31.133.7'
0.091s http://tnx.nl/ip - answer='172.31.133.7'
0.117s http://ifcfg.me/ - answer='172.31.133.7'
0.156s http://l2.io/ip - answer='172.31.133.7'
0.317s http://ip.appspot.com/ - answer='172.31.133.7'
0.336s http://ident.me/ - answer='172.31.133.7'
0.338s http://ipof.in/txt - answer='172.31.133.7'
0.347s http://icanhazip.com/ - answer='172.31.133.7'
0.496s http://curlmyip.com/ - answer='172.31.133.7'
0.527s http://wgetip.com/ - answer='172.31.133.7'
0.548s http://curlmyip.com/ - answer='172.31.133.7'
0.665s http://bot.whatismyipaddress.com/ - answer='172.31.133.7'
0.665s http://eth0.me/ - answer='172.31.133.7'
1.041s http://ifconfig.me/ - answer='172.31.133.7'
1.049s http://corz.org/ip - answer='172.31.133.7'
1.598s http://ipecho.net/plain - answer='172.31.133.7'

Meilleurs temps de réponse https:

0.028s https://curlmyip.com/ - answer=''
0.028s https://curlmyip.com/ - answer=''
0.029s https://l2.io/ip - answer=''
0.029s https://tnx.nl/ip - answer=''
0.072s https://whatismyip.akamai.com/ - answer=''
0.113s https://ipecho.net/plain - answer=''
0.117s https://ident.me/ - answer=''
0.207s https://ip.tyk.nu/ - answer='172.31.133.7'
0.214s https://ipof.in/txt - answer='172.31.133.7'
0.259s https://ifcfg.me/ - answer='172.31.133.7'
0.289s https://corz.org/ip - answer=''
0.436s https://ip.appspot.com/ - answer='172.31.133.7'
0.448s https://bot.whatismyipaddress.com/ - answer=''
0.454s https://eth0.me/ - answer=''
0.673s https://icanhazip.com/ - answer='172.31.133.7'
5.255s https://ifconfig.me/ - answer=''
10.000s https://wgetip.com/ - answer=''

(Remarque: il existe des réponses rapides avec un contenu vide - celles-ci ne sont pas valides.)

Meilleurs temps de ping moyens:

10.210 //whatismyip.akamai.com/
36.820 //tnx.nl/ip
37.169 //ip.tyk.nu/
39.412 //ipof.in/txt
40.967 //ident.me/
41.257 //ipecho.net/plain
43.918 //ifcfg.me/
45.720 //l2.io/ip
64.749 //ip.appspot.com/
123.412 //corz.org/ip
134.245 //wgetip.com/
157.997 //icanhazip.com/
161.613 //curlmyip.com/
162.100 //curlmyip.com/
268.734 //ifconfig.me/
999999 //bot.whatismyipaddress.com/
999999 //eth0.me/

Voici les résultats que j'ai obtenus le 03/04/2015 d'Amsterdam:

Meilleurs temps de réponse http:

0.021s http://ipecho.net/plain - answer='172.31.13.37'
0.027s http://tnx.nl/ip - answer='172.31.13.37'
0.035s http://whatismyip.akamai.com/ - answer='172.31.13.37'
0.039s http://ifcfg.me/ - answer='172.31.13.37'
0.045s http://l2.io/ip - answer='172.31.13.37'
0.142s http://ident.me/ - answer='172.31.13.37'
0.144s http://ipof.in/txt - answer='172.31.13.37'
0.150s http://ip.appspot.com/ - answer='172.31.13.37'
0.150s http://ip.tyk.nu/ - answer='172.31.13.37'
0.170s http://icanhazip.com/ - answer='172.31.13.37'
0.190s http://eth0.me/ - answer='172.31.13.37'
0.191s http://wgetip.com/ - answer='172.31.13.37'
0.301s http://curlmyip.com/ - answer='172.31.13.37'
0.330s http://bot.whatismyipaddress.com/ - answer='172.31.13.37'
0.343s http://curlmyip.com/ - answer='172.31.13.37'
0.485s http://corz.org/ip - answer='172.31.13.37'
3.549s http://ifconfig.me/ - answer='172.31.13.37'

Meilleurs temps de réponse https:

0.004s https://curlmyip.com/ - answer=''
0.012s https://curlmyip.com/ - answer=''
0.012s https://tnx.nl/ip - answer=''
0.016s https://ipecho.net/plain - answer=''
0.071s https://whatismyip.akamai.com/ - answer=''
0.096s https://ifcfg.me/ - answer='172.31.13.37'
0.097s https://ident.me/ - answer=''
0.187s https://corz.org/ip - answer=''
0.187s https://ip.appspot.com/ - answer='172.31.13.37'
0.189s https://ip.tyk.nu/ - answer='172.31.13.37'
0.195s https://eth0.me/ - answer=''
0.253s https://l2.io/ip - answer=''
0.300s https://ipof.in/txt - answer='172.31.13.37'
0.324s https://bot.whatismyipaddress.com/ - answer=''
0.512s https://icanhazip.com/ - answer='172.31.13.37'
1.272s https://ifconfig.me/ - answer=''
10.002s https://wgetip.com/ - answer=''

Meilleurs temps de ping moyens:

1.020 //ipecho.net/plain
1.087 //whatismyip.akamai.com/
5.011 //ip.appspot.com/
6.942 //ident.me/
7.017 //ipof.in/txt
8.209 //tnx.nl/ip
11.343 //ip.tyk.nu/
12.647 //ifcfg.me/
13.828 //l2.io/ip
81.642 //icanhazip.com/
85.447 //wgetip.com/
91.473 //corz.org/ip
102.569 //curlmyip.com/
102.627 //curlmyip.com/
247.052 //ifconfig.me/
999999 //bot.whatismyipaddress.com/
999999 //eth0.me/

(Les pings 999999 signifient 100% de perte de paquets.)

DNS

Pour une comparaison, voici les moments où d'autres méthodes ont été testées le 16/06/2015 à Varsovie et Amsterdam.

En utilisant:

time Dig +short myip.opendns.com @resolver1.opendns.com

prend généralement (temps réel de l'horloge murale) environ:

  • 0.035s de Varsovie
  • À 0.015s d'Amsterdam

Il existe en fait quatre résolveurs qui peuvent être utilisés de cette façon:

  • resolver1.opendns.com
  • resolver2.opendns.com
  • resolver3.opendns.com
  • resolver4.opendns.com

Ils donnent tous les mêmes temps de réponse à Varsovie et à Amsterdam, mais cela peut ne pas être le cas dans d'autres endroits.

En utilisant 208.67.222.222 - l'IP de resolver1.opendns.com au lieu de son nom de domaine est plus rapide:

  • À 0.023s de Varsovie
  • 0,009s d'Amsterdam

mais peut ne pas fonctionner à l'avenir si l'IP change jamais (bien que cela puisse être peu probable pour un résolveur DNS bien connu - je devrais peut-être utiliser l'IP dans mon externalip script - veuillez commenter).

Telnet

Telnet avec la commande nc ou telnet (voir ci-dessus) prend généralement:

  • À 0.103s de Varsovie
  • À 0.035s d'Amsterdam

(Il n'y a pas de différence notable entre les commandes nc et telnet.)

FTP

  • À 0.104s de Varsovie
  • À 0.036s d'Amsterdam

Noms de domaine

Toutes les méthodes seront plus rapides (en particulier lors de la première exécution) 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 IP nue - non testé) mais cessera de fonctionner lorsque les services changeront l'adresse IP, ce qui pourrait être plus rapide mais moins évolutif.

Commentaires

Si vous voyez des résultats intéressants de votre emplacement, ou si vous pensez que d'autres hôtes devraient être recommandés au lieu de ceux que j'ai choisis, veuillez poster un commentaire. S'il manque un service important, veuillez commenter ou publier un problème sur GitHub. Je voudrais garder ce post mis à jour avec un choix actuel de services les plus performants.

157
rsp
 curl -s http://whatismijnip.nl |cut -d " " -f 5

Site remplacé par un néerlandais qui fonctionne.

83
Maciek Sawicki

Depuis whatsmyip.org et ifconfig.me ont déjà été mentionnés:

curl -s icanhazip.com
56
joschi

Vous pouvez utiliser ifconfig.me comme alternative à whatismyip.org.

curl -s http://ifconfig.me

Ifconfig.me a également des fonctionnalités supplémentaires. Pour savoir quelles autres informations vous pouvez recevoir, visitez le site Web.

19
Mr. Deathless

Amazon AWS

curl https://checkip.amazonaws.com

Exemple de sortie:

123.123.123.123

Je l'aime parce que:

  • il retourne juste l'IP en clair, rien d'autre
  • il s'agit d'un fournisseur bien connu qui ne sera probablement pas mis hors ligne de sitôt
wget -O - -q http://whatismyip.org/
16
ztank1013
curl ident.me

OR

curl ifconfig.me

OR

curl tnx.nl/ip

OR

curl ipecho.net/plain

OR

curl ip.appspot.com

OR

curl whatismyip.akamai.com

OR

curl icanhazip.com

OR

curl wgetip.com

OR

curl ip.tyk.nu

OR

curl curlmyip.com

OR

curl corz.org/ip

OR

curl bot.whatismyipaddress.com

Référence

9
Mandar Shinde

Je préfère utiliser curlmyip.com C'est aussi simple que:

curl curlmyip.com

C'est court et simple à retenir.

8
Garrett Fogerlie
netcat icanhazip.com 80 <<< $'GET / HTTP/1.1\nHost: icanhazip.com\n\n' | tail -n1
7
Eugene Yarmash

Si, après avoir lu toutes ces suggestions, vous souhaitez en savoir plus, voici un script Bash sans doute sur-conçu.

Il contient une liste de serveurs DNS et HTTP qui semblent bien fonctionner en février 2017.

Si vous avez Dig, il essaie d'abord DNS qui est presque 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'avez pas Dig ou si tous les serveurs DNS ont échoué, il essaie alors 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.

#!/bin/bash

## Get my external IP

timeout=2   # seconds to wait for a reply before trying next server
verbose=1   # prints which server was used to STDERR

dnslist=(
    "Dig +short            myip.opendns.com        @resolver1.opendns.com"
    "Dig +short            myip.opendns.com        @resolver2.opendns.com"
    "Dig +short            myip.opendns.com        @resolver3.opendns.com"
    "Dig +short            myip.opendns.com        @resolver4.opendns.com"
    "Dig +short    -t txt  o-o.myaddr.l.google.com @ns1.google.com"
    "Dig +short -4 -t a    whoami.akamai.net       @ns1-1.akamaitech.net"
    "Dig +short            whoami.akamai.net       @ns1-1.akamaitech.net"
)

httplist=(
    4.ifcfg.me
    alma.ch/myip.cgi
    api.infoip.io/ip
    api.ipify.org
    bot.whatismyipaddress.com
    canhazip.com
    checkip.amazonaws.com
    eth0.me
    icanhazip.com
    ident.me
    ipecho.net/plain
    ipinfo.io/ip
    ipof.in/txt
    ip.tyk.nu
    l2.io/ip
    smart-ip.net/myip
    tnx.nl/ip
    wgetip.com
    whatismyip.akamai.com
)



# function to shuffle the global array "array"
shuffle() {
   local i tmp size max Rand
   size=${#array[*]}
   max=$(( 32768 / size * size ))
   for ((i=size-1; i>0; i--)); do
      while (( (Rand=$RANDOM) >= max )); do :; done
      Rand=$(( Rand % (i+1) ))
      tmp=${array[i]} array[i]=${array[Rand]} array[Rand]=$tmp
   done
}


## if we have Dig and a list of dns methods, try that first
if hash Dig 2>/dev/null && [ ${#dnslist[*]} -gt 0 ]; then
    eval array=( \"\${dnslist[@]}\" )
    shuffle

    for cmd in "${array[@]}"; do
        [ "$verbose" == 1 ] && echo Trying: $cmd 1>&2
        ip=$(timeout $timeout $cmd)
        if [ -n "$ip" ]; then
            echo $ip
            exit
        fi
    done
fi


# if we haven't succeeded with DNS, try HTTP

if [ ${#httplist[*]} == 0 ]; then
    echo "No hosts in httplist array!" >&2
    exit 1
fi

# use curl or wget, depending on which one we find
curl_or_wget=$(if hash curl 2>/dev/null; then echo "curl -s"; Elif hash wget 2>/dev/null; then echo "wget -qO-"; fi);

if [ -z "$curl_or_wget" ]; then
    echo "Neither curl nor wget found. Cannot use http method." >&2
    exit 1
fi

eval array=( \"\${httplist[@]}\" )
shuffle

for url in "${array[@]}"; do
    [ "$verbose" == 1 ] && echo Trying: $curl_or_wget  "$url" 1>&2
    ip=$(timeout $timeout $curl_or_wget "$url")
    if [ -n "$ip" ]; then
        echo $ip
        exit
    fi
done

Exemple d'utilisation (j'ai appelé le script myip):

$ myip
Trying: Dig +short -t txt o-o.myaddr.l.google.com @ns1.google.com
"151.101.65.69"

$ ip=$(myip); echo "IP = '$ip'"
Trying: Dig +short myip.opendns.com @resolver1.opendns.com
IP = '151.101.65.69'

Mettez en commentaire la variable verbose 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 en cas de besoin:
https://github.com/mivk/myip

6
mivk

Cela fonctionne toujours pour moi, je l'utilise dans mon conky pour obtenir mon adresse IP.

wget -q -O - checkip.dyndns.org | sed -e 's/[^[:digit:]\|.]//g'
4
Dai_Trying

ifcfg.me prend en charge:

curl ifcfg.me
nslookup . ifcfg.me
telnet ifcfg.me
ftp ifcfg.me
finger @ifcfg.me

IPv4 et IPv6, encore plus de choses avec curl: ifcfg.me/?

3
Eun

Comme je ne me fie pas à la connexion ou au service, j'utilise le code suivant, qui essaie d'obtenir l'IP en utilisant différents services (n'hésitez pas à en ajouter plus):

# Get my ip address and put in a file
declare -a arr=("ipecho.net/plain" "ident.me" "tnx.nl/ip" "ip.appspot.com" "https://shtuff.it/myip/short/")
IP=$(curl -s --retry 3 --retry-delay 10 ipecho.net/plain)

while [ -z "$IP" ] # If no IP found yet, keep trying!
do
    sleep 30
    IP=$(curl -s --retry 3 --retry-delay 10 ${arr[$((  RANDOM % ${#arr[@]}  ))]})  
done

echo -n "$IP" >  /root/clientIP.txt #puts ip address in clientIP.txt
echo "Our address is $IP" 

Pour ajouter plus de robustesse (par exemple si l'un des services change de format), vous pouvez vérifier que $IP est une IP valide utilisant la --- fonction suivante:

# Verify that the parameter passed is an IP Address:
# http://zindilis.com/blog/2013/05/10/bash-check-that-string-is-ip.html
# @Author: Marios Zindilis
# @License: Creative Commons Attribution-ShareAlike 4.0 International License.
# @Date: 2013-05-10
function is_IP() {
if [ `echo $1 | grep -o '\.' | wc -l` -ne 3 ]; then
        echo "Parameter '$1' does not look like an IP Address (does not contain 3 dots).";
        exit 1;
Elif [ `echo $1 | tr '.' ' ' | wc -w` -ne 4 ]; then
        echo "Parameter '$1' does not look like an IP Address (does not contain 4 octets).";
        exit 1;
else
        for OCTET in `echo $1 | tr '.' ' '`; do
                if ! [[ $OCTET =~ ^[0-9]+$ ]]; then
                        echo "Parameter '$1' does not look like in IP Address (octet '$OCTET' is not numeric).";
                        exit 1;
                Elif [[ $OCTET -lt 0 || $OCTET -gt 255 ]]; then
                        echo "Parameter '$1' does not look like in IP Address (octet '$OCTET' in not in range 0-255).";
                        exit 1;
                fi
        done
fi

return 0;
}
3
Franck Dernoncourt

Si vous souhaitez utiliser HTTPS pour éviter certains pièges potentiels:

_result=$(wget -qO- https://ipcheckit.com/)
_result="${_result##*Your IP address is<br><b>}"
printf '%s\n' "${_result%%</b></p>*}"
3
Chris Down

Voici une autre alternative qui dépend des hôtes qui résolvent l'activité de gestion de l'IP dynamique plutôt que des sites de "service public" qui peuvent disparaître ou changer de format.

  1. Enregistrez votre serveur sur l'un des nombreux services DNS dynamiques gratuits (par exemple no-ip.com) Cela vous donnera une entrée DNS comme xxx.no-ip.org.
  2. Installez l'outil de mise à jour dynamique du service (signale les modifications IP apportées au service).

Pour obtenir l'adresse IP dans un script, faites simplement:

external_ip=`Dig +short xxx.no-ip.org`

Idéal pour une utilisation dans le travail cron pour vérifier si l'IP dynamique a changé et certaines entrées de configuration doivent être modifiées.

3
cgmonroe

Cela montrera l'adresse IP actuelle dans une fenêtre contextuelle:

zenity --info --text "$(curl -s icanhazip.com)"
2
basic6

J'exécute un service cloud pour ma famille et j'ai fait ce script rapide que j'exécute dans un cron chaque matin à 5 heures car je suis bon marché et je n'achèterai pas une adresse IP statique.

Il saisit l'IP publique et l'envoie par e-mail à mes utilisateurs. Je l'ai envoyé par e-mail au format hyperlien pour que ma mère n'ait pas à taper les ports ou quoi que ce soit. Peut-être que quelqu'un d'autre peut l'utiliser pour.

#!/bin/bash
ipvariable=$(wget http://ipecho.net/plain -O - -q);

echo "Today the location is http://$ipvariable:123456/foldertheyreach" | mail -s   "From your friendly cloud service provider" [email protected], [email protected]
2
Will

J'ai configuré un service qui renvoie l'adresse IP en JSON/XML ou en texte 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 étant que même si vous êtes sur un Wifi vous obtiendrez l'adresse publique.

Ainsi, un simple alias myip = "curl https://ipof.in/txt " obtiendra votre IP

1
vivekv

Utiliser une requête DNS même derrière un routeur NAT traduisant les adresses DNS, cela peut fonctionner:

$ Dig +short -t txt o-o.myaddr.l.google.com @ns1.google.com | cut -d'"' -f2
x.y.z.t

ou, vous pouvez utiliser la méthode de requête HTTP à la place:

$ curl -s ipinfo.io/ip
x.y.z.t
0
SebMa

Utilisez curl pour accéder au service IP de shtuff.it

curl -s https://shtuff.it/myip/short
0
Chris Montanaro

Vous pouvez également utiliser STUN qui a été inventé pour répondre à cette question de manière automatisée et est largement utilisé dans les communications Internet, par exemple par SIP et WebRTC .

Utiliser un stunclient (sur debian/ubuntu do apt-get install stuntman-client) faites simplement:

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

A.B.C.D est l'adresse IP de votre machine sur le réseau local et W.X.Y.Z est le serveur d'adresses IP que les sites Web voient de l'extérieur (et celui que vous recherchez). En utilisant sed, vous pouvez réduire la sortie ci-dessus à une seule adresse IP:

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

Pour une recherche STUN alternative n'utilisant que des outils de ligne de commande de base, voir ma réponse sur AskUbunt (conçu comme un exercice amusant, pas pour une utilisation en production).

0
Victor Klos

Le navigateur w3m Plaintext-Browser est idéal pour le bash. Vous pouvez utiliser grep et tail pour raccourcir la réponse comme suit:

w3m -no-cookie -dump "http://www.whatismyip.com/" | grep -A 1 -m 1 "Your IP:" | tail -n 1
0
McPeppr