Passer au contenu principal

Cette question s'est posée récemment lors du dépannage d'un problème de connexion. Le système OpenVOS se connectait à un serveur public accessible depuis Internet. L'administrateur du serveur a posé une question simple : « Quelle est votre adresse IP ? » Le système OpenVOS possède une adresse IP provenant d'une des plages Internet privées définies par la RFC 1918, appelons-la 192.168.0.1. Cette adresse privée est traduite par un dispositif NAT en une adresse publique lorsqu'elle quitte l'Internet privé et passe sur l'Internet. L'administrateur avait besoin de connaître l'adresse publique. L'administrateur du système OpenVOS n'en avait aucune idée et il a fallu se démener pour trouver un administrateur réseau qui puisse nous la communiquer.

Il existe un grand nombre de sites Internet auxquels vous pouvez vous connecter pour connaître votre adresse IP, MAIS ils utilisent tous le protocole HTTP et OpenVOS ne dispose pas d'un navigateur Web permettant de se connecter à ces sites.

Pour m'assurer de ne plus me retrouver dans la même situation, j'ai écrit la macro de commande suivante à l'aide de stcp_calls. Elle permet de se connecter à un site web et d'afficher le texte de la page d'accueil du site. L'affichage est un dump hex-ascii des données renvoyées, ce n'est pas très esthétique mais c'est lisible. Il existe également d'autres limitations. Tout d'abord, tous les sites ne fonctionnent pas. De nombreux sites exigent que le navigateur suive un lien sur la page d'accueil pour obtenir l'adresse IP, ce que le navigateur fait automatiquement, mais pas mon script. J'ai tout de même trouvé quelques sites qui fonctionnent avec le script, consultez les commentaires dans le script. Je vous suggère d'exécuter la macro dans un processus démarré.

La deuxième limitation est due à la manière dont le dispositif NAT traduit les adresses IP. Certains dispositifs modifient tout le trafic sortant afin qu'il ait la même adresse source, tandis que d'autres disposent d'un ensemble d'adresses IP qu'ils utilisent comme adresse IP source, en sélectionnant une adresse spécifique sur la base d'un algorithme interne. Tout ce que je peux vous suggérer, c'est d'exécuter la macro plusieurs fois et de voir ce que vous obtenez. Toutes les adresses devraient se trouver sur le même sous-réseau, mais je ne peux pas prédire quel sera ce sous-réseau.

& find_my_ip_address commence ici
&
& Version 1.00 10-12-06
& Version 1.01 10-12-08 ajout d'un autre site à la liste
& stratus
&
& Ce script se connecte à un site web et récupère la page racine. De nombreux sites
& qui affichent votre adresse IP exigent que le navigateur suive un lien sur la
& page d'accueil pour afficher votre adresse IP. Ces sites ne fonctionneront pas avec ce
& script. J'ai testé les sites suivants et ils fonctionnent actuellement (bien que
& je ne puisse rien promettre pour l'avenir).
&
& Le résultat s'affiche au format hexadécimal/ascii. Ce n'est pas facile à lire, mais
vous devriez pouvoir repérer l'adresse IP. Je vous suggère d'exécuter le
script en tant que processus démarré, puis de rechercher le résultat.
&
&       SERVEUR               REMARQUES
&       ------               -----
&    findmyip.com           recherchez « is: »
&    whatismyipaddress.com  dernière série d'octets non nuls dans le dernier tampon
&    www.ip-adress.com      recherchez « is: » et oui, il s'agit bien d'un d dans l'adresse
&    checkip.dyndns.org     dernière série d'octets non nuls dans le dernier tampon
&       
& Ce logiciel est fourni « TEL QUEL », SANS AUCUNE GARANTIE NI AUCUN SOUTIEN DE QUELQUE NATURE QUE CE SOIT. L'AUTEUR DÉCLINE SPÉCIFIQUEMENT TOUTE GARANTIE IMPLICITE DE QUALITÉ MARCHANDE OU D'ADÉQUATION À UN USAGE PARTICULIER.
&  Cette clause de non-responsabilité
s'applique, malgré toute déclaration verbale de quelque nature que ce soit fournie par l'
auteur ou toute autre personne.
&
&begin_parameters
SERVER server:string,req
&end_parameters
&
&if (process_type) = 'batch' &then &do
&echo no_input_lines no_command_lines no_macro_lines
&end
&
&attach_input
stcp_calls
socket
buf_edit
0 47 45 54 20 2F 20 48 54 54 50 2F 31 2E 30 0a 0a

connect -name &SERVER& -port 80
send -len 16
&label AGAIN
..start_logging (process_dir)>recv
recv -len 1000
..stop_logging
&set_string LINE (contents (process_dir)>recv 1)
..display_line &LINE&
&if (index (contents (process_dir)>recv 1) ' 0 bytes') > 0 &then &goto QUIT
&if (index (contents (process_dir)>recv 1) 'bytes') = 0 &then &goto QUIT
buf_dump
&goto AGAIN
&label QUIT
quit
&
& find_my_ip_address se termine ici