我有以下方法,但在某些系统上,它给出了所有的IP
地址(IPv6
、IPv4
、虚拟IPv6
和虚拟IPv4
),在一些系统上,它只给出了IPv6
和虚拟IPv6
,但是我需要所有点击web应用程序的客户端的IP's
存储在数据库中。
系统配置有问题吗?
public void Main()
{
Username = System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString();
computerName = System.Net.Dns.GetHostName();
IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(computerName);
IPAddress[] ipAddress = ipEntry.AddressList;
IPv6 = ipAddress[0].ToString();
IPv4 = ipAddress[2].ToString();
VirtualIPv4 = ipAddress[3].ToString();
IFormatProvider theCultureInfo = new System.Globalization.CultureInfo("en-GB",true);
dt1 = Convert.ToDateTime(DateTime.Now,theCultureInfo).ToString("MM-dd-yyyy hh:mm tt");
}
发布于 2016-05-10 06:21:03
概念要点:
如果您仍然对此感到困惑,请参阅下面的部分。
因此,由于您正在获得IP地址列表,您肯定做错了什么。在这种情况下,您将在服务器上调用一个方法来获取服务器的当前IP地址(Es)。
Username = System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString();
以上就是你犯错的地方--那之后的一切都是毫无意义的。您正在服务器上运行该代码,而WindowsIdentity.GetCurrent()
是运行应用程序的人。
获取客户端IP地址
您希望获得Request
IP地址,该地址因框架而异,但与HttpRequest.UserHostAddress
类似。
在ASP.NET中,您可以使用:
HttpContext.Current.Request.UserHostAddress
HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]
那IPv4对v6呢?而不是你所关心的-客户使用一个或另一个,因此,无论它是什么,它将是在这个价值。
如何思考IP寻址wrt网络应用程序
在这个世界上,你有两个玩家:一个想进入网络应用程序的客户和一个为客户服务的网络应用。
客户端标识自己的方式和服务器标识自己的方式是通过某些地址(通常是IP address
)进行的,除非您使用的是异域网络堆栈。
现在,有两个版本的IP是常见的: IPv4,更常见和更老的版本,它看起来像123.45.67.89
,另一个版本是十六进制的和丑陋的。
地址版本对应于IP版本,协议版本。为了通过IPv6与我通信,我们需要IPv6地址。同样,要使用IPv4,我们需要IPv4地址。
因此,首先,我们需要连接到的服务器IP或IP。如果多个If可用于不同版本,我们将选择两端可用的最高版本,因此如果服务器只有v4,客户端必须仅通过v4进行通信。如果客户端两者都有,而服务器只监听v6,那么他们将通过IPv6进行通信,因此客户端将使用IPv6地址来标识自己。
最后,在两端,请记住,IP地址可能不是识别每一端背后的人的最终词。这是因为在节点之间存在层的潜力(通常是现实),这在技术上违反了“端到端原则”,但在实践中非常普遍。在这些情况下,一个IP地址可能被多个私有计算机共享(最常见),一组IP地址可能被一组计算机共享(不太常见,用于在循环配置中的服务器),防火墙之间的防火墙可能只允许一个方向或在一天中的特定时间的通信,或者基于发送方IP等。
一些例子
https://stackoverflow.com/questions/37068390
复制相似问题