Je peux trouver mon adresse IP en utilisant la commande ifconfig ou hostname -i.
Mais comment trouver mon IP publique?
(J'ai une IP publique statique mais je veux le découvrir en utilisant la commande unix)
curl ifconfig.me
curl ifconfig.me/ip
(pour juste l'ip)
curl ifconfig.me/all
(pour plus d'informations, prend du temps)
Pour plus de commandes, visitez: http://ifconfig.me/#cli_wrap
Vous pouvez demander myip.opendns.com
. depuis OpenDNS. Dig @208.67.222.220 myip.opendns.com
Dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short
Dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short
Dig -4 @resolver1.opendns.com -t a myip.opendns.com +short
Notez que ce qui précède ne fonctionne que pour IPv4 actuellement (aucun de ces résolveurs ne semble même avoir IPv6 actuellement, mais si vous omettez -4
et l'explicite -t a
, alors vous risquez qu'il tombe en panne à l'avenir (à l'exception de txt
de Google, qui pourrait réellement fonctionner pour IPv6 un jour, s'il est correctement activé par Google)).
Notez que myip.opendns.com
ne peut être résolu que par resolver1.opendns.com
, et non avec auth1.opendns.com
- donc, ils semblent faire un détournement de DNS et un homme au milieu de leur propre nom de domaine! Ainsi, vous ne pouvez pas l'utiliser pour trouver l'IP d'un résolveur aléatoire, car resolver1.opendns.com
ne fait pas autorité pour myip.opendns.com
.
Notez que o-o.myaddr.l.google.com
ressemble à l'approche la plus flexible et la plus évolutive; il est même bon pour tester si votre résolveur DNS prend en charge l'extension expérimentale EDNS0 pour le sous-réseau client (que très peu de résolveurs prennent en charge):
% Dig @8.8.8.8 -t txt o-o.myaddr.l.google.com +noall +answer +stats | tail -8
;; global options: printcmd
o-o.myaddr.l.google.com. 60 IN TXT "74.125.189.16"
o-o.myaddr.l.google.com. 60 IN TXT "edns0-client-subnet 88.198.54.0/24"
;; Query time: 13 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Dec 8 20:38:46 2013
;; MSG SIZE rcvd: 114
Une réponse très simple si vous avez accès à Internet est:
curl icanhazip.com
Gardez à l'esprit que faire confiance à des sources tierces pour votre adresse IP peut être problématique, surtout si ce que vous faites avec ces données a une signification particulière.
Un moyen plus fiable consiste à choisir un serveur DNS connu et fiable (exécutant idéalement DNSSEC) et à interroger le nom d'hôte de la boîte avec lui, à condition que votre serveur DNS contienne de telles entrées;
Dig @trustworthysource.com +short `hostname`
J'ai écrit un service web simple et rapide pour cela.
curl ident.me
Vous pouvez demander votre IPv4:
curl v4.ident.me
Ou IPv6:
curl v6.ident.me
Et l'API est documentée sur http://api.ident.me/
Une façon: http://www.whatismyip.com/
Si
alors vous pouvez simplement analyser la sortie de ifconfig pour les adresses IP des interfaces (la partie "inet addr:") pour obtenir la liste des adresses IP de toutes vos interfaces. La seule adresse IP qui n'est pas dans la plage privée (voir http://en.wikipedia.org/wiki/IP_address#IPv4_private_addresses ) est votre adresse IP publique.
La même liste peut également être obtenue via
ip addr show
qui peut être plus facile à analyser.
Si vous n'avez pas de connexion Internet directe (NAT, etc.), il n'y a aucun moyen de trouver votre adresse IP publique sans aide externe (car votre ordinateur ne la connaît pas). Ensuite, vous devrez le faire comme dans les autres réponses.
J'ai adopté une approche un peu différente en utilisant le protocole STUN qui a été conçu pour NAT Traversal. Si vous utilisez Ubuntu, vous pouvez simplement installer le paquet "stun" en tapant:
Sudo apt-get install stun
Le package installe un serveur STUN dont vous n'aurez probablement pas besoin, mais il est également livré avec un client de test STUN que j'ai utilisé pour résoudre ce problème. Vous pouvez maintenant récupérer votre adresse IP publique avec une commande (pas si simple):
stun -v stunserver.org 2>&1 1>/dev/null | grep MappedAddress | sed -e 's/.*MappedAddress = //' -e 's/:.*//' | uniq
Maintenant, ce qu'il fait est: stun contacte le serveur STUN public "stunserver.org" et obtient une réponse avec votre IP publique, le reste de la commande consiste simplement à filtrer l'IP de la sortie.
Vous pouvez notamment faire une demande sur la page à l'adresse
http://www.biranchi.com/ip.php
il renvoie l'adresse IP de votre système
Google affiche désormais votre adresse IP publique: http://www.google.com/search?q=ip
D'accord ... Je sais que c'est bien après coup et probablement même pas la peine d'être publié, mais voici ma solution de travail.
#!/bin/sh
IP="$(ifconfig | egrep 'inet ' | sed -e 's/inet //' -e 's/addr://' -e 's/ Bcast.*//' -e 's/127.*//')"
echo $IP
Agréable et simple.
La manière la plus simple est d'utiliser http://ifconfig.me/ , comme suggéré.
Sur cette page, vous saurez quelle commande utiliser pour les informations que vous souhaitez récupérer.
Pour IP:
curl ifconfig.me
curl ifconfig.me/ip
Pour le nom d'hôte public:
curl ifconfig.me/Host
Pour toutes les informations dans un fichier XML:
curl ifconfig.me/all.xml
etc ... il suffit de vérifier http://ifconfig.me
Pour éviter de compter sur des sources externes, j'utilise expect, pour telnet dans mon routeur et obtenir l'adresse IP de son interface publique. Voici un exemple de script d'attente:
#!/usr/bin/expect
if { $argc < 3 } {
puts "usage: ./telnet2router.exp router-ip username password"
return -1
}
set ip [lrange $argv 0 0]
set username [lrange $argv 1 1]
set password [lrange $argv 2 2]
spawn telnet $ip
expect "login:" {
send "$username\r"
}
expect "Password:" {
send "$password\r"
}
expect "#" {
send "ifconfig ppp0 | grep inet\r"
send "exit\r"
}
expect eof
J'exécute ensuite le script ci-dessus comme ceci pour obtenir l'ip publique:
./telnet2router.exp <router-ip> <username> <password> | grep "inet addr" | cut -d : -f 2 | cut -d " " -f 1
Bien sûr, cela est basé sur l'hypothèse que j'ai un accès administrateur au routeur et à son routeur basé sur Linux, avec la commande ifconfig disponible.
Je fais beaucoup cela et à partir de nombreux appareils, j'ai donc créé mes propres services sur un serveur:
fichier php à la racine d'un serveur web:
user@Host:~$ cat index.php`
<?php echo $_SERVER['REMOTE_ADDR']; echo "\n" ?>
Utilisation sur un shell:
$ curl -4 mydomain.com
79.22.192.12
fonctionne également avec ipv6:
$ curl mydomain.com
2a01:e34:ee7d:180::3
Avec netcat:
$ echo "GET /" | nc myserver.com 80
2a01:e34:ee7d:180::3
Sur un routeur Cisco:
router#more http://myserver.com/index.php
79.22.192.12
piratage rapide avec un serveur telnet personnalisé: xinetd spawning/usr/bin/env:
service telnet
{
server = /usr/bin/env
socket_type = stream
protocol = tcp
flags = IPv6
wait = no
port = 23
cps = 3 30
passenv = %a
}
puis telnet:
$ nc -4 myserver.com 23
REMOTE_Host=::ffff:79.22.192.12
$ nc myserver.com 23
REMOTE_Host=2a01:e34:ee7d:180::3
fonctionne de la même manière avec un routeur:
router#telnet myserver.com
79.22.192.12
De cette façon, vous pouvez le faire fonctionner sur votre réseau interne, si un nat ou un proxy est impliqué dans la communication et que vous souhaitez savoir à partir de quelle IP vous apparaissez.
Il ne nécessite aucun service tiers.
Si vous voulez trouver l'adresse IP externe sur votre routeur, vous pouvez soit demander au routeur lui-même son adresse WAN, soit demander à quelqu'un de l'extérieur de vous l'obtenir.
pour une manière manuelle, vous pouvez parcourir l'un des sites ci-dessus qui renverra l'ip de la demande entrante.
Pour une manière automatisée, vous pouvez essayer:
wget -q -O - http://www.ipaddressworld.com | grep '[0-9]\{1,3\}\.[0-9]\{1,3\}'\.
qui vous obtiendra la ligne qui contient l'adresse IP sur la réponse http, puis l'analyser avec sed, awk, etc.
Dupliquer de nombreuses autres questions (d'où mon vote -1).
Une solution de script Shell simple peut être trouvée ici:
http://bash.cyberciti.biz/misc-Shell/read-local-ip-address/
Fonctionne sur Linux, FreeBSD, SunOS et Apple Darwin (avec une modification mineure).
vous pouvez utiliser uniquement le Shell pour vérifier votre adresse IP externe, en utilisant également des fournisseurs externes
#!/bin/bash
TCP_Host="checkmyip.com"
TCP_PORT=80
exec 5<>/dev/tcp/"${TCP_Host}"/"${TCP_PORT}"
echo -e "GET / HTTP/1.0\nHOST:${TCP_Host}\n" >&5
while read -r line
do
case "$line" in
*"Your local IP address is"* )
line="${line#*Your local IP address is }"
line=${line%%</p>*}
echo "Your ip is: $line"
exec >&5-
exit
;;
esac
done <&5
production
Je fais ça. Cela me donne juste l'IP sans aucune implication de tiers ..
iP addr show | grep eth0 | grep inet | tr -s "" | cut -f3 -d "" | cut -f1 -d "/"
Voici une autre alternative qui dépend des hôtes dont les affaires résolvent la gestion de l'IP dynamique plutôt que des sites "de service public" qui peuvent disparaître ou changer de format.
1) Enregistrez votre serveur sur l'un des nombreux services DNS dynamiques gratuits (par exemple no-ip.com) Cela vous donnera une entrée DNS comme xxx.no-ip.org.
2) Installez l'outil de mise à jour dynamique du service (signale les modifications IP au service).
Pour obtenir l'adresse IP dans un script, faites simplement:
$external_ip = `Dig +short xxx.no-ip.org`
Idéal pour une utilisation dans le travail cron pour vérifier si l'IP dynamique a changé et certaines entrées de configuration doivent être modifiées.
lynx --dump http://www.whatismyip.com/ | grep -o '[0-9]. * \. [0-9]. * \. [0-9]. * \. [0-9]. *' - m1
wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'
Sur OS X, voici deux solutions simples pour obtenir à la fois l'adresse IP privée et publique (avec un code bonus si vous utilisez LaunchBar).
$ ipconfig getifaddr $1
# $1=en0 || en1 || en*
#!/bin/sh
title="$USER@$(HOSTNAME -s)"
text=$(ipconfig getifaddr en1)
open "x-launchbar:large-type?font-name=TerminalDosis-Light&string=$text&title=$title"
$ Dig +time=1 +tries=1 +retry=1 +short myip.opendns.com @resolver1.opendns.com
# ||
$ curl $1
# $1=http://wtfismyip.com/text || http://ip-addr.es || http://icanhazip.com || http://wgetip.com || http://ident.me || http://ifconfig.me || https://shtuff.it/myip/short || http://curlmyip.com
#!/bin/sh
title="$USER@$(HOSTNAME -s)"
text=$(Dig +time=1 +tries=1 +retry=1 +short myip.opendns.com @resolver1.opendns.com)
open "x-launchbar:large-type?font-name=TerminalDosis-Light&string=$text&title=$title"