ブラウザを表示しているマシンの正確なIPアドレス(REMOTE_ADDR)を取得するには?

[上に] [前に] [次に]
まままままま [E-Mail] 1999/06/29(火) 21:26:00
ブラウザを表示しているマシンのIPアドレスを取得したいのですが、
どのようにすれば良いでしょうか。
CGIやサーブレットからIPを取得したいのですが、プロキシーサーバ
などを経由した場合など正しいIPアドレスが取得できません。
これを解決する良い方法はないのでしょうか?
JavaScriptなんかだとできそうなのですが、無理なのでしょうか??

徳明 1999/07/08(木) 12:46:07
無理だと思います。

ST 1999/07/08(木) 13:24:25
HTTP_* に情報が漏れている串もあったりしますので,そういうときは HTTP_* を全部抜いてしまいましょう。

Perlだとこんな感じになります。

foreach $key (sort (keys %ENV)) {
if ( $key =~ /^HTTP_/ ) {
print "$key: $ENV{$key}"; (ここの部分,出力方法によって変える)
}
}

でもガブリエナイなどの怪しいツールを使うとHTTP_*など簡単に改変できるし,そうした情報は一切漏らさない串もありますので,難しいところです。

ST 1999/07/08(木) 13:32:24
質問とはちょっとずれてますね(--;
すみません。

ひ*** 1999/07/09(金) 01:43:22
>JavaScriptなんかだとできそうなのですが、無理なのでしょうか??
できます。
# てーかさ、できるのは知っててやり方を聞きたかったんじゃないの?(予想)

<SCRIPT language="JavaScript"><!--
if ( navigator.appName == "Netscape" && navigator.javaEnabled() )
{
info = java.net.InetAddress.getLocalHost();
ipad = info.getHostAddress();
host = info.getHostName();

sWidth  = java.awt.Toolkit.getDefaultToolkit().getScreenSize().width;
sHeight = java.awt.Toolkit.getDefaultToolkit().getScreenSize().height;
if (sWidth == 0 || sHeight == 0)
{ YourSize = "We don't get Your Screen Size..."; }
else
{ YourSize = sWidth + " x " + sHeight; }

document.write('<TABLE align="center">');
document.write("<TR><TD nospan>Remote addr. </TD><TD> "+ipad+" </TD></TR>");
document.write("<TR><TD nospan>Host-Machine's Name </TD><TD> "+host+" </TD></TR>");
document.write("<TR><TD nospan>Screen Size </TD><TD> "+YourSize+" </TD></TR>");
document.write("</TABLE><BR>");
}
// -->
</SCRIPT>

おまけで相手の解像度まで抜き出してみました(笑

>if ( navigator.appName == "Netscape" && navigator.javaEnabled() )
とある通り、「ネスケ&&Javaを有効にしてある」で無いとダメ。
javaEnabled() はネスケ3以降で有効な関数。
http://www.tohoho-web.com/js/navigator.htm

>host = info.getHostName();
このホストは、Perlでいう $ENV{'REMOTE_HOST'}ではない。マシンネームである。
# 試してみれば分かる。

>HTTP_*など簡単に改変できるし
前にUserAgentを書き換えてどーのこーのっちゅー話があったんだけど
../199907/99070040.htm
HTTPヘッダっちゅーのは基本的に自己申告制なのでなんとでもなる。
ガブリエナイっちゅーのは
「ローカルに置いてあるJavaで書かれたプロクシ(ただしキャッシュ機能無し)」
と考えればわかりやすい?

ちなみに上のスクリプトは
「JavaScript見ながら入門」 発行:インプレス \1850+税
にあるのを参考にしました。 技術としては正当(?)なものです(笑)

んでは。

サラダ 1999/07/22(木) 02:11:58
>「ネスケ&&Javaを有効にしてある」で無いとダメ。

IEユーザなんですが、以前Javaチャットをしに行った際、
プロクシ経由でアクセスしていたのにリモホが表示されました。
(もちろんいたずら目的で串を通していた訳ではありません。)


IEでも串を通ってきた利用者のIPかリモホを突き止める方法を
ご存じの方がいらっしゃいましたら教えて下さい。

はじめの質問者ではないのですが、串を次々と変えて入り込んでくる
掲示板荒らしにホトホト嫌気がさしているもので、なんとか対策を
取りたいのです。よろしくお願いします。

ぺぱーど 1999/07/22(木) 02:34:16
>串を次々と変えて入り込んでくる掲示板荒らしにホトホト嫌気がさしているもので

この辺りも参考になるかと.
../199906/99060298.htm

IPを突き止め,プロバイダが会員削除したとしても
プロクシを次々と変えて入り込んでくるようなしつこい奴は
別のプロバイダに契約して再び戻って来ると思う.
IPを探る手間を掛けるよりプロクシを弾いた方が簡単だし早いよ.


どうでもいいけど「プロクシ」を「串」って言うのは馬鹿っぽい.

ひ*** 1999/07/22(木) 08:28:23
>IEでも串を通ってきた利用者のIPかリモホを突き止める方法を
>ご存じの方がいらっしゃいましたら教えて下さい。
JavaAppretを使えばできる。
ただ、ワタシはJavaは知らんのでソースは書けん(笑
でも、どーしてIPアドレスを抜き出すことにこだわるのかね?

>はじめの質問者ではないのですが、串を次々と変えて入り込んでくる
>掲示板荒らしにホトホト嫌気がさしているもので、なんとか対策を
>取りたいのです。よろしくお願いします。
使われたproxyを.htaccessにじゃんじゃんぶちこめばいいじゃん。
それが一番早いと思うが。

>どうでもいいけど「プロクシ」を「串」って言うのは馬鹿っぽい.
これは持論なのだけど、socks串やPerl串なんつー言い方があるので
「プロクシ」≒「串」であって、  # 機種依存文字かな? だったらスンマソン
「串」とは「$ENV{'REMOTE_ADDR'} を書きかえるもの全般」なのではないかと思っている。
# どっちにしてもワタシは使わないがね(笑

まままままま [E-Mail] 1999/07/22(木) 10:45:04
プロキシにこだわっていたのですが、取得するIPアドレスが必ずしも
正しくなくでも良い場合、どのようなブラウザでも使用できる
JavaScriptの記述方法も教えていただけないでしょうか。

ぺぱーど 1999/07/23(金) 00:12:55
>「串」とは「$ENV{'REMOTE_ADDR'} を書きかえるもの全般」なのではないかと思っている。
そうでは無くて「プロクシ」を「串」と『言う事』が.
ネットスケープを略して「ネスケ」はいいとして「寝助」とするのも同じ.
仲間内での遣り取りならともかく「質問/回答」を行うような所で「変な方言モドキ」を出すと
「『串』って何ですか?」「『寝助』って何ですか?」という
余計な雑音的な話になり兼ねない.

B-Cus 1999/07/23(金) 00:27:12
> JavaAppretを使えばできる。
 http://www2s.biglobe.ne.jp/~cru/library/java/index.html
ただし無理なブラウザでは無理です。
>どうでもいいけど「プロクシ」を「串」って言うのは馬鹿っぽい.
そうそう。あたしゃ恥ずかしくて串とか鯖なんて言えない。
聞いただけで赤面しちゃうもん。

ひ*** 1999/07/23(金) 02:47:53
>>「串」とは「$ENV{'REMOTE_ADDR'} を書きかえるもの全般」なのではないかと思っている。
>そうでは無くて「プロクシ」を「串」と『言う事』が.
なるほどね。
つーかこんなところで持論なんか持ち出したワタシの間違いですな。 すんまそん。

ところで...、
>プロキシにこだわっていたのですが、取得するIPアドレスが必ずしも
>正しくなくでも良い場合、どのようなブラウザでも使用できる
>JavaScriptの記述方法も教えていただけないでしょうか。
意味不明っす。
「正しくなくでも良い」とはどぅいぅ意味なん?
「正確なIPアドレスを取得するには?」ってスレッドたててるんだもの、正しくなきゃ意味無いでしょうが。
それにィ、ネスケ以外で使える書き方があるんなら、ハナからそれを書いてますってば。

上のスクリプト、実行してみました?
if ( navigator.appName == "Netscape" && navigator.javaEnabled() )
を外して、例えばIEで実行したならば
「javaは宣言されていません」
って言われます。

document.write っていうのがIEでも実行できるのは
document っていうオブジェクトが「IEの中」で定義されてるからです。
java.net.* っていうのがIEで実行できないのは
java っていうオブジェクトが「IEの中」で定義されてないからです。

んー。

まままままま 1999/07/23(金) 10:19:24
すいません。
正しくないIPアドレスじゃなくてプロキシのIPアドレスでした。

ひ*** 1999/07/23(金) 14:18:40
>java.net.* っていうのがIEで実行できないのは
>java っていうオブジェクトが「IEの中」で定義されてないからです。
んーと、ちょっとウソだぁね(汗

JavaScript から Java のオブジェクトを参照する機能のことを
"LiveConnect"っていいます。
んで、これは Netscape Navigator 3.0 Beta4 以降に組み込まれてるんですね。
http://ux01.so-net.ne.jp/~komori/doc/javamemo/whatis-liveconnect.html
IEその他でIPアドレスが参照できないのは、
この"LiveConnect"なる機能が備わっていないから。
つまり、
「JavaScriptでIPアドレスを取得する」わけではないんです。
# Mozzilaのコンパチ名乗るならこの辺も互換もたせてよ、とは単なる独り言。

つーわけで、CGIとは「全く」処理方法が違うので、
プロキシのアドレスを得られはしません。
# JavaScriptはブラウザ上で動くんだもの。

まままままま 1999/07/23(金) 15:11:27
[[解決]]
IP取得に関する現状はよくわかりましたので、
解決です。

皆さんいろいろとどうもありがとうございました。

[上に] [前に] [次に]