web-dev-qa-db-fra.com

Commande pour déterminer mon adresse IP publique?

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?

612
kfmfe04

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 effectue la traduction de l'adresse réseau. Vous pouvez demander à un site Web quelle est votre adresse IP publique en utilisant curl ou wget et en extraire 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
877
Michael K

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 consiste à utiliser le service externe. De plus, les solutions basées sur ifconfig ne fonctionneront dans votre système que si vous n’êtes pas derrière un 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 wget est 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 (browser) ou curl à la place de wget avec des variations mineures de la commande ci-dessus, pour trouver votre adresse IP externe.

Utiliser curl pour 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 Dig avec OpenDNS en tant que 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, remplacez <interface_name> par le nom de votre interface actuelle, 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

N.B: Les sorties sont indicatives et non réelles.

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

UPDATE

  1. LANG=c a été ajouté aux utilisations basées sur ifconfig, de sorte qu'il donne toujours la sortie anglaise, quels que soient les paramètres régionaux.
384
saji89

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
115
Panther

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
60
yprez

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
48
Pierre Carrier

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

41
jfs

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

Celui que j'utilise est:

wget -O - -q icanhazip.com

Oui, vous pouvez avoir l'ip :-)

18
jflaflamme

Tapez ceci exactement, appuyez sur Enter où 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'un 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
11
Liam

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

curl ipecho.net/plain
9
Mohnish

Pour cela, PARALYSANT 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.

Utilisation de stunclientname__

Si vous avez installé stunclient(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'adresse IP comme les sites Web vus de l'extérieur (et celui que vous recherchez). En utilisant sedname__, vous pouvez réduire le résultat 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 ...

Utilisation de bashname__

Une demande STUN peut être créée à la main, envoyée à un serveur STUN externe à l'aide de netcatet post-traitée à l'aide de ddname__, hexdumpet de sedcomme ceci:

$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 certains é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 :-)

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

9
Victor Klos

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.

7
Gelma

Vous pouvez lire une page Web en utilisant seulement 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
5
jfs

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 LAN du 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".
2
CMP

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

IPv4

curl ipv4.ipogre.com

IPv6

curl ipv6.ipogre.com

http://www.ipogre.com/faqs/linux.php

2
Jacob

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
cronburg

Ceux-ci obtiendront les adresses IP locales:

ifconfig

ou pour une sortie plus courte:

ifconfig | grep inet

également

ip addr show

et probablement:

hostname -I

Cela devrait obtenir l'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
2
Wilf

Si vous avez installé Lynx dans le type Ubuntu

lynx bot.whatismyipaddress.com
1
Binny

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}\>'
1
jms

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

Installez inxi

Sudo apt install inxi

Puis lancez la commande suivante

inxi -i

Exemple avec mes informations bloquées en utilisant l'option z pour copier et 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 est écrit <filter> est l'endroit où votre WAN IP, IPv4, adresse MAC, etc., apparaîtra

0
Terrance

utilisez ip!

ip addr show

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

0
Eliran Malka