11

ユーザーがサイトにアクセスした場所の IP アドレスに関する統計を収集したところ、172.16.16.1 と 172.16.16.248 の 2 つの IP アドレスしか表示されていないことに気付きました。IPアドレスを決定するために使用するプロパティは

Request.UserHostAddress

IP アドレス情報が失われる理由は何ですか? すべてのユーザーは世界中から集まっているため、2 つのプロキシだけの背後にいることはできません。

4

7 に答える 7

26

このようなことがしたいかもしれません。

string SourceIP = String.IsNullOrEmpty(Request.ServerVariables["HTTP_X_FORWARDED_FOR"]) ? Request.ServerVariables["REMOTE_ADDR"] : Request.ServerVariables["HTTP_X_FORWARDED_FOR"].Split(",")[0];

HTTP_X_FORWARDED_FOR ヘッダーは、プロキシ サーバーの背後にある IP アドレスを取得します。

理由を詳しく説明しているこのページを参照してください。ユーザーの実際の IP を取得する

于 2008-10-14T10:30:12.313 に答える
10

これはリバース プロキシの動作のように見えます。リバース プロキシを使用すると、クライアントはプロキシに接続し、それ自体がサーバーへの新しい接続を開きます。ASP.NET は着信接続の情報を使用してユーザー アドレスを入力するため、リバース プロキシのアドレスを取得します。

実際にこの構成になっている場合は、正しい情報を取得するためにリバース プロキシの助けが必要になります。ほとんどのリバース プロキシは、クライアントの実際の IP アドレスを使用して、HTTP 要求にヘッダーを追加する可能性を提供します。プロキシのドキュメントを確認してください。

于 2008-10-14T10:04:03.800 に答える
6

Dave Anderson の回答に基づいて、一連のリバース プロキシを考慮したスニペットを次に示します。

string forwardedFor = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

string ipStr = string.IsNullOrWhiteSpace(forwardedFor) 
                   ? Request.ServerVariables["REMOTE_ADDR"] 
                   : forwardedFor.Split(',').Select(s => s.Trim()).First();
于 2012-10-31T12:04:56.383 に答える
1

Request.ServerVariables("REMOTE_ADDR") が機能しません。この問題は、サーバーがおそらく何らかのプロキシの背後にある (またはネットワーク経由でインターネットに接続されている) か、ルーター設定が NAT (ネットワーク アドレス変換) として設定されているためです。この手法では IP がサーバーに渡されません。このような状況では、Asp.net を使用して IP アドレスを取得することはできませんが、Java はどのような場合でも IP アドレスを取得できるアプレットを提供します。

(Netscape、Mozilla、および Firefox のみ。Java を有効にする必要があります)

<script language="javascript" type="text/javascript">   

if (navigator.appName.indexOf("Netscape") != -1){
ip = "" + java.net.InetAddress.getLocalHost().getHostAddress();
document.write("<b>Your IP address is " + ip+'</b>');
}
else {
document.write("<b>IP Address only shown in Netscape with Java enabled!</b>");
}

</script>
于 2009-07-03T13:42:27.497 に答える
1

NAT/リバース プロキシの背後にいると仮定するため、以下を使用する必要があると思います。

Request.ServerVariables("REMOTE_ADDR") 

ほとんどの場合、172.16.0.0/12 はプライベート LAN で、172.16.16.248 は自分のアドレス、172.16.16.1 はルーター/プロキシのアドレスです。

于 2008-10-14T09:44:36.257 に答える
0

そこにリストした 2 つのアドレスは、非公開として定義された範囲の 1 つからのものです。(説明はこちらをご覧ください)

自分のファイアウォールの内部アドレスを取得しているように聞こえますか?

于 2008-10-14T10:10:57.203 に答える