【发布时间】:2017-12-14 16:41:12
【问题描述】:
我正在尝试从 ASP.NET MVC 5 获取用户的 IP 地址。我查找了各种示例,例如:
- https://stackoverflow.com/a/740431/177416
- https://stackoverflow.com/a/20194511/177416
- https://stackoverflow.com/a/3003254/177416
它们都产生了相同的结果:用户被认为是网络内部的。我有朋友尝试过他们的手机(不在网络上)。这是我最近的尝试:
private static Logger _logger = LogManager.GetCurrentClassLogger();
public static bool IsIpInternal()
{
var ipAddress = HttpContext.Current.Request.UserHostAddress;
var logEvent = new LogEventInfo(LogLevel.Info, _logger.Name, ipAddress);
_logger.Log(logEvent);
try
{
if (ipAddress != null)
{
var ipParts = ipAddress.Split(new[] { "." }, StringSplitOptions.RemoveEmptyEntries)
.Select(int.Parse).ToArray();
var isDebug = System.Diagnostics.Debugger.IsAttached;
if (ipParts[0] == 10)
{
return true;
}
}
}
catch (Exception e)
{
logEvent = new LogEventInfo(LogLevel.Error, _logger.Name, e.Message);
_logger.Log(logEvent);
return false;
}
return false;
}
日志显示所有请求的10.xxx.xx.xxx(基于日志)。这是一个内部地址,而不是连接到 Web 应用程序的客户端的 IP。 IsIpInternal() 总是返回 true。我做错了什么?
请注意,我忽略了 192.168.x.x 和 172.16.xxx.xxx 地址作为内部地址。
【问题讨论】:
-
您的网站是否在代理或负载平衡器后面?
-
@JohnWu,是的,我们有一个我们所有服务器都使用的 Citrix NetScaler。会不会是删除了原来的 IP 地址?
标签: c# asp.net-mvc