Tôi đang cố gắng để có được địa chỉ IP của người dùng từ ASP.NET MVC 5. Tôi đã nhìn lên những ví dụ khác nhau, chẳng hạn như những:địa chỉ khách hàng chỉ IP trả về cùng một địa chỉ mạng nội bộ
- https://stackoverflow.com/a/740431/177416
- https://stackoverflow.com/a/20194511/177416
- https://stackoverflow.com/a/3003254/177416
Họ đã sản xuất tất cả các kết quả tương tự: người dùng được xem nội mạng. Tôi đã có bạn bè thử điện thoại của họ (không có trên mạng). Đây là nỗ lực mới nhất của tôi:
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;
}
Nhật ký hiển thị 10.xxx.xx.xxx
cho tất cả yêu cầu (dựa trên nhật ký). Đây là địa chỉ nội bộ thay vì IP của ứng dụng khách kết nối với ứng dụng web. Các IsIpInternal()
trả về đúng luôn. Tôi đang làm gì sai?
Lưu ý rằng tôi bỏ qua các địa chỉ 192.168.x.x
và 172.16.xxx.xxx
là nội bộ.
Trang web của bạn có nằm sau proxy hoặc trình cân bằng tải không? –
@JohnWu, vâng, chúng tôi có một Citrix NetScaler mà tất cả các máy chủ của chúng tôi sử dụng. Có thể loại bỏ địa chỉ IP ban đầu không? – Alex