最近、接続問題のトラブルシューティング中にこの疑問が生じた。OpenVOSシステムがインターネットに公開されているサーバーに接続していた。サーバー管理者が単純な質問をした。「あなたのIPアドレスは何ですか?」OpenVOSシステムはRFC 1918で定義されたプライベートインターネット範囲の一つからIPアドレスを取得しており、仮に192.168.0.1とする。 このプライベートアドレスは、プライベートインターネットを離れてインターネットへ接続する際、NATデバイスによってパブリックアドレスに変換されます。管理者はパブリックアドレスを知る必要がありました。OpenVOSシステムの管理者は全く見当がつかず、教えてくれるネットワーク管理者を慌てて探す羽目になりました。
インターネット上には、あなたのIPアドレスを教えてくれるウェブサイトが無数に存在します。しかし、それらのサイトはすべてHTTPを使用しており、OpenVOSにはそれらのサイトに接続できるウェブブラウザが搭載されていません。
同じ状況に陥らないようにするため、stcp_callsを使用して以下のコマンドマクロを作成しました。これはウェブサイトへの接続を行い、そのサイトのルートウェブページのテキストを表示するために使用できます。表示は返されたデータの16進数-ASCIIダンプであり、見栄えは良くありませんが可読性はあります。他にもいくつかの制限があります。まず、すべてのサイトで動作するわけではありません。 多くのサイトでは、IPアドレスを取得するためにブラウザがルートページのリンクを自動的に追跡する必要がありますが、このスクリプトではその動作は行われません。それでもスクリプトで動作するサイトをいくつか見つけました。スクリプト内のコメントを参照してください。このマクロは開始済みプロセスで実行することをお勧めします。
2つ目の制限は、NATデバイスがIPアドレスを変換する方法に起因します。一部のデバイスは、すべての送信トラフィックを同一の送信元アドレスに変更します。他のデバイスは、送信元IPアドレスとして使用するIPアドレスのセットを持ち、内部アルゴリズムに基づいて特定のアドレスを選択します。提案できるのは、マクロを複数回実行して結果を確認することだけです。すべてのアドレスは同じサブネットワーク上にあるはずですが、そのサブネットワークがどのものになるかは予測できません。
& find_my_ip_address はここから始まります
&
& バージョン 1.00 2006年10月12日
& バージョン 1.01 2008年10月12日 リストに別のサイトを追加
&[email protected]
&
& このスクリプトはウェブサイトに接続し、ルートページを取得します。 多くのサイトでは、IPアドレスを表示するために、ブラウザがルートページ上のリンクをたどる必要があります。これらのサイトはこのスクリプトでは動作しません。以下のサイトは現在動作を確認済みです(ただし将来の動作は保証しません)。
&
& 出力は16進ダンプ/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 はここで終了
|
