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?
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.
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.
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.
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.
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.
http://myexternalip.com fournit ce type d'informations. Pour récupérer votre adresse IP, vous disposez de nombreuses options:
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 */}
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.
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 '
Où 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:
Utilisé un navigateur pour récupérer le certificat auto-signé du routeur (enregistré sous Linksys.crt).
Je l'ai ajouté à mon bundle CA:
openssl x509 -in Linksys.crt -text >> /usr/ssl/certs/ca-bundle.crt
Alternativement, vous pouvez simplement utiliser l'option --insecure pour contourner la vérification des certificats, ce qui est probablement plus logique dans les circonstances.
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
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é.