6

私は Java サーブレットを使用して Web アプリを開発しています。request.getRemoteAddr()内部から呼び出してユーザーの IP 情報を取得したいと考えていますprocessRequest(HttpServletRequest request,HttpServletResponse response)

しかし、間違った IP を返します。私はこの領域についてあまり詳しくないので、何が表示されているのかわかりません。おそらくプロキシです。

リモートアドレス: 127.0.0.1
リモートホスト: 127.0.0.1
x-forwarded-for : null

127.0.0.1 は私の IP ではありません。

しかし、私が行くとhttp://www.javascriptkit.com/script/script2/displayip.shtml、正しいものが表示されます。サーブレットを使用しているため、動的に生成された html ページへの .shtml がありません。どうすればよいですか? そして、なぜそのサイトのスクリプトは正しく表示できるのにrequest.getRemoteAddr()できないのでしょうか?

すべての回答に感謝します。サーバーにデプロイした後、期待どおりに機能することがわかりました。正しい住所を表示しました。

しかし、ローカル マシンで開発した場合でも、実際のサーバーで実行されているかのように絶対 IP を表示するように要求するにはどうすればよいでしょうか。それとも実行可能ですか?

4

5 に答える 5

19

表示されている IP アドレスは何ですか? 私の推測では、いくつかのプロキシまたは何かを変更するものがあると思います。(たとえば、そのスクリプト ページには、明らかな理由から、LAN 内の IP アドレスではなく、ADSL ルーターの IP アドレスが表示されていました。)

編集: 表示されている IP アドレスが 127.0.0.1 であることを示したので、答えはかなり明確です。ループバック アダプター (つまり、同じマシンへのショートカット) が表示されているのは、おそらく開発しているのと同じマシン。答えは完全に正しいです。

別のマシンから試してみると、より有用な IP アドレスが得られます。

于 2008-11-04T18:49:15.093 に答える
6

request.getHeader("X-Forwarded-For") を呼び出して X-Forwarded-For ヘッダーを確認し、返される IP を確認します。

于 2008-11-04T18:53:44.817 に答える
4

表示されている戻りIPはローカルホストIPです。これにより、問題が発生します。どこでテストし、どのようにサーブレットにアクセスしてテストしますか。

ローカル(開発)マシンでサーブレットを実行していて、同じマシンのブラウザからサーブレットを呼び出している場合、この出力は完全に正しいものです。

乾杯、

-R

于 2008-11-04T19:08:50.060 に答える
1

ローカルコンピューターでテストサーバーを実行し、http://localhost/で接続しています。ローカルインターフェイスで接続しているため、接続のソースもlocalhost、別名127.0.0.1です。

于 2008-11-04T19:09:32.057 に答える
1

http://localhost:8080/servletを使用してサーブレットを呼び出すと、通常、リモート アドレスとして "localhost" が取得されます。マシンの名前、つまりhttp://yourmachine/servletを使用すると、通常は「正しい」アドレスが得られます。

于 2008-11-04T22:00:58.963 に答える