ログイン名とパスワードが必要な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アドレスとマシン名をログに記録するためにコードの最小限の変更を必要とする方法を提案してください。
以下を使ってみましたか?
Request.UserHostAddress
Request.UserHostName
別のスレッドに投稿された次の回答を参照してください
クライアントコンピュータ名を試してください。
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
Dns.GetHostEntry(log.IPAddress).HostName
何らかの理由で、他の回答は私の共有ホスティングサーバーでは機能しませんでした。図に行く...
クライアントIPの場合:
System.Web.HttpContext.Current.Request.ServerVariables["**REMOTE_ADDR**"];
クライアントホスト名の場合:
System.Net.Dns.GetHostEntry(Request.ServerVariables["**REMOTE_Host**"]).HostName;