我在localhost中运行ASp.Net mvc应用程序 - 使用visual studio提供的dev服务器。我想获得IP地址。我试过了
Request.UserHostAddress
和
Request.ServerVariables("REMOTE_ADDR")
在这两种情况下,我得到:: 1作为结果。它是什么?我为什么要这样做?如何获得127.0.0.1或192.168.1.xxx?
答案 0 :(得分:21)
您获得的是有效的IP地址。 ::1
是IPv6中的local_host。 (在local_host中使用下划线来阻止SO认为它是某种坏文本)
答案 1 :(得分:15)
调用'localhost'时你所看到的是有效的。 :: 1是IPv6环回地址。相当于IPv4的127.0.0.1。
而不是打电话:
http://localhost/...
呼叫:
http://{machinename}/...
-or-
http://127.0.0.1/...
-or-
http://192.168.1.XXX/...
[将 {machinename} 替换为您计算机的计算机名称。将 XXX 替换为您的计算机IP地址。]
任何通过您的计算机进入MVC应用程序的人都将拥有有效的IP地址。如果客户端是IPv6主机,它将保存IPv6 IP地址。如果客户端是IPv4主机,它将保存IPv4 IP地址。
如果您一直想保存IPv4地址,请查看本文,了解如何使用简单的类http://www.4guysfromrolla.com/articles/071807-1.aspx完成它。您应该能够以此为例,构建一个快速帮助方法来实现此目的。
答案 2 :(得分:1)
Request.Params["REMOTE_ADDR"]
而不是Request.ServerVariables("REMOTE_ADDR")
答案 3 :(得分:1)
如果您希望localhost返回127.0.0.1,可能需要更改“hosts”文件。 您可以在“%systemdrive%\ Windows \ System32 \ drivers \ etc”
中找到它它对我有用,现在我用“Request.ServerVariables [”REMOTE_ADDR“]”获得127.0.0.1。我取消注释127.0.0.1(删除#)。
您可以在此处找到默认主机文件 http://support.microsoft.com/kb/972034
我的档案
#localhost名称解析在DNS本身内处理。
127.0.0.1 localhost
#:: 1 localhost
答案 4 :(得分:0)
下面我用来查找ip的代码
public static string GetIp()
{
var Request = HttpContext.Current.Request;
try
{
Console.WriteLine(string.Join("|", new List<object> {
Request.UserHostAddress,
Request.Headers["X-Forwarded-For"],
Request.Headers["REMOTE_ADDR"]
})
);
var ip = Request.UserHostAddress;
if (Request.Headers["X-Forwarded-For"] != null)
{
ip = Request.Headers["X-Forwarded-For"];
Console.WriteLine(ip + "|X-Forwarded-For");
}
else if (Request.Headers["REMOTE_ADDR"] != null)
{
ip = Request.Headers["REMOTE_ADDR"];
Console.WriteLine(ip + "|REMOTE_ADDR");
}
return ip;
}
catch (Exception ex)
{
Log.WriteInfo("Message :" + ex.Message + "<br/>" + Environment.NewLine +
"StackTrace :" + ex.StackTrace);
}
return null;
}
答案 5 :(得分:0)
如果获得ipv6地址,之后您可以找到该地址的有效ipv4地址映射。
c#代码在下面;
public static string GetIP4Address(string ip) {
try {
var hostNames = Dns.GetHostEntry(ip);
var ipv4 = hostNames.AddressList.FirstOrDefault(a => a.AddressFamily == AddressFamily.InterNetwork);
if(ipv4 != null) {
return ipv4.ToString();
}
} catch(Exception ex) {
log.WarnFormat("Error When Getting Client Ipv4");
}
return ip;
}