【问题标题】:Usable IP address to present to user可用的 IP 地址呈现给用户
【发布时间】:2012-04-17 09:44:57
【问题描述】:

我正在编写一个服务器/客户端分布式工具。用户必须在某些时候输入网络地址。我想通过告诉我亲爱的用户来帮助他们确定当前的 IP 地址。

[更新] 客户端和服务器在同一个网络中运行。 (或者用户可以访问管理员)[/Update]

当我打电话给Dns.GetHostAddresses(Dns.GetHostName()) 时,我得到了一堆完全正确但没有真正帮助的条目。 我可以通过哪种启发式方法选择最合适的条目来呈现给用户?

【问题讨论】:

  • 这个IP地址将用于什么目的?如果客户端位于 NAT 之后(w.r.t. 服务器),则仅客户端代码可能无法确定任何有用的地址。
  • @Damien_The_Unbeliever 不,通常*两者之间没有 NAT。 (* 在某些时候,我的工具必须专注于它的核心能力。但谢谢,我会清楚地宣布我的提示作为一个热门。)
  • 如果他们在同一个网络上,为什么需要告诉客户端它自己的地址呢? - 连接服务器,服务器可以确定客户端的地址。
  • 好的,但是我想在服务器端显示服务器IP地址。

标签: .net networking network-programming usability


【解决方案1】:

如果我理解你的问题,你可以比较IPAddress.AddressFamilyAddressFamily.InterNetwork来过滤

if (ip.AddressFamily == AddressFamily.InterNetwork)

这是完整的代码

IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName());
foreach (IPAddress ip in host.AddressList)
{
    if (ip.AddressFamily == AddressFamily.InterNetwork)
    {
        // Local ip address
    }
}

AddressFamily.InterNetwork 是针对 IPv4 地址的值。对于 IPv6,您可以使用 AddressFamily.InterNetworkV6。如需完整列表,请please check this link

【讨论】:

  • 嗯,这将是一些过滤器开始。谢谢。
  • 我也考虑过。但是,我仍然希望通过一些启发式方法来选择获胜者地址。
猜你喜欢
  • 1970-01-01
  • 2011-02-06
  • 2012-09-01
  • 2014-09-27
  • 2015-06-21
  • 2011-06-28
  • 1970-01-01
  • 2011-10-20
  • 2020-01-10
相关资源
最近更新 更多