Recentemente, durante la risoluzione di un problema di connessione, è sorta questa domanda. Il sistema OpenVOS si stava connettendo a un server pubblico esposto a Internet. L'amministratore del server ha posto una semplice domanda: «Qual è il tuo indirizzo IP?». Il sistema OpenVOS possiede un indirizzo IP appartenente a uno degli intervalli di rete privata definiti dalla RFC 1918; chiamiamolo 192.168.0.1. Questo indirizzo privato viene tradotto da un dispositivo NAT in un indirizzo pubblico quando esce dalla rete Internet privata ed entra in Internet. L'amministratore aveva bisogno di conoscere l'indirizzo pubblico. L'amministratore del sistema OpenVOS non ne aveva idea e si è scatenata una corsa per trovare un amministratore di rete che potesse dircelo.
Esistono moltissimi siti web a cui è possibile connettersi per scoprire qual è il proprio indirizzo IP, MA utilizzano tutti il protocollo HTTP e OpenVOS non dispone di un browser web che possa essere utilizzato per connettersi a tali siti.
Per evitare di ritrovarmi di nuovo nella stessa situazione, ho scritto la seguente macro di comando utilizzando stcp_calls. Può essere utilizzata per stabilire una connessione con un sito web e visualizzare il testo della pagina web principale del sito. La visualizzazione consiste in un dump esadecimale-ASCII dei dati restituiti: non è molto elegante, ma è leggibile. Ci sono anche altre limitazioni. Innanzitutto, non tutti i siti funzionano. Molti siti richiedono che il browser segua un link sulla pagina principale per ottenere effettivamente l'indirizzo IP, cosa che il browser fa automaticamente ma che il mio script non fa. Tuttavia ho trovato alcuni siti che funzionano con lo script; controllate i commenti nello script. Vi suggerisco di eseguire la macro in un processo avviato.
Il secondo limite è dovuto al modo in cui il dispositivo NAT traduce gli indirizzi IP. Alcuni dispositivi modificano tutto il traffico in uscita in modo che abbia lo stesso indirizzo di origine, mentre altri dispongono di un insieme di indirizzi IP da utilizzare come indirizzo di origine, selezionando un indirizzo specifico in base a un algoritmo interno. L'unico consiglio che posso darti è di eseguire la macro più volte e vedere quali risultati ottieni. Tutti gli indirizzi dovrebbero trovarsi sulla stessa sottorete, ma non sono in grado di prevedere quale sarà tale sottorete.
& find_my_ip_address inizia qui\
&\
& Versione 1.00 12-10-06\
& Versione 1.01 08-12-10: aggiunto un altro sito all'elenco\
& stratus\
&\
& Questo script si connette a un sito web e recupera la pagina principale. Molti siti
& che visualizzano il tuo indirizzo IP richiedono che il browser segua un link sulla
& pagina principale per visualizzare il tuo indirizzo IP. Questi siti non funzioneranno con questo
& script. Ho testato i seguenti siti e attualmente funzionano (anche se
& non faccio promesse per il futuro).
&
& L'output viene visualizzato in formato hex-dump/ascii. Non è facile da leggere, ma
& dovresti riuscire a individuare l'indirizzo IP. Ti suggerisco di eseguire lo
& script come processo in background e poi cercare nell'output.
&
& SERVER NOTE
& ------ -----
& findmyip.com cerca "is:"
& whatismyipaddress.com ultima serie di byte non nulli nell'ultimo buffer
& www.ip-adress.com cerca "is:" e sì, c'è una d in adress
& checkip.dyndns.org ultima serie di byte non nulli nell'ultimo buffer
&
& Questo software viene fornito "COSÌ COM'È", SENZA ALCUNA GARANZIA O ALCUN tipo di support. L'AUTORE DECLINA SPECIFICAMENTE QUALSIASI GARANZIA IMPLICITA di commerciabilità o idoneità per uno scopo particolare. La presente esclusione di responsabilità
& si applica, nonostante qualsiasi dichiarazione verbale di qualsiasi tipo fornita dall'autore o da chiunque altro.
&
&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 finisce qui
|
