获取本机IP地址
牛娜新闻发布系统进行的时候,发表评论需要获取发表者的本机IP地址,但是使用 string userIp = Request.ServerVariables[“Remote_ADDR”]; 只能获得“::1”这种格式,于是在网上查了又查,造成这种现象的原因可能是因为Ipv6,解决方法如下:
/// <summary>
/// 取得客户端主机IPv4 位址
/// </summary>
/// <returns></returns>
public static string GetClientIPv4()
{
string ipv4 = String.Empty;
foreach (IPAddress ip in Dns.GetHostAddresses(GetClientIP()))
{
if (ip.AddressFamily.ToString() == "InterNetwork")
{
ipv4 = ip.ToString();
break;
}
}
if (ipv4 != String.Empty)
{
return ipv4;
}
// 原作使用 Dns.GetHostName 方法取回的是 Server 端资讯,非 Client 端。
// 改写为利用 Dns.GetHostEntry 方法,由获取的 IPv6 位址反查 DNS 记录,
// 再逐一判断何者属IPv4 协定,即可转为 IPv4 地址。
foreach (IPAddress ip in Dns.GetHostEntry(GetClientIP()).AddressList)
{
if (ip.AddressFamily.ToString() == "InterNetwork")
{
ipv4 = ip.ToString();
break;
}
}
return ipv4;
}
/// <summary>
/// 取得客戶端主机地址
/// </summary>
public static string GetClientIP()
{
if (null == HttpContext.Current.Request.ServerVariables["HTTP_VIA"])
{
return HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
else
{
return HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
}
}
然后我们只需要调用GetClientIPv4()这个方法即可。
感谢您的阅读~
还没有评论,来说两句吧...