Je peux trouver mon adresse IP à l'aide de la commande ifconfig ou hostname -i.
Mais comment trouver mon adresse IP publique?
(J'ai une adresse IP publique statique mais je veux le savoir en utilisant la commande unix)
Je peux trouver mon adresse IP à l'aide de la commande ifconfig ou hostname -i.
Mais comment trouver mon adresse IP publique?
(J'ai une adresse IP publique statique mais je veux le savoir en utilisant la commande unix)
Réponses:
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
curl http://checkip.amazonaws.com/
Vous pouvez demander myip.opendns.com
. de OpenDNS. dig @208.67.222.220 myip.opendns.com
dig @resolver1.opendns.com myip.opendns.com
. Ou sous Windows: nslookup myip.opendns.com resolver1.opendns.com
.
dig @208.67.222.220 myip.opendns.com +short
pour obtenir directement l'adresse IP sans avoir à passer par toute la réponse.
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 pour le moment (aucun de ces résolveurs ne semble même avoir IPv6 pour le moment, mais si vous omettez -4
le texte explicite -t a
, vous risqueriez de le perdre à l’avenir (à l’exception de celui de Google txt
, qui pourrait en réalité fonctionner pour IPv6 un jour, si correctement activé par Google)).
Notez que cela myip.opendns.com
ne peut être résolu que par resolver1.opendns.com
, et non pas avec auth1.opendns.com
- donc, ils semblent faire du piratage DNS et de l'homme au milieu de leur propre nom de domaine! Ainsi, vous ne pouvez pas l'utiliser pour trouver l'adresse IP d'un résolveur aléatoire, car resolver1.opendns.com
ne fait pas autorité pour myip.opendns.com
.
Notez que cela o-o.myaddr.l.google.com
ressemble à l'approche la plus flexible et la plus durable; c'est même utile pour tester si votre résolveur DNS prend en charge l'extension EDNS0 expérimentale pour le sous-réseau client (que très peu de résolveurs ont le support):
% 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
dig +short AAAA myip.opendns.com @2620:0:ccc::2
.
-4
ou -6
si vous avez besoin d’une version IP spécifique.
Une réponse très simple si vous avez accès à Internet est:
curl icanhazip.com
N'oubliez pas qu'il peut être problématique de faire confiance à des sources tierces pour votre adresse IP, en particulier si ce que vous faites avec ces données a une signification particulière.
Une méthode plus fiable consiste à choisir un serveur DNS connu et digne de confiance (exécutant idéalement DNSSEC) et à interroger le nom d’hôte de la boîte avec celui-ci, à 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 manière: 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. L'adresse IP unique 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 ne disposez pas d'une connexion Internet directe (NAT, etc.), il est impossible de trouver votre adresse IP publique sans aide externe (car votre ordinateur ne le sait pas). Ensuite, vous devrez le faire comme dans les autres réponses.
J'ai adopté une approche légèrement différente en utilisant le protocole STUN conçu pour NAT Traversal. Si vous utilisez Ubuntu, vous pouvez simplement installer le paquet "stun" en tapant:
sudo apt-get install stun
Le paquet installe un serveur STUN dont vous n’auriez probablement pas besoin, mais il est également livré avec un client de test STUN que j’ai utilisé pour résoudre ce problème. Maintenant, vous pouvez 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 reçoit une réponse avec votre adresse IP publique; le reste de la commande consiste simplement à filtrer l'adresse IP de la sortie.
Une façon est, vous pouvez faire une demande à la page à
http://www.biranchi.com/ip.php
il retourne l'adresse IP de votre système
text/html
convient pour ce que cette pseudo-API renvoie - ce n'est certainement pas XML ou JSON. text/plain
peut-être, mais c'est tout à fait utilisable comme text/html
.
wget -q -O - http://wgetip.com/
Google affiche maintenant votre adresse IP publique: http://www.google.com/search?q=ip
User-Agent
chaîne fournie à la page. Avec Firefox, ça marche. mais SeaMonkey avec la chaîne "Firefox" désactivée (par l'intermédiaire de "general.useragent.compatMode.firefox" défini sur false), ce n'est tout à coup pas le cas. Je ne vois absolument pas pourquoi Google autorise explicitement ce genre de choses uniquement pour Firefox et non pour n'importe quel Gecko, car de nombreux autres navigateurs de bureau basés sur Gecko sont également compatibles, y compris SeaMonkey.
D'accord ... Je sais que c'est bien après coup et probablement même pas la peine de poster, 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
Sympa et simple.
hostname -I
(capital 'i').
Le moyen le plus simple consiste à utiliser http://ifconfig.me/ , comme suggéré.
Sur cette page, vous saurez quelle commande utiliser pour quelles informations vous souhaitez récupérer.
Pour IP:
curl ifconfig.meou
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
Je le fais souvent, et à partir de nombreux appareils, j'ai donc créé mes deux 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
travaille é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 par 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 si vous souhaitez savoir de quelle adresse IP vous vous trouvez.
Il ne nécessite aucun service tiers.
Pour éviter de faire appel à des sources externes, j’utilise normalement expect, pour établir une connexion telnet avec mon routeur et obtenir l’adresse IP de son interface publique. Voici un exemple de script attendu:
#!/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'adresse 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 que c'est un routeur basé sur Linux, avec la commande ifconfig disponible.
Duplicata de beaucoup d'autres questions (d'où mon -1 vote).
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).
Si vous voulez trouver l’adresse IP externe sur votre routeur, vous devez demander au routeur lui-même son adresse wan ou demander à une personne extérieure de l’obtenir pour vous.
pour une manière manuelle, vous pouvez parcourir l’un des sites cités ci-dessus qui renverront l’IP de la requête entrante.
Pour un moyen automatisé, vous pouvez essayer:
wget -q -O - http://www.ipaddressworld.com | grep '[0-9]\{1,3\}\.[0-9]\{1,3\}'\.
qui vous donnera la ligne contenant l'adresse IP sur la réponse http, puis l'analyser avec sed, awk, etc.
vous pouvez utiliser uniquement le shell pour vérifier votre adresse IP externe, également à l'aide de 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
sortie
lynx --dump http://www.whatismyip.com/ | grep -o '[0-9]. * \. [0-9]. * *. [0-9]. * \. [0-9]. *' -m1
Je fais ça. Cela me donne juste l'adresse IP sans aucune implication de tiers.
ip addr show | grep eth0 | grep inet | tr -s "" | cut -f3 -d "" | couper -f1 -d "/"
Voici une autre alternative qui dépend des hôtes dont les activités sont résolues par la gestion d'une adresse IP dynamique plutôt que par des sites "de service public" susceptibles de disparaître ou de 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 (rapporte les modifications IP au service).
Pour obtenir l'adresse IP dans un script, procédez comme suit:
$external_ip = `dig +short xxx.no-ip.org`
Idéal dans le travail cron pour vérifier si une adresse IP dynamique a été modifiée et si certaines entrées de configuration doivent être modifiées.
Sous OS X, il existe deux solutions simples pour obtenir à la fois l'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"