从IP地址获取主机名

10

我已经使用以下代码获取了连接的客户端IP,但似乎无法获取主机名。

Globals.connectedIPAddress = "" + IPAddress.Parse(((
    IPEndPoint)_client.Client.RemoteEndPoint).Address.ToString());

4
只是好奇:你的ToString-Parse-ToString混乱有什么目的吗? - dtb
新手小白。如果有更简洁的方法,请告诉我。 - arbme
1个回答

14

并非每个IP地址都有名称。不过,如果给定了IPAddress,您可以使用Dns.GetHostEntry尝试解析它。还要注意,如果它是NAT路由器,则将获得路由器的IP地址而不是其实际机器的IP地址。

关于评论中提到的问题,我同意没有使用ToString/Parse/ToString的必要:

IPAddress address = ((IPEndPoint)_client.Client.RemoteEndPoint).Address;
Globals.connectedIPAddress = address.ToString();

如果它是一个NAT路由器,你将会得到路由器的IP地址而不是他们实际机器的名称(域名)。- 是否有可能获取实际机器的名称(域名)? - VJOY
@JonSkeet,没有更好的方法吗(两年半后)?在我的网络上,这种方法每次都会抛出异常。 - Chase Florell
1
@ChaseFlorell:就我所知,自2010年以来,网络技术并没有发生太大的变化... - Jon Skeet
是的,我同意,只是想到.NET可能添加了一些工具以获得更可靠的结果。我“可以”使用这种方法,但它没有优雅地失败。如果它无法获取HostName,它会抛出一个异常。 - Chase Florell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接