はじめまして、高麗といいます。
VBで、グローバルIPを取得するにはどうすればいいのでしょうか?
ローカルは、取得できるんですが、ネットにつないでいるとき
IPが毎回違うので、取得したいとおもいました。
ま、診断君とか行ってもいいんですが、めんどうなので。
環境は、XPのPROで、フレッツADSLです。
で、そこらにあるフリーのツールでは、
なかなかグローバルのIPは、取得できません。
できても、ルーターのIPです。
(プライベートでもない、ルーターのIPだと思います)
宜しくお願いします。
グローバルアドレスはプロバイダが割り当てるものですから
毎回違います。取得方法ですが、そういうのは恐らくCGIを使って
するもので、VBは畑違いだと思います。
どうしてもやりたい場合は、自前のホームページスペースに自作CGIを
設置してそこにアクセスさせ、ローカルにファイルとして保存。
それを解析する、という方法は如何でしょう。
(診断君等を利用してもいいですがローカル側のファイル処理が大変です。)
例:Cの場合
/* サーバーかそれと同じOS、CPU環境でコンパイル)*/
/* telnetでgcc なんとか.c -o なんとか.cgiとするとできます。*/
#include <stdio.h>
int main(){
printf("Content-type: text/html\n\n");
printf("%s",getenv("REMOTE_ADDR");
return 0;
}
パール
#!/usr/local/bin/perl
print "Content-type: text/html\n\n";
print $ENV{REMOTE_ADDR};
exit;
素朴な疑問ですが、いったい何に使うのでしょうか?
差し支えなければ知りたいです。
Cのprintf("%s",getenv("REMOTE_ADDR"));のところ
括弧が足りませんでした。
テキスト出力のCGIを作って、そこでIP取得
それをVBのソフトでじかにダウンロード
ダウンロードしたものを、StrConvで変換したあと、のぞく。
テキスト出力CGIは、サーバーがSSIに対応していないと使えないように思えますけど、
結構有効かもしれない手段ですよー^^;
(たとえば、リモートファイルの更新日を取得したりとか…)
ファイルのダウンロードのサンプルはここ(http://hp.vector.co.jp/authors/VA015521/)にあります。
InternetExplorerの4以上が必要…かもしれません。
なんかVBでは、無理っぽいですね。
どういう物が欲しいか、参考URLをだします。
http://www.big.or.jp/~minowa/software/index.html
Get IP Addressってソフトです。
これ使えって言われるときついんですが、友達の環境だとこれでもグローバルIPが取得出来ないので自作しようと思ったのです。
念のため言いますが、CGIを使うんであればここに書き込みしていません。
> http://www.big.or.jp/~minowa/software/index.html
> Get IP Addressってソフトです。
えーと、多分このソフトは
ローカルがわにあるIPアドレス(Windowsフォルダにある"winipcfg"というソフトで確認できます)
を、レジストリなり、どこかから取得しているんでしょうね。
グローバルIPアドレスとは違うものです(同じ場合もあるんでしょうけど…)。
ちょっとローカルがわの処理では無理ですね。
> 念のため言いますが、CGIを使うんであればここに書き込みしていません。
うーん、CGIというのは、HTMLや画像を作るものだと思っていませんか?
CGIはスクリプトにしたがってファイルを作り上げているだけです。
ブラウザやその他の方法でCGIをダウンロードするときには、
それがCGIだと(ローカルがわのシステムは)意識していません。
(サーバーがわでスクリプトを実行したあと、Content-typeヘッダにしたがったファイルとして送ってくるので)
だから、よくあるようなHTMLを生成したりするようなCGIではなく、
ただのテキストを出力するCGIを(APIなどを使って)ダウンロードすれば、
それはVBのなかでは、String型の変数と同じように扱えます。
(サーバーのOSはこちらとちがうでしょうから、変換が必要です。strconv関数をつかいます)
まあ、IPアドレスがパソコンのメモリ上のどこにもないなら、ダウンロードも何もできなくなるはずなので、
メモリのどこかにはあるんでしょうけど…。
特殊な処理をすると、全ての環境に対応できなくなるかもしれないので、
普通の手段を使った方がいいと思います。
わたしのところにIPアドレスではありませんけど、
サーバー上のデータを取得するためのテキスト出力CGIがあります。
参考にしてみてください。
http://homepage2.nifty.com/_omp/Download/ProgDiff.lzh
以下が実行例です、わたしのホームページの入り口の情報を見ます。各行の情報については、
上のLZHファイルの中のCGIファイルをよんでみてください。
http://hpcgi2.nifty.com/_omp/ProgDiff.cgi?FileName=../homepage/Index.html
(さっきIPアドレス取得機能もつけました、通常の方法では取得できないようになっています。注意してお使いください)
こうして下さい。
1.Inetコントロールの参照設定をする。
2.フォームにInetコントロールとテキストコントロールを貼り付ける。
3. 下のコードを貼り付ける。
Private Sub Form_Load()
Dim str1() As String
Dim str2() As String
Dim i As String
Form1.Visible = False
Text1.Text = ""
Inet1.URL = "http://taruo.net/e/"
Text1.Text = Inet1.OpenURL
str1 = Split(Text1.Text, " ")
Text1.Text = str1(51)
str2 = Split(Text1.Text, "-")
MsgBox "Your IP adress is " & str2(0)
Unload Me
End Sub
以上。
あなたはCGIがお嫌いなようですが、何か嫌な事でもあったんですかね。
Dim i as integerでした。
上のコードでもなぜか動きますが。
またまたすいません。よく考えたらiはいりませんね。
HTMLを解析するためのテストコードで使っていたんですが
書かなくても書いてもいいです。
帰ってきたばかりで10分でつくったもので気が動転してるようです。
ほんとごめんなさい。
トラキチさん、ちょっと改造してうまくいきました。
有難う御座います。
あと、CGI、別に嫌いじゃないです。むしろ好きです。
たかみちえさん、色々助言ありがとうございます。
参考にさせてもらいました。
無事解決しました。
どうもです。