跳转至主要内容

最近在排查连接问题时,出现了这样一个疑问。OpenVOS系统正连接到一台面向公共互联网的服务器。该服务器的管理员提出了一个简单的问题:"你们的IP地址是什么?"OpenVOS系统拥有一个来自RFC 1918定义的私有互联网地址范围的IP地址,假设为192.168.0.1。 该私有地址在离开私有网络进入互联网时,会通过NAT设备转换为公共地址。管理员需要知道这个公共地址。OpenVOS系统管理员对此一无所知,于是大家紧急寻找能提供答案的网络管理员。

互联网上有无数网站可供访问,它们都能告知你的IP地址,但这些网站均采用HTTP协议。而OpenVOS系统未内置可用于访问这些网站的网页浏览器。

为避免再次陷入相同困境,我使用stcp_calls编写了以下命令宏。它可用于连接网站并显示该网站根页面的文本内容。显示结果为返回数据的十六进制-ASCII转储格式,虽不美观但可读。此外还存在其他限制:首先,并非所有网站都能正常运行。 许多网站要求浏览器需点击根页面的链接才能获取实际IP地址——这是浏览器自动完成的操作,但我的脚本无法实现。不过我仍发现少数网站能与脚本配合使用,具体请参阅脚本中的注释。建议您在启动进程中运行该宏。

第二个限制源于NAT设备对IP地址的转换方式。部分设备会将所有外发流量统一转换为相同的源地址,而另一些设备则会预设一组用于源地址的IP地址池,并通过内部算法选择特定地址。我能给出的建议是多次运行该宏并观察结果。所有地址都应位于同一子网内,但我无法预测该子网的具体范围。

& find_my_ip_address 开始于此
&
& 版本 1.00 2006年10月12日
& 版本 1.01 2008年10月12日 向列表新增一个站点
&stratus
&
& 本脚本通过连接网站获取其根页面。 许多网站
& 显示IP地址时要求浏览器点击根页面的链接才能显示。此类网站无法配合本脚本使用。
& 我已测试以下网站目前有效(但不保证未来持续有效)。
&
& 输出结果以十六进制转储/ASCII格式显示。 虽不易阅读,但您应能识别IP地址。建议将脚本设为启动进程运行,随后搜索输出内容。
&
&       服务器               备注
&       ------               -----
&    findmyip.com           搜索"is:"字符串
&    whatismyipaddress.com  最后缓冲区中最后一个非空字节组
&    www.ip-adress.com      搜索"is:"字符串(注意adress中的d为单字母)
&    checkip.dyndns.org      最后缓冲区中最后一个非空字节组
&       
& 本软件按"原样"提供,不提供任何形式的保修或支持。作者特此声明不承担任何默示担保责任,包括适销性或特定用途适用性担保。  此免责声明
& 适用,无论作者或其他任何人提供何种口头陈述。
&
&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 结束于此