Si je vérifie avec Google, Je peux voir mon IP publique. Y a-t-il quelque chose sur la ligne de commande Ubuntu qui me donnera la même réponse?
Si vous n'êtes pas derrière un routeur, vous pouvez le découvrir 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 d'adresse réseau. Vous pouvez demander à un site Web quelle est votre adresse IP publique 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
Pour trouver l'adresse IP externe, vous pouvez utiliser des services Web externes ou utiliser des méthodes basées sur le système. Le plus simple est d'utiliser le service externe, également le ifconfig
les solutions basées ne fonctionneront dans votre système que si vous n'êtes pas derrière un NAT
. les deux méthodes ont été discutées ci-dessous en détail.
Trouver 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. Depuis 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:
- https://hawknotes.blogspot.in/2010/06/finding-your-external-ip-address.html
- https://ipecho.net/plain
Vous pouvez également utiliser lynx
(navigateur) ou curl
à la place de wget
avec des variations mineures à la commande ci-dessus, pour trouver votre adresse IP externe.
Utiliser curl
pour trouver l'ip:
$ curl https://ipecho.net/plain
Pour une meilleure utilisation de la sortie formatée:
$ 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 vont toutes sur HTTP vers un serveur distant. Certains d'entre eux nécessitent l'analyse de la sortie ou s'appuient sur l'en-tête User-Agent pour que le serveur réponde en texte brut. Ils changent également assez fréquemment (descendre, changer leur nom, mettre des annonces, peut changer le format de sortie, etc.).
- Le protocole de réponse DNS est standardisé (le format restera compatible).
- Historiquement, les services DNS (OpenDNS, Google Public DNS, ..) ont tendance à survivre beaucoup plus longtemps et sont plus stables, évolutifs et généralement soignés que tout ce qui est nouveau. whatismyip.com Le service HTTP est chaud aujourd'hui.
- (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.com111.222.333.444
Copié à partir de: https://unix.stackexchange.com/a/81699/14497
Trouver 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 $2}' | awk '{print $1}'
Dans ce qui précède, remplacez <interface_name>
avec 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 obtient 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.1ppp0: 111.222.333.444
N.B.: Les résultats sont indicatifs et non réels.
Courtoisie: https://www.if-not-true-then-false.com/2010/linux-get-ip-address/
METTRE
-
LANG=c
a été ajouté àifconfig
usages basés, de sorte qu'il donne toujours la sortie en anglais, quel que soit le paramètre régional.
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. icanhazip.com et ou ipecho.net
curl icanhazip.com
ou
curl ipecho.net
icanhazip.com c'est mon préféré.
curl icanhazip.com
Vous pouvez demander IPv4 explicitement:
curl ipv4.icanhazip.com
Si vous n'avez pas curl
vous pouvez utiliser wget
plutôt:
wget -qO- icanhazip.com
J'ai trouvé que tout était ennuyeux et lent, alors j'ai écrit le mien. C'est simple et rapide.
Son API est activée http://api.ident.me/
Exemple:
curl ident.mecurl v4.ident.mecurl v6.ident.me
Conception technique: en DNS, ident.me a des records A et AAAA, v4.ident.me a seulement un dossier A, et v6.ident.me a seulement un record AAAA. Les ports 443 et 80 sur ces adresses IP sont servis par nginx, avec SSL utilisant des certificats fournis par letsencrypt.org via certbot, et avec la configuration suivante (extrait):
server { […] server_name .ident.me; location / { default_type text/plain; return 200 $remote_addr; add_header Access-Control-Allow-Origin "*"; add_header Cache-Control "no-cache, no-store, must-revalidate"; }}
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 problème myip.opendns.com
nom d'hôte à votre adresse IP.
Amazon AWS
curl https://checkip.amazonaws.com
Sortie d'échantillon:
123.123.123.123
Fonctionne également sur navigateur: http://checkip.amazonaws.com
J'aime ça parce que:
- il renvoie uniquement l'adresse IP en texte brut dans le corps de la réponse, rien d'autre
- il provient d'un fournisseur bien connu qui est peu susceptible de se déconnecter de sitôt
Celui que j'utilise est :
wget -O - -q icanhazip.com
Oui, vous pouvez avoir ip : -)
Tapez ceci exactement, appuyez sur Enter lorsque cela est indiqué:
telnet ipecho.net 80
EnterGET /plain HTTP/1.1
EnterHOST: ipecho.net
EnterBROWSER: web-kit
Enter
Enter
Ceci soumet manuellement une requête HTTP, qui renverra votre adresse IP au bas d'un HTTP/1.1 200 OK reply
Exemple de sortie:
$ telnet ipecho.net 80Trying 146.255.36.1...Connected to ipecho.net.Escape character is '^]'.GET /plain HTTP/1.1HOST: ipecho.netBROWSER: web-kitHTTP/1.1 200 OKDate: Tue, 02 Jul 2013 07:11:42 GMTServer: ApacheExpires: Mon, 26 Jul 1997 05:00:00 GMTCache-Control: no-cachePragma: no-cacheVary: Accept-EncodingTransfer-Encoding: chunkedContent-Type: text/htmlf111.222.333.4440
Pour cela, ÉTOURDIR a été inventé. En tant que client, vous pouvez envoyer une demande à un serveur STUN accessible au public et lui demander de restituer l'adresse IP qu'il voit. Sorte de bas niveau whatismyip.com comme il n'utilise pas HTTP et pas de serveurs DNS intelligemment conçus, mais le protocole STUN extrêmement rapide.
Utiliser stunclient
Si vous avez stunclient
installer (apt-get install stuntman-client
sur debian / ubuntu), vous pouvez simplement faire:
$stunclient stun.services.mozilla.comBinding test: successLocal address: A.B.C.D:42541Mapped address: W.X.Y.Z:42541
où A.B.C.D
est l'adresse IP de votre machine sur le réseau local et W.X.Y.Z
est l'adresse IP que les serveurs comme les sites Web voient de l'extérieur (et celle que vous recherchez). Utiliser sed
vous 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 en utilisant la ligne de commande, ce qui pourrait exclure l'utilisation d'un client STUN. Alors je me demande...
Utiliser bash
Une demande d'étourdissement peut être faite à la main, envoyée à un serveur d'étourdissement externe en utilisant netcat
et être post-traité en utilisant dd
, hexdump
et sed
comme ça:
$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 binaire d'étourdissement (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.
Fonctionne, mais n'est 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 en termes de confidentialité, mais vous pouvez également en utiliser un autre: Liste des serveurs STUN
“avoir une adresse IP dynamique”, “SSH utilisant un autre système sur Internet”, “la commande qui affichera l’adresse IP PUBLIQUE actuelle”. Vous voyez le problème de la poule/de l’œ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.
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 un crontab avec notify-send
.
on ne peut pas SSH sans connaître l’IP publique mon ami… DynDNS coûte cher et fonctionne sans ip, mais la situation ne le permet pas… quoi qu’il en soit, la question a déjà reçu une réponse… merci pour votre suggestion
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 d’intérêt, vous pouvez omettre la chaîne’ et1 ’ pour afficher toutes les adresses IP de toutes les cartes. Au lieu de `\2’, vous pouvez également écrire '\1 \2 ’ pour afficher les noms de chaque adaptateur.
Aucune des réponses ne montre la bonne approche. Comme je n’ai pas assez de réputation pour poster une réponse, je posterai un commentaire sur la façon de l’obtenir sans compter sur des services externes. Il suffit de lancer sur le terminal’ host hostname address ip-address`