Recientemente, mientras se solucionaba un problema de conexión, surgió esta pregunta. El sistema OpenVOS se estaba conectando a un servidor público conectado a Internet. El administrador del servidor hizo una pregunta sencilla: «¿Cuál es tu dirección IP?». El sistema OpenVOS tiene una dirección IP perteneciente a uno de los rangos de direcciones privadas de Internet definidos por el RFC 1918; llamémosla 192.168.0.1. Esta dirección privada es traducida por un dispositivo NAT a una dirección pública al salir de la red privada y acceder a Internet. El administrador necesitaba saber la dirección pública. El administrador del sistema OpenVOS no tenía ni idea y hubo un gran revuelo para encontrar a un administrador de red que pudiera decírnosla.
Hay un montón de sitios web a los que puedes conectarte para saber cuál es tu dirección IP, PERO todos ellos utilizan HTTP y OpenVOS no dispone de un navegador web con el que conectarse a esos sitios.
Para asegurarme de no volver a encontrarme en la misma situación, he escrito la siguiente macro de comandos utilizando stcp_calls. Se puede utilizar para establecer una conexión con un sitio web y mostrar el texto de la página de inicio del sitio. La visualización consiste en un volcado hexadecimal-ASCII de los datos devueltos; no es muy elegante, pero resulta 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 realmente la dirección IP, algo que el navegador hace automáticamente, pero que mi script no hace. Aun así, he encontrado algunos sitios que funcionan con el script; consulta los comentarios del 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 modifican todo el tráfico saliente para que tenga la misma dirección de origen, mientras que otros disponen de un conjunto de direcciones IP que utilizan como dirección de origen, seleccionando una dirección específica según un algoritmo interno. Lo único que puedo sugerir es que ejecutes la macro varias veces y compruebes qué resultados obtienes. Todas las direcciones deberían pertenecer a la misma subred, pero no puedo predecir cuál será esa subred.
& find_my_ip_address comienza aquí\
&\
& Versión 1.00 12-10-06\
& Versión 1.01 12-10-08: se ha añadido otro sitio a la lista\ stratus& stratus\ stratus&\
& Este script se conecta a un sitio web y recupera la página de inicio. Muchos sitios web
& que muestran tu dirección IP requieren que el navegador siga un enlace en la
& página principal para mostrar tu dirección IP. Estos sitios no funcionarán con este
& script. He probado los siguientes sitios 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ías poder identificar la dirección IP. Te sugiero que ejecutes el
& script como un proceso en segundo plano y luego busques en 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 «adress»
& 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 NINGÚN TIPO DE SOPORTE. 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, independientemente de cualquier declaración verbal de cualquier tipo realizada 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í
|
