2017-03-11 21 views
0

アクセスログのクライアントマシン情報を取得しようとしています。 ASP.NET/C#でクライアントデバイス名とIPアドレスを取得するには?あなたはRequest.UserHostAddressプロパティから直接クライアントIPを取得することができますASP.NET/C#でクライアントデバイスの情報を取得する方法は?

+1

ユーザーのパブリックIPアドレスを取得する方法については、この記事を参照してください。http://stackoverflow.com/a/19286308/3126771 「クライアントデバイス」とはどういう意味ですか?あなたはブラウザエージェントについて話していますか? – Arun

答えて

2

public ActionResult Index() 
{ 
    string ip = Request.UserHostAddress; 
    ... 
} 

これは言われて、これは十分ではないかもしれない多くの状況があります。たとえば、WebサーバーがnginxやHAProxyなどのリバースプロキシの背後にあるとします。この場合、UserHostAddressは常にこのプロキシのIPを返します。

string ip = Request.Headers["X-Forwarded-For"]; 

また、その後、要求は多くのプロキシサーバを経由する場合はご注意を:あなたはこのような状況では、元のクライアントのIPアドレスを取得したい場合は、それらのリバースプロキシサーバを設定可能性があることを標準X-Forwarded-Forリクエストヘッダを使用することができますあなたは、クライアントに最も近いか等しいIPアドレスを取得したい場合

X-Forwarded-For: client, proxy1, proxy2 

あなたはこのような状況を考慮して必要とあります:X-Forwarded-Forヘッダは、各プロキシサーバのIPアドレスのカンマ区切りのリストを表しますこのリストから一番左のアドレスを抽出する必要があります。

「クライアントデバイス名」に関する限り、TCP/HTTPプロトコルにはそのような概念は組み込まれていないため、クライアントが取得できるようにするにはカスタムヘッダーまたはパラメータを使用してクライアントに提供する必要がありますそれはサーバー上にあります。

関連する問題