Ir al contenido principal

Recientemente, mientras se solucionaba un problema de conexión, surgió esta pregunta. El sistema OpenVOS se conectaba a un servidor público con acceso a Internet. El administrador del servidor hizo una pregunta sencilla: «¿Cuál es su dirección IP?». El sistema OpenVOS tiene una dirección IP de uno de los rangos privados de Internet definidos por RFC 1918, llamémosla 192.168.0.1. Esta dirección privada es traducida por un dispositivo NAT a una dirección pública cuando sale de la Internet privada y se conecta a Internet. El administrador necesitaba saber la dirección pública. El administrador del sistema OpenVOS no tenía ni idea y hubo una gran confusión para encontrar a un administrador de red que pudiera decírnoslo.

Hay muchos sitios web a los que puede conectarse para saber cuál es su dirección IP, PERO todos ellos utilizan HTTP y OpenVOS no tiene un navegador web que pueda utilizarse para conectarse a esos sitios.

Para asegurarme de no volver a encontrarme en la misma situación, escribí la siguiente macro de comando utilizando stcp_calls. Se puede utilizar para conectarse a un sitio web y mostrar el texto de la página web raíz del sitio. La visualización es un volcado hexadecimal-ascii de los datos devueltos, no es muy bonito, pero es legible. También hay otras limitaciones. En primer lugar, no todos los sitios funcionarán. Muchos sitios requieren que el navegador siga un enlace en la página raíz para obtener la dirección IP, algo que el navegador hace automáticamente, pero mi script no. Aun así, he encontrado algunos sitios que funcionan con el script, comprueba los comentarios en el script. Te sugiero que ejecutes la macro en un proceso iniciado.

La segunda limitación se debe a la forma en que el dispositivo NAT traduce las direcciones IP. Algunos dispositivos cambian todo el tráfico saliente para que tenga la misma dirección de origen, mientras que otros dispositivos tienen un conjunto de direcciones IP que utilizan como dirección IP de origen, seleccionando una dirección específica basada en un algoritmo interno. Lo único que puedo sugerir es que ejecute la macro varias veces y vea qué resultados obtiene. Todas las direcciones deben estar en la misma subred, pero no puedo predecir cuál será esa subred.

& find_my_ip_address comienza aquí
&
& Versión 1.00 10-12-06
& Versión 1.01 10-12-08 se ha añadido otro sitio a la lista
& stratus
&
& Este script se conecta a un sitio web y recupera la página raíz. Muchos sitios web
que muestran tu dirección IP requieren que el navegador siga un enlace en la
página raíz para mostrar tu dirección IP. Estos sitios web no funcionarán con este
script. He probado los siguientes sitios web y actualmente funcionan (aunque
no prometo nada para el futuro).

El resultado se muestra en formato hexadecimal/ascii. No es fácil de leer, pero
& debería poder localizar la dirección IP. Le sugiero que ejecute el
& script como un proceso iniciado y luego busque el resultado.
&
&       SERVIDOR               NOTAS
&       ------               -----
&    findmyip.com           busca «is:»
&    whatismyipaddress.com  último conjunto de bytes no nulos en el último búfer
&    www.ip-adress.com      busca «is:» y sí, es una d en la dirección
&    checkip.dyndns.org     último conjunto de bytes no nulos en el último búfer
&       
& Este software se proporciona «TAL CUAL», SIN NINGUNA GARANTÍA NI SOPORTE DE NINGÚN TIPO.
& El AUTOR RENUNCIA ESPECÍFICAMENTE A CUALQUIER GARANTÍA IMPLÍCITA
& DE COMERCIABILIDAD O IDONEIDAD PARA UN FIN DETERMINADO.  Esta exención de responsabilidad
& se aplica, a pesar de cualquier declaración verbal de cualquier tipo proporcionada por el
& autor o cualquier otra persona.
&
&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 aquí