- ベストアンサー
Winsock(またはWinInet)でグローバルIPを調べたい
WinsockかWiniNetのいずれかを用いてグローバルIPアドレスを 取得することは可能でしょうか? 192.~のようなプライベートIPならWinsock関数を組み合わせて取得できたのですが・・。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>今回は2の方法で以降と思うのですが、CGIを踏ませる、 >ということはブラウザを開く関数を使うということでしょうか? ブラウザを開く必要はありませんよ。 ブラウザは無関係です。 >アクセスしたことにするにはブラウザが開いていた記憶があります。 何か勘違いされていると思います。 winsockでもWinInetでも可能ですが、ごく普通にページの取得を行えばWebサーバ上でCGIが実行され、結果を受け取ることができます。 WinInetならば、 InternetOpen() InternetOpenUrl() InternetReadFile() を順に実行して受け取ったデータからIPアドレスに該当する部分を切り出せば良いです。(InternetCloseHandle()も忘れずに・・・) (具体的には”WinInet ファイル読み込み”といったようなキーワードで検索すれば色々参考になるサイトがあると思います。) CGIでは$ENV{'REMOTE_ADDR'}(例:Perlの場合)を出力するようにしておいてください。
その他の回答 (2)
- kamisui
- ベストアンサー率50% (2/4)
こんにちは。 192.x.x.xが取得できるということはLANのプライベートアドレスですね。 ネットワーク構成によりますが、グローバルアドレスの情報はルータが持っていると思います。 現実的に考えられるやり方は以下の2つでしょうか。 1.UPnPをつかってルータから取得 *ルータが対応している必要あり 2.どこかインターネット上のWebサーバにCGIを設置してアクセス元のIPアドレスを返すようにしておき、それをHTTPをつかって取得する 2が可能なら簡単です。 1の場合はUPnP、GetExternalIPAddressをキーワードに検索してみてください。実装は少し難しいです。
お礼
親切な回答ありがとうございます。 ちょっと追加で質問させて頂きたいのです。 今回は2の方法で以降と思うのですが、CGIを踏ませる、 ということはブラウザを開く関数を使うということでしょうか? WinsockにもWinINetにそんな関数があるのですが、確かURL先の ファイルの内容を取得・・まではブラウザを開かずに可能ですが、 アクセスしたことにするにはブラウザが開いていた記憶があります。 ブラウザを開かせず(表向きには見せずに)に対象のURLにアクセスして CGIを動作させることができるような関数があるのでしょうか?
- D-Matsu
- ベストアンサー率45% (1080/2394)
「ルータの内側からルータが持ってるグローバルIPアドレスを引けるか」という意味でしたら無理です。 その情報はOSが持っていないので。
お礼
なるほど・・原理的に難しいのですね。ありがとうございます。
お礼
なるほど!これを見て解決しました。 本当にありがとうございます!感謝の極みです!