web-dev-qa-db-ja.com

ASP.netにクライアントのIPアドレスとマシン名を記録する方法

ログイン名とパスワードが必要なWebアプリケーションをASP.netで開発しています。

このWebアプリケーションにアクセスしているクライアントのIPアドレスとマシン名をログに記録したいと思います。

ロギングにlog4netを使用しています。

このコードを試しましたが、クライアントマシン名の代わりにIIS-7を使用してこのWebアプリケーションをデプロイした後、サーバーマシンのホスト名がログに記録されます。

Login Page Page_Load 方法:

protected void Page_Load(object sender, EventArgs e)
{
    log4net.GlobalContext.Properties["Hostname"] = Dns.GetHostName();
}

Web.Configの変更:

 <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date %property{Hostname} [%thread] %-5level %logger - %message%newline" />
 </layout>

その本当に巨大なプロジェクトなので、クライアントのIPアドレスとマシン名をログに記録するためにコードの最小限の変更を必要とする方法を提案してください。

4
user3264676

以下を使ってみましたか?

Request.UserHostAddress

Request.UserHostName

別のスレッドに投稿された次の回答を参照してください

クライアントのIPアドレスとコンピューター名を取得しますか?

15
Sam

クライアントコンピュータ名を試してください。

string[] computer_name = System.Net.Dns.GetHostEntry(Request.ServerVariables["remote_addr"]).HostName.Split(new Char[] { '.' });
  String ecname = System.Environment.MachineName;
            txtComputerName.Text = computer_name[0].ToString();

クライアントIPアドレスの場合。

Request.ServerVariables["REMOTE_ADDR"]

これもチェックしてください... https://stackoverflow.com/a/19286308/3156647

5
tarzanbappa
Dns.GetHostEntry(log.IPAddress).HostName

何らかの理由で、他の回答は私の共有ホスティングサーバーでは機能しませんでした。図に行く...

0
Alexandru

クライアントIPの場合:

System.Web.HttpContext.Current.Request.ServerVariables["**REMOTE_ADDR**"];

クライアントホスト名の場合:

System.Net.Dns.GetHostEntry(Request.ServerVariables["**REMOTE_Host**"]).HostName;
0
Satish Asnani