Passa al contenuto principale

Recentemente, durante la risoluzione di un problema di connessione, è sorta questa domanda. Il sistema OpenVOS si stava connettendo a un server pubblico connesso a Internet. L'amministratore del server ha posto una semplice domanda: "Qual è il tuo indirizzo IP?" Il sistema OpenVOS ha un indirizzo IP appartenente a uno degli intervalli Internet privati definiti dalla RFC 1918, chiamato 192.168.0.1. Questo indirizzo privato viene tradotto da un dispositivo NAT in un indirizzo pubblico quando lascia la rete Internet privata e accede a Internet. L'amministratore aveva bisogno di conoscere l'indirizzo pubblico. L'amministratore del sistema OpenVOS non ne aveva idea e si è creata una certa confusione nel cercare un amministratore di rete che potesse fornirci questa informazione.

Esistono numerosi siti Internet a cui è possibile connettersi per conoscere il proprio indirizzo IP, ma tutti utilizzano il protocollo HTTP e OpenVOS non dispone di un browser web che consenta di connettersi a tali siti.

Per assicurarmi di non trovarmi più nella stessa situazione, ho scritto la seguente macro di comando utilizzando stcp_calls. Può essere utilizzata per connettersi a un sito web e visualizzare il testo della pagina web principale del sito. La visualizzazione è 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 nella 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.

La seconda limitazione è dovuta 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, altri dispositivi dispongono di una serie di indirizzi IP che utilizzano come indirizzo IP di origine, selezionando un indirizzo specifico in base a un algoritmo interno. Tutto quello che posso suggerire è di eseguire la macro più volte e vedere cosa si ottiene. 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 10-12-06
& Versione 1.01 10-12-08 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 nella
pagina principale per visualizzare il tuo indirizzo IP. Questi siti non funzionano con questo
script. Ho testato i seguenti siti e attualmente funzionano (anche se
non posso garantire che funzioneranno anche in futuro).

L'output viene visualizzato in formato hex-dump/ascii. Non è facile da leggere, ma
dovresti riuscire a individuare l'indirizzo IP. Ti consiglio di eseguire lo
script come processo avviato e poi cercare l'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ì, è una d in adress
&    checkip.dyndns.org     ultima serie di byte non nulli nell'ultimo buffer
&       
& Questo software è fornito "così com'è", SENZA ALCUNA GARANZIA O ASSISTENZA DI ALCUN TIPO. L'AUTORE DECLINA SPECIFICAMENTE QUALSIASI GARANZIA IMPLICITA DI COMMERCIABILITÀ O IDONEITÀ PER UN PARTICOLARE SCOPO.
& Questo disclaimer
& si applica, nonostante qualsiasi dichiarazione verbale di qualsiasi tipo fornita dall'autore o da chiunque altro.  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 termina qui