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?
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
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.
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
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.).
- Le protocole de réponse DNS est normalisé (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 mieux entretenus que le nouveau service HTTP de whatismyip.com, branché à la mode 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.com
111.222.333.444
Copié à partir de: https://unix.stackexchange.com/a/81699/14497
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
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
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.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
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
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
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.
Amazon AWS
curl http://checkip.amazonaws.com
Exemple de sortie:
123.123.123.123
Je l'aime parce que:
Celui que j'utilise est:
wget -O - -q icanhazip.com
Oui, vous pouvez avoir l'ip :-)
Tapez ceci exactement, appuyez sur Enter où 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 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
Un autre rapide (pourrait bien être le plus rapide, relativement)
curl ipecho.net/plain
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.
stunclient
name__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
où 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 sed
name__, 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 ...
bash
name__Une demande STUN peut être créée à la main, envoyée à un serveur STUN externe à l'aide de netcat
et post-traitée à l'aide de dd
name__, hexdump
et de sed
comme 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
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.
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
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).
Utilisez cURL avec ipogre.com (IPv4 et IPv6 sont pris en charge).
IPv4
curl ipv4.ipogre.com
IPv6
curl ipv6.ipogre.com
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.
ifconfig
ou pour une sortie plus courte:
ifconfig | grep inet
également
ip addr show
et probablement:
hostname -I
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
Si vous avez installé Lynx dans le type Ubuntu
lynx bot.whatismyipaddress.com
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}\>'
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
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
.