首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在访问web应用程序的服务器上获取客户端IP和主机名

在访问web应用程序的服务器上获取客户端IP和主机名
EN

Stack Overflow用户
提问于 2016-05-06 09:05:09
回答 1查看 1K关注 0票数 0

我有以下方法,但在某些系统上,它给出了所有的IP地址(IPv6IPv4、虚拟IPv6和虚拟IPv4),在一些系统上,它只给出了IPv6和虚拟IPv6,但是我需要所有点击web应用程序的客户端的IP's存储在数据库中。

系统配置有问题吗?

代码语言:javascript
运行
复制
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");
}
EN

回答 1

Stack Overflow用户

发布于 2016-05-10 06:21:03

概念要点:

  1. 服务器和客户端都有IP地址,这就是数据被发送的方式(通过IP数据报)
  2. 客户端使用单个IP地址(无论是v4还是v6)连接到服务器.服务器绑定到一个或多个 IP地址*

如果您仍然对此感到困惑,请参阅下面的部分。

因此,由于您正在获得IP地址列表,您肯定做错了什么。在这种情况下,您将在服务器上调用一个方法来获取服务器的当前IP地址(Es)。

代码语言:javascript
运行
复制
Username = System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString();

以上就是你犯错的地方--那之后的一切都是毫无意义的。您正在服务器上运行该代码,而WindowsIdentity.GetCurrent()是运行应用程序的人。

获取客户端IP地址

您希望获得Request IP地址,该地址因框架而异,但与HttpRequest.UserHostAddress类似。

在ASP.NET中,您可以使用:

  1. HttpContext.Current.Request.UserHostAddress
  2. 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等。

一些例子

  • 端口转发:您可以使用连接到防火墙/路由器/wifi设备的电缆调制解调器连接Internet。六台不同的计算机和电话连接到防火墙/路由器以共享这一连接。--它们都共享一个IP,但是流量是根据防火墙临时分配的端口号返回给它们的。
  • NAT:这是一个更通用的端口转发术语,涵盖了更多异国情调的场景,但基本上是一个类似的概念--您有一个IP地址(入口),防火墙重写它(翻译),所以当您或服务器或其他人得到它时,它被转换成可路由的地址。在离开(出口)的时候,它需要再次被NAT访问,这一次从您理解的IP地址到公开理解的IP地址的。(出站NAT)
  • 轮询:M台计算机共享N个IP地址;在中间的东西轮流得到什么IP地址。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37068390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档