C# MVC 获取客户端IP详细地址

现在想要获取ip的所属地,在不使用第三方的情况下,不知道该怎么写,请大神指教。

不用第三方,你就要自己建立数据库,去实现ip和区域的对应。

好比通过电话号码找对应的机主,电话号码本身是算不出机主名字的,这完全是一个人为分配的过程。而且就像同一个人,可能开新的电话,可能关闭掉原来的号码不用了,也可能这个号码又给另一个人用了。

ip地址也一样,它对应的区域也是在不断变动的。你自己建数据库还存在一个时效性的问题,随着时间的推移,慢慢就不准了。

所以你自己衡量一下这么做是否划算。

像一些大公司,因为他们有大量的手机客户端,所以可以找到ip->gps的对应关系,自动维护数据库。还有一些公司,可以直接从电信部门拿到ip分配表,所以他们的数据比较可靠。小公司不是专门做这个的,就没有这个能力了。

using System.Net;

public string GetIPAdd()
{
string IP4Address = String.Empty;
foreach (IPAddress IPA in Dns.GetHostAddresses(Dns.GetHostName()))
{
if (IPA.AddressFamily.ToString() == "InterNetwork")
{
IP4Address = IPA.ToString();
break;
}
}
return IP4Address;
}

var ip = System.Web.HttpContext.Current.Request.UserHostAddress; 这个就能获取ip地址

1、在控制器的操作方法中,可以通过 HttpContext.Current.Request 属性访问当前请求的上下文信息。

2、使用 HttpContext.Current.Request.UserHostAddress 可以获取客户端的 IP 地址。这将返回客户端的公共 IP 地址。

3、要获取客户端的详细地址,可以通过以下步骤进行操作:

a. 使用 HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] 获取代理服务器地址(如果有)。

b. 使用 HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"] 获取最后一个代理服务器后的 IP 地址或直接连接服务器的客户端 IP 地址。

4、根据需要,可以进一步处理和解析 IP 地址,以获得更详细的地址信息,例如城市、地区等。请注意,这可能需要使用第三方服务或数据库来实现。

public ActionResult GetClientIP()
{
    string userHostAddress = HttpContext.Current.Request.UserHostAddress;
    string xForwardedFor = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
    string remoteAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];

    string clientIP = !string.IsNullOrEmpty(xForwardedFor) ? xForwardedFor.Split(',')[0] : remoteAddress;

    // 进一步处理和解析 clientIP,以获取更详细的地址信息

    return Content("Client IP: " + clientIP);
}