Ale*_*lex 25
编辑:还发现了关于IP相关的HTTP头一个有趣的问题在这里.
Edit2:正如我在上面提供的评论和链接中所提到的,HTTP_X_FORWARDED_FOR标题可能包含多个以逗号分隔的IP地址.我没有遇到这种情况,但想要对我的答案进行一些修改是必要的.
我使用此代码获取IP地址(IPAddress.None如果由于某种原因失败,则返回值):
/// <summary>
/// Gets the IP address of the request.
/// <remarks>
/// This method is more useful than built in because in some cases it may show real user IP address even under proxy.
/// <summary>
/// Gets the IP address of the request.
/// <remarks>
/// This method is more useful than built in because in some cases it may show real user IP address even under proxy.
/// The <see cref="System.Net.IPAddress.None" /> value will be returned if getting is failed.
/// </remarks>
/// </summary>
/// <param name="request">The HTTP request object.</param>
/// <returns></returns>
public static IPAddress GetIp(this HttpRequest request)
{
string ipString;
if (string.IsNullOrEmpty(request.ServerVariables["HTTP_X_FORWARDED_FOR"]))
{
ipString = request.ServerVariables["REMOTE_ADDR"];
}
else
{
ipString = request.ServerVariables["HTTP_X_FORWARDED_FOR"].Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
.FirstOrDefault();
}
IPAddress result;
if (!IPAddress.TryParse(ipString, out result))
{
result = IPAddress.None;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
Yon*_*ing 20
HttpContext.Current.Request.UserHostAddress;
要么
HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
要么
HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
| 归档时间: |
|
| 查看次数: |
10596 次 |
| 最近记录: |