Commande pour déterminer mon adresse IP publique?

519

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

    
posée kfmfe04 16.01.2012 - 12:50
la source

22 réponses

730

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 connaîtra pas l'adresse IP publique car le routeur effectue une traduction des adresses réseau. Vous pouvez demander à certains sites Web quelle est votre adresse IP publique en utilisant curl ou wget et en extraire les informations dont vous avez besoin:

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

ou plus court

curl ipinfo.io/ip
    
réponse donnée Michael K 16.01.2012 - 12:56
la source
359

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

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 wget est disponible par défaut dans Ubuntu, nous pouvons l'utiliser.
Pour trouver votre adresse IP, utilisez-

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

Courtoisie :

Vous pouvez également utiliser lynx (browser) ou curl à la place de wget avec des variations mineures dans la commande ci-dessus, pour trouver votre adresse IP externe.

Utiliser curl pour trouver l’IP:

$ curl ipecho.net/plain

Pour une meilleure utilisation de la sortie formatée:

$ curl ipecho.net/plain ; echo

Une méthode plus rapide (sans doute la plus rapide) utilisant dig avec OpenDNS comme résolveur:

  

Les autres réponses vont toutes par HTTP à un serveur distant. Une partie de   ils nécessitent l'analyse de la sortie, ou reposent sur l'en-tête User-Agent   pour que le serveur réponde en texte clair. Ils changent aussi assez   fréquemment (descendre, changer de nom, afficher des annonces, changer   format de sortie etc.).

     
  1. Le protocole de réponse DNS est standardisé (le format restera compatible).
  2.   
  3. Historiquement, les services DNS (OpenDNS, Google Public DNS, ..) ont tendance à survivre beaucoup plus longtemps et sont plus stables, évolutifs et généralement perçus   après quoi que ce soit le nouveau service HTTP whatismyip.com hip est chaud aujourd'hui.
  4.   
  5. (pour les geeks qui s’intéressent à la micro-optimisation), cette méthode devrait être intrinsèquement plus rapide (quelques micros secondes seulement).
  6.   

Utiliser dig avec OpenDNS comme résolveur:

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

111.222.333.444

Copié à partir de: lien

Recherche d'une adresse IP externe sans recourir à 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 }' | awk '{print }'

Dans ce qui précède, remplacez <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 }' | awk '{print }'
111.222.333.444
  • Si vous ne connaissez pas le nom de votre interface réseau

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

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

Exemple d’utilisation:

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

NB: les sorties sont indicatives et non réelles.

Courtoisie: lien

MISE À JOUR

  1. LANG=c a été ajouté aux utilisations basées sur ifconfig , de sorte qu'il donne toujours la sortie en anglais, indépendamment des paramètres régionaux.
réponse donnée saji89 01.06.2012 - 14:10
la source
101

Mon favori 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
    
réponse donnée Panther 01.06.2012 - 14:41
la source
54

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

curl icanhazip.com

Vous pouvez demander explicitement IPv4:

curl ipv4.icanhazip.com

Si vous n’avez pas curl , vous pouvez utiliser wget à la place:

wget -qO- icanhazip.com
    
réponse donnée yprez 01.06.2012 - 19:23
la source
43

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

Son API est sur lien

Exemples:

curl ident.me
curl v4.ident.me
curl v6.ident.me
    
réponse donnée Pierre Carrier 03.01.2013 - 16:49
la source
36

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 serveur resolver1.opendns.com dns pour résoudre le nom d'hôte myip.opendns.com magique en votre adresse IP .

    
réponse donnée jfs 27.02.2014 - 16:07
la source
17

Celui que j'utilise est:

wget -O - -q icanhazip.com

Oui, vous pouvez avoir ip: -)

    
réponse donnée jflaflamme 16.01.2012 - 15:20
la source
15

Amazon AWS

curl http://checkip.amazonaws.com

Exemple de sortie:

123.123.123.123

J'aime ça parce que:

  • il ne retourne que l’adresse IP en clair, rien d’autre
  • il s'agit d'un fournisseur bien connu qui ne sera probablement pas déconnecté de sitôt
la source
11

Tapez exactement ceci, appuyez sur Entrez où indiqué:

telnet ipecho.net 80 Entrez
GET /plain HTTP/1.1 Entrez
HOST: ipecho.net Entrez
BROWSER: web-kit Entrez
Entrez

Cela soumet manuellement une requête HTTP, qui renverra votre adresse IP en bas de 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
    
réponse donnée Liam 02.07.2013 - 08:38
la source
8

Un autre rapide (peut-être le plus rapide, relativement)

curl ipecho.net/plain
    
réponse donnée Mohnish 31.12.2013 - 21:49
la source
7

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

Utilisation de stunclient

Si stunclient est installé ( apt-get install stuntman-client sur 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.D est l'adresse IP de votre machine sur le réseau local et W.X.Y.Z les serveurs d'adresses IP comme 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 adresse IP uniquement:

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

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

Utilisation de bash

Une requête STUN peut être fabriquée à la main, envoyée à un serveur STUN externe en utilisant netcat et être post-traitée en utilisant dd , hexdump et sed comme suit:

$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 requête STUN binaire (0x0001 indique une requête de liaison) de longueur 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.

Travailler, mais déconseillé pour une utilisation en production: -)

P.S. De nombreux serveurs STUN sont disponibles car il s'agit d'une technologie de base pour SIP et WebRTC. L’utilisation de celle de Mozilla devrait être sûre du point de vue de la confidentialité, mais vous pouvez également en utiliser une autre: la liste des serveurs STUN

    
réponse donnée Victor Klos 09.10.2015 - 19:21
la source
6

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

N'hésitez pas à l'utiliser.

    
réponse donnée Gelma 13.03.2014 - 13:37
la source
4

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
    
réponse donnée jfs 18.09.2014 - 12:47
la source
2

Utilisez cURL avec ipogre.com (IPv4 et IPv6 sont pris en charge).

IPv4

curl ipv4.ipogre.com

IPv6

curl ipv6.ipogre.com

lien

    
réponse donnée Jacob 31.12.2013 - 06:07
la source
2

Pour ceux d'entre nous qui ont un accès de connexion à nos routeurs, l'utilisation d'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 modifié pour chaque routeur). Il est cependant très rapide et constitue une solution tout à fait raisonnable sur un réseau domestique physiquement sécurisé.

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

    
réponse donnée KarlC 27.03.2014 - 04:08
la source
2

Ceux-ci recevront 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'adresse IP externe

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

N.B. Si vous ne voulez pas installer curl , ceci aussi:

curl http://smart-ip.net/myip
    
réponse donnée Wilf 27.06.2014 - 18:08
la source
1

Si vous avez installé lynx dans le type Ubuntu

lynx bot.whatismyipaddress.com
    
réponse donnée Binny 09.01.2013 - 13:35
la source
1

De nombreux routeurs personnels peuvent être interrogés par UPnP:

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}\>'
    
réponse donnée jms 18.09.2016 - 22:45
la source
0

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

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

ou

curl -s -u your_ddwrt_username:your_ddwrt_password http://192.168.1.1 | grep "ipinfo" | awk -v FS="(IP: |</span)" '{print }'
  • Où 192.168.1.1 correspond à l'adresse IP du LAN de passerelle / routeur du routeur DD-WRT.

  • Le composant -s signifie "silencieux" (c'est-à-dire, ne pas afficher les informations de progression curl).

  • Oh, je devrais mentionner que je l’utilise avec "DD-WRT v24-sp2 (01/04/15) std" .
réponse donnée CMP 14.04.2017 - 18:14
la source
-2

Emettez simplement un traceroute pour tout site Web ou service.

sudo traceroute -I google.com

La ligne 2 semble toujours être mon adresse IP publique après avoir dépassé la passerelle de mon routeur.

[email protected] ~ $ 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" ) { print  } }'

Et la sortie ...

(199.21.149.1)

Je ne pense pas que le recours à des scripts PHP et le tri est une bonne pratique.

    
réponse donnée woahguy 24.07.2015 - 18:34
la source
-2

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

echo $(ip route get 8.8.8.8 | awk '{print $NF; exit}')
    
réponse donnée Rolf 19.08.2015 - 09:57
la source
-2

utilisez ip !

ip addr show

recherchez ensuite l’adaptateur approprié (pas lo , et généralement eth0 ), et recherchez l’adresse IP proche de inet .

    
réponse donnée Eliran Malka 16.08.2016 - 01:06
la source

Lire d'autres questions sur les étiquettes