Commande pour déterminer mon adresse IP publique?


638

Si je vérifie avec google , je peux voir mon adresse IP publique. Y at-il quelque chose sur la ligne de commande Ubuntu qui me donnera la même réponse?


2
"ayant une adresse IP dynamique", "SSH utilisant un autre système sur Internet", "la commande qui affichera l'adresse IP PUBLIC actuelle". Vous voyez le problème poulet / œuf ici? Comment pourriez-vous exécuter des commandes sur un serveur distant sans connaître son adresse? Vous pourriez être plus intéressé par des services comme no-ip.com / DynDNS.org.
gertvdijk

on ne peut pas SSH sans connaître l'adresse IP publique mon ami ... dynDNS coûte cher et pas de travail difficile mais la situation ne le permet pas ... de toute façon, la question a déjà été résolue .. merci pour votre suggestion
Bhavesh Diwan

1
PS duckduckgo.com/?q=ip (pas de ligne de commande, mais pas de grand frère G non plus)
Campa le

1
Peut-être que cela devrait être une question distincte, mais j'aimerais voir une alerte lorsque mon adresse IP publique change. Pour l'instant, j'utilise simplement les réponses suivantes dans une crontab avec notify-send.
PJ Brunet

excellentes solutions ci-dessous. Pour Centos, utilisez: ifconfig eth1 | sed -nre '/^[^ ]+/{N;s/^([^ ]+).*inet *([^ ]+).*/\2/p}'où eth1 est le périphérique réseau qui vous intéresse, vous pouvez omettre la chaîne 'et1' pour afficher tous les ips de tous les adaptateurs. Au lieu de cela, \2vous pouvez écrire \1 \2pour afficher également les noms de chaque adaptateur.
Hafenkranich

Réponses:


918

Si vous n'êtes pas derrière un routeur, vous pouvez le trouver en utilisant ifconfig.

Si vous êtes derrière un routeur, votre ordinateur ne sera pas informé de l'adresse IP publique, car le routeur convertit les adresses réseau. Vous pouvez demander à un site Web quelle est votre adresse IP publique curlou en wgetextraire les informations dont vous avez besoin:

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

ou plus court

curl https://ipinfo.io/ip

27
ty - juste après avoir posté, je me suis aperçu que je ne l' ai pas Google pour une première réponse: ressemble à ceci fonctionnera D' curl -s checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//' autres possibilités sont énumérées ici: go2linux.org/what-is-my-public-ip-address-with-linux
kfmfe04

1
bien sûr - vous pouvez l'ajouter à votre réponse
kfmfe04

1
Pour clarifier: c’était un hack, très moche, j’ai donc fait un montage pour le rendre plus simple et quelque chose dont les gens peuvent se souvenir.
Jrg

2
Exacly comme Giovanni P a déclaré. Le PO devrait changer la réponse acceptée.
Loostro

36
curl -s ipinfo.io/ip
chao

385

Pour trouver l'adresse IP externe, vous pouvez utiliser des services Web externes ou des méthodes basées sur le système. Le plus simple est d’utiliser le service externe, les ifconfigsolutions basées ne fonctionneront dans votre système que si vous n’êtes pas en retard NAT. les deux méthodes ont été discutées en détail ci-dessous.

Recherche d'une adresse IP externe à l'aide de services externes

Le moyen le plus simple consiste à utiliser un service externe via un navigateur en ligne de commande ou un outil de téléchargement. Puisque wgetest disponible par défaut dans Ubuntu, nous pouvons l'utiliser.
Pour trouver votre adresse IP, utilisez-

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

Courtoisie :

Vous pouvez également utiliser lynx(navigateur) ou curlà la place de wgetmodifications mineures à la commande ci-dessus, pour trouver votre adresse IP externe.

Utiliser curlpour trouver l'ip:

$ curl https://ipecho.net/plain

Pour une meilleure sortie formatée, utilisez:

$ curl https://ipecho.net/plain ; echo

Une méthode plus rapide (sans doute la plus rapide) utilisant digavec OpenDNScomme résolveur:

Les autres réponses ici passent toutes par HTTP sur un serveur distant. Certaines d'entre elles nécessitent une analyse de la sortie ou font appel à l'en-tête User-Agent pour que le serveur réponde en texte brut. Ils changent aussi assez souvent (descendre, changer leur nom, mettre en place des annonces, changer le format de sortie, etc.).

  1. Le protocole de réponse DNS est normalisé (le format restera compatible).
  2. Historiquement, les services DNS (OpenDNS, Google Public DNS, ..) ont tendance à survivre beaucoup plus longtemps et sont plus stables, évolutifs et généralement mieux entretenus que le nouveau service HTTP de whatismyip.com, branché à la mode aujourd'hui.
  3. (pour les geeks qui se soucient de la micro-optimisation), cette méthode devrait être intrinsèquement plus rapide (ne serait-ce que de quelques micro secondes).

Utiliser dig avec OpenDNS comme résolveur:

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

111.222.333.444

Copié à partir de: https://unix.stackexchange.com/a/81699/14497

Trouver une IP externe sans faire appel à des services externes

  • Si vous connaissez le nom de votre interface réseau

Tapez ce qui suit dans votre terminal:

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

Dans ce qui précède, remplacer <interface_name>par le nom de votre interface réelle, par exemple: eth0, eth1, pp0, etc ...

Exemple d'utilisation:

$ LANG=c ifconfig ppp0 | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'
111.222.333.444
  • Si vous ne connaissez pas le nom de votre interface réseau

Tapez ce qui suit dans votre terminal (cela donne le nom et l'adresse IP de chaque interface réseau de votre système):

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

Exemple d'utilisation:

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

NB: les résultats sont indicatifs et non réels.

Courtesy: https://www.if-not-true-then-false.com/2010/linux-get-ip-address/

MISE À JOUR

  1. LANG=ca été ajouté aux utilisations de ifconfigbase, de sorte qu'il donne toujours la sortie en anglais, quel que soit le réglage des paramètres régionaux.

1
@ Z9iT, Sure .. Cela devrait fonctionner dans n'importe quelle distribution Linux à condition que vous ayez installé wget. Comme dit si vous avez déjà curl ou lynx disponible, utilisez-le plutôt. Vous aurez besoin de la permission root pour installer alors utilisezsudo apt-get install wget
saji89

13
Les commandes avec ifconfig ne fonctionnent que si vous n'êtes pas derrière un NAT.
lukassteiner

1
utilisez simplement l' -woption curl au lieu de echo :)curl -w '\n' ident.me
drAlberT

3
Cette proposition utilisant dig est plutôt sympa unix.stackexchange.com/questions/22615/…
binaryanomaly

4
La dernière version sans services externes ne fonctionne que si votre ordinateur est connecté directement à Internet, ce qui est rarement le cas, sinon vous n'obtenez que votre adresse IP locale.
rubo77

117

Mon préféré a toujours été:

curl ifconfig.me

simple, facile à taper.

Vous devrez d'abord installer curl;)

Si ifconfig.me est en panne, essayez icanhazip.com et ou ipecho.net

curl icanhazip.com

ou

curl ipecho.net

3
@ Z9iT, je viens de vérifier cela maintenant. Oui, cela produirait l'ip externe dans votre terminal.
saji89

7
Le temps de réponse de ifconfig.mesemble un peu plus lent que ipecho.net.
Drew Noakes

3
Si vous n'avez pas curlmais avez wget:wget -U curl -qO- ifconfig.me
Stéphane Chazelas

2
ifconfig.me ne semble pas répondre :(
Asfand Qazi

1
@AsfandYarQazi - travaille ici. Vous pouvez essayer l’un des suppléants icanhazip.com
Panther le

59

icanhazip.com est mon préféré.

curl icanhazip.com

Vous pouvez demander explicitement IPv4:

curl ipv4.icanhazip.com

Si vous n'avez pas, curlvous pouvez utiliser à la wgetplace:

wget -qO- icanhazip.com

Merci! J'ai dû essayer plusieurs des suggestions ci-dessus jusqu'à ce que j'en trouve quelques-unes compatibles IPv6. Il est dommage que de tels services ne soient généralement encore que IPv4.
Vladimír Čunát le

48

J'ai trouvé que tout était ennuyeux et lent, alors j'ai écrit le mien. C'est simple et rapide

Son API est sur http://api.ident.me/

Exemples:

curl ident.me
curl v4.ident.me
curl v6.ident.me

1
Woah, c'était vraiment rapide!
waldyrious

1
Je trouve la solution icanhazip.com plus rapide et elle inclut une nouvelle ligne dans la sortie.
Tyler Collier

1
Oui, c'était effectivement plus rapide ces derniers temps. Je viens de peaufiner ma solution.
Pierre Carrier

2
Gloire! 2 ans et vous le maintenez toujours. Bien joué. "IDENTify ME", est ce qui me vient à l'esprit lorsque j'ai besoin de vérifier mon adresse IP :)
Mohnish

aws est plus rapide time curl http://checkip.amazonaws.com-> 0.91svs .241spour ident.mePrions simplement aws ne descend pas;)
Avindra Goolcharan

42

Vous pouvez utiliser une requête DNS au lieu d'une requête HTTP pour connaître votre adresse IP publique:

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

Il utilise le resolver1.opendns.comserveur dns pour résoudre le magique myip.opendns.comnom d' hôte à votre adresse IP.


3
C'est vraiment rapide. J'ai fait une exécution d'échauffement, puis 10 exécutions chacune de cela et curl icanhazip.com. Moyenne pour la curlversion: 174ms. Moyenne pour la version uniquement DNS: 9 ms. ~ 19x plus vite. Voir aussi: unix.stackexchange.com/a/81699/8383
Adam Monsen

1
@AdamMonsen Merci pour le lien. L’intérêt d’utiliser DNS (comme le dit la réponse que vous avez liée) est que la réponse est standard (et qu’elle ne peut pas changer) et que le service (OpenDNS) peut rester plus longtemps que la plupart de ses alternatives http. Le temps nécessaire pour effectuer la demande peut être masqué par le temps de démarrage de la commande.
Jfs

Oui. Je ne serais pas surpris si curlelle est plus lente que dig. Même si elles étaient réécrites pour être aussi semblables que possible, cela curlresterait quand même plus lent; il utilise HTTP ( y compris DNS) et digutilise uniquement DNS.
Adam Monsen

22

Amazon AWS

curl http://checkip.amazonaws.com

Exemple de sortie:

123.123.123.123

Je l'aime parce que:

  • il renvoie uniquement l'adresse IP en texte brut, rien d'autre
  • il s'agit d'un fournisseur bien connu qui a peu de chances de se déconnecter de si tôt

18

Celui que j'utilise est:

wget -O - -q icanhazip.com

Oui, vous pouvez avoir l'ip :-)


3
Je préfère curl icanhazip.comparfois wgetque la seule disponible, mais parfois non, wgetelle curlest votre seule option (comme OS / X). Quoi qu'il en soit, curl icanhazip.comc'est presque aussi facile que curl ifconfig.mebeaucoup, mais beaucoup plus drôle ;-)
TryTryAgain

11

Tapez ceci exactement, appuyez à l' Enterendroit indiqué:

telnet ipecho.net 80Enter
GET /plain HTTP/1.1Enter
HOST: ipecho.net Enter
BROWSER: web-kitEnter
Enter

Ceci soumet manuellement une requête HTTP, qui retournera votre IP au bas d’une page. HTTP/1.1 200 OK reply

Exemple de sortie:

$ 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

6
Bien, cela a bien fonctionné, ne pas avoir à installer curl était un avantage pour moi: une seule ligne: printf "GET / plain HTTP / 1.1 \ nHOST: ipecho.net \ nBROWSER: web-kit \ n \ n" | nc ipecho.net 80
Ozone

9

Un autre rapide (pourrait bien être le plus rapide, relativement)

curl ipecho.net/plain

9

Pour cela, STUN a été inventé. En tant que client, vous pouvez envoyer une demande à un serveur STUN disponible publiquement et lui demander de restituer l'adresse IP qu'il voit. Sortez le whatismyip.com de bas niveau, car il n’utilise pas de HTTP ni de serveurs DNS intelligemment conçus, mais le protocole STUN extrêmement rapide.

En utilisant stunclient

Si vous avez stunclientinstallé ( apt-get install stuntman-clientsur debian / ubuntu) vous pouvez simplement faire:

$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.Dest l'adresse IP de votre machine sur le réseau local et où se trouvent les W.X.Y.Zserveurs d'adresse IP, tels que les sites Web vus de l'extérieur (et celui que vous recherchez). En utilisant, sedvous pouvez réduire la sortie ci-dessus à une seule adresse IP:

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

Cependant, votre question était de savoir comment le trouver à l'aide de la ligne de commande, ce qui pourrait exclure l'utilisation d'un client STUN. Alors je me demande ...

En utilisant bash

Une demande STUN peut être faite à la main, envoyée à un serveur STUN externe à l'aide de netcatet être post-traitée à l'aide de dd, hexdumpet sedainsi de suite:

$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/'

L'écho définit une demande binaire STUN (0x0001 indique une demande de liaison) ayant une longueur de 8 (0x0008) avec le cookie 0xc00cee et des éléments collés de Wireshark. Seuls les quatre octets représentant l'adresse IP externe sont extraits de la réponse, nettoyés et imprimés.

Fonctionne, mais pas recommandé pour une utilisation en production :-)

PS De nombreux serveurs STUN sont disponibles car il s’agit d’une technologie de base pour SIP et WebRTC. En utiliser un à partir de Mozilla devrait être sûr, mais vous pouvez aussi en utiliser un autre: liste de serveurs STUN


+1 pour la technologie la plus geek et réellement la plus apropos. La requête http fonctionne, et c'est ce que j'ai utilisé toute ma vie, mais j'aime bien qu'on ait pensé à la question. Je ne savais pas ça. Merci!
Mike S

7

J'ai un service stupide pour cela par telnet. Quelque chose comme ça:

telnet myip.gelma.net

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

Sentez-vous libre de l'utiliser.


5

Vous pouvez lire une page Web en utilisant uniquement bash, sans 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

Ce combiné avec checkip.amazonaws.comest le plus rapide pour moi
Avindra Goolcharan

1
@AvindraGoolcharan essayez une demande DNS
jfs

2

Pour ceux d'entre nous qui ont un accès de connexion à nos routeurs, utiliser un script pour demander au routeur quelle est son adresse IP WAN est le moyen le plus efficace de déterminer l'adresse IP externe. Par exemple, le script python suivant imprime l'adresse IP externe de mon routeur 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)

Notez que ceci n'est pas très sécurisé (comme c'est le cas avec les informations d'identification en texte clair et la connexion à la plupart des routeurs), et n'est certainement pas portable (doit être changé pour chaque routeur). C'est cependant une solution très rapide et parfaitement raisonnable sur un réseau domestique physiquement sécurisé.

Pour personnaliser le script pour un autre routeur, je recommande d'utiliser l'addon tamperdata dans firefox pour déterminer les requêtes HTTP à effectuer.


2
Vous devriez essayer d'obtenir l'adresse IP du routeur grammaticalement. Par exemple router = subprocess.check_output(['ip', '-o', 'ro', 'list', '0.0.0.0/0']).split()[2].
Cristian Ciupitu

2

Ceux-ci obtiendront les adresses IP locales:

ifconfig

ou pour une sortie plus courte:

ifconfig | grep inet

aussi

ip addr show

et probablement:

hostname -I

Cela devrait obtenir l'IP externe

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

NB: Si vous ne voulez pas installer curl, ceci aussi:

curl http://smart-ip.net/myip

1
ifconfig | sed -nre '/^[^ ]+/{N;s/^([^ ]+).*addr: *([^ ]+).*/\1,\2/p}'imprimera les interfaces locales et les adresses IP V4 correspondantes
Hannu

1
ifconfig | sed -nre '/^[^ ]+/{N;N;s/^([^ ]+).*addr: *([^ ]+).*addr: *([^ ]+).*/\1,\2,\3/p}'- IP v4 et v6.
Hannu

2

UPnP peut interroger de nombreux routeurs domestiques:

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

Ensuite, grep l'adresse IP de la réponse.

grep -Eo '\<[[:digit:]]{1,3}(\.[[:digit:]]{1,3}){3}\>'

2

Si vous utilisez DD-WRT, cela fonctionne pour moi:

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

ou

curl -s -u your_ddwrt_username:your_ddwrt_password http://192.168.1.1 | grep "ipinfo" | awk -v FS="(IP: |</span)" '{print $2}'
  • Où 192.168.1.1 est l'adresse IP du réseau local du routeur / routeur DD-WRT.

  • Le composant -s signifie silencieux (c’est-à-dire qu’il n’affiche pas les informations relatives à la progression de la boucle).

  • Oh, je devrais mentionner que j'utilise ce qui précède avec "DD-WRT v24-sp2 (01/04/15) std" .

1

Si vous avez installé Lynx dans le type Ubuntu

lynx bot.whatismyipaddress.com

curl bot.whatismyipaddress.comfonctionne aussi.
Tomofumi

0

utiliser ip!

ip addr show

puis recherchez l'adaptateur approprié (pas lo, et généralement eth0), et localisez l'adresse IP près inet.


2
La question concerne les adresses IP publiques et non internes
Wolf

0

Peut-être que je suis un peu en retard, mais Inxi peut le faire assez facilement.

Installer inxi

sudo apt install inxi

Puis lancez la commande suivante

inxi -i

Exemple avec mes informations bloquées en utilisant l' zoption de copier / coller vers des sites comme celui-ci:

~$ inxi -iz
Network:   Card: NVIDIA MCP77 Ethernet driver: forcedeth
           IF: eth0 state: up speed: 1000 Mbps duplex: full mac: <filter>
           WAN IP: <filter>
           IF: eth0 ip-v4: <filter> ip-v6-link: N/A

Où il <filter>est dit est où votre adresse IP WAN, IPv4, adresse MAC, etc. apparaîtra


-2

Il vous suffit d'émettre un traceroute pour tout site Web ou service.

sudo traceroute -I google.com

La ligne 2 semble toujours être mon adresse IP publique une fois celle-ci dépassée.

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**

Alors, faites une commande bash.

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

Et la sortie ...

(199.21.149.1)

Je ne pense pas que compter sur des scripts PHP et le genre est une bonne pratique.


c'est intéressant, bien que très lent et que mon ip externe ne soit pas comme ça
rubo77

Cette réponse est trop inexacte pour être utile. Dans mon environnement d'entreprise, je n'ai pas du tout mon adresse IP. Cela fonctionne uniquement si vous comprenez comment vos routeurs et commutateurs locaux sont conçus. Même dans ce cas, il se peut que la ligne 2 ne soit pas activée, en fonction du nombre de sauts locaux que vous passez. Il n’ya aucun moyen de créer un algorithme cohérent à partir de cette technique, et il existe de nombreuses autres solutions plus simples qui vous apporteront la bonne réponse à chaque fois.
Mike S

Bien que cela puisse fonctionner dans certaines configurations spéciales, je n’ai en fait jamais vu mon adresse IP externe dans un traceroute. Il s’agit généralement de ma passerelle (si je ne suis pas derrière NAT) ou de la passerelle de mon routeur, mais surtout d’un autre routeur plus éloigné.
mardi

alias ip = 'lynx --dump ipecho.net/plain '
phildobbin le

-2

Une commande sans dépendance, à l'exception de 8.8.8.8 qui est un DNS Google:

echo $(ip route get 8.8.8.8 | awk '{print $NF; exit}')

Cela vous indique seulement l'adresse IP de votre interface sortante locale.
Guntbert

la commande affiche l'adresse IP publique si je l'exécute sur un serveur de cloud. N'était-ce pas la question?
Rolf

Non, où voyez-vous "serveur cloud"?
Guntbert
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.