web-dev-qa-db-fra.com

Comment savoir quelle est mon adresse IP externe?

Mes ordinateurs sont assis derrière un routeur/pare-feu. Comment savoir par programme quelle est mon adresse IP externe. Je peux utiliser http://www.whatsmyip.org/ pour les requêtes ad hoc, mais les TOS ne permettent pas de vérifications automatisées.

Des idées?

40
Scott Weinstein

http://ipecho.net/plain semble être une alternative viable, car whatismyip.com nécessite désormais une adhésion pour leur lien automatisé. Ils semblent très gentiment offrir ce service gratuitement, alors n'en abusez pas.

46
Kevin L.

Malheureusement, il n'y a pas de moyen facile de le faire.

J'utiliserais un site comme www.whatsmyip.org et analyserais la sortie.

checkip.dyndns.com renvoie un fichier HTML très simple qui ressemble à ceci:

<html>
  <head>
    <title>Current IP Check</title>
  </head>
  <body>
    Current IP Address: 84.151.156.163
  </body>
</html>

Cela devrait être très facile à analyser. De plus le site existe depuis une dizaine d'années. Il y a de l'espoir que cela durera un moment.

12
Ludwig Weinzierl

Si vous avez accès à un serveur Web avec modphp, vous pouvez rouler le vôtre:

<?php print $_SERVER['REMOTE_ADDR']; ?>

Si vous ne voulez pas que cela soit abusé, vous devrez le garder secret ou ajouter des limites de demande.

J'en utilise un sur mon serveur depuis des années.

Explicitement:

Créez un fichier appelé whatismyip.php dans votre dossier public_html de votre site Web. Il peut être appelé n'importe quoi et être n'importe où dans votre racine Web.

Ajoutez la ligne ci-dessus, puis interrogez votre serveur:

curl http://example.com/whatismyip.php

par exemple.

11
guns

Malheureusement, à partir de 2013, whatismyip.com facture le service.

http://www.icanhazip.com va toujours fort, 3 ans plus tard. Produit simplement l'IP sous forme de texte, absolument rien d'autre.

http://checkip.dyndns.org fonctionne toujours aussi bien.

Vous pouvez également utiliser Google si vous voulez être sûr qu'il ne baissera pas, mais il peut toujours vous bloquer pour les violations de TOS.

https://www.google.ie/search?q=whats+is+my+ip

Mais même quand ils me bloquent, ils me disent toujours mon adresse IP client dans le message d'erreur.

6
georgiecasey
curl ifconfig.me

ou

curl ifconfig.me/ip

Dans le cas où vous n'avez pas installé de boucle,

wget ifconfig.me/ip 2>/dev/null && cat ip

J'espère que cela t'aides.

3
ShellFish

http://myexternalip.com fournit ce type d'informations. Pour récupérer votre adresse IP, vous disposez de nombreuses options:

2
akira

Depuis que cette question a été posée il y a un certain temps, il existe maintenant un service Web gratuit conçu spécifiquement pour vous permettre de déterminer votre adresse IP par programme, appelé ipify .

$ curl 'https://api.ipify.org?format=json'

Résulte en

{"ip": "1.2.3.4" /* your public IP */}
2
atroberts20

Si le routeur derrière lequel vous parlez parle UPnP, vous pouvez toujours utiliser une bibliothèque UPnP pour la langue dans laquelle vous développez pour interroger le routeur pour son adresse IP externe.

2
Eld

Mon routeur WRT54G me le dit via sa fonction d'accès au routeur local (l'interface d'administration http (s)), et j'imagine que quelque chose de similaire pourrait être fait avec de nombreux autres appareils. Dans ce cas, la page d'entrée donne les octets de l'adresse IPv4 sur quatre lignes contenant cette phrase:

class = num maxLength = 3 size = 3 value = 'i' name = 'wan_ipaddr _ N ' id = 'wan_ipaddr _-- N '

i est la valeur d'octet et N est le numéro d'octet. Ce morceau de doggerel le récupère et l'analyse pour moi, gracieuseté de cygwin:

#! /usr/bin/env Perl
use strict;
use warnings 'all';

my( $account, $password ) = @ARGV;

open QUERY,
    "curl --sslv3 --user '$account:$password' https://Linksys/ --silent |"
    or die "Failed to connect to router";

my @ipaddr = ('x','x','x','x');

while( <QUERY> ) {
    $ipaddr[$2] = $1 if /value='(\d+)' name='wan_ipaddr_([0-3])/;
}
close QUERY;
print join('.', @ipaddr);

Il n'y a aucune garantie que cela fonctionnera avec toutes les versions du firmware du routeur.

Si votre routeur est configuré pour utiliser http pour cette interface, supprimez l'option --sslv3 curl et vous pouvez utiliser la notation décimale en pointillés pour adresser le routeur. Pour utiliser https avec les options de boucle ci-dessus, j'ai également fait ceci:

  1. Utilisé un navigateur pour récupérer le certificat auto-signé du routeur (enregistré sous Linksys.crt).

  2. Je l'ai ajouté à mon bundle CA:

    openssl x509 -in Linksys.crt -text >> /usr/ssl/certs/ca-bundle.crt
    
  3. Ajout de 'Linksys' à mon fichier d'hôtes (C:\Windows\System32\Drivers\etc\HOSTS sur ma boîte Win8), comme alias pour l'adresse du routeur. Si la notation décimale en pointillés est donnée à curl au lieu de cet alias, elle rejette la connexion en raison d'une incompatibilité de nom de sujet de certificat.

Alternativement, vous pouvez simplement utiliser l'option --insecure pour contourner la vérification des certificats, ce qui est probablement plus logique dans les circonstances.

1
sdenham

Si vous avez accès à un e-mail cloud (yahoo, google, hotmail), envoyez-vous un e-mail. Ensuite, affichez les en-têtes et vous devriez y voir votre adresse IP.

Je rechercherais la zone exacte mais les en-têtes peuvent varier de chaque implémentation, recherchez le reçu par et suivez-le jusqu'à ce que vous arriviez à quelque chose qui ressemble à envoyé par

EDIT: Cela répond à la façon de trouver l'adresse IP, pas à l'approche via PROGRAMMATIC

1
Wayne

whatismyip.com ou ipchicken.com sont très faciles à analyser.

Si vous avez un hébergeur ou des vps, vous pouvez également le déterminer, sans craindre qu'il ne tombe au hasard, vous laissant coincé.

0
whatsisname

ifcfg.me autorise la recherche via

nslookup
telnet
ftp
et http

fonctionne même avec IPv6

0
Eun