【发布时间】:2011-06-01 16:50:30
【问题描述】:
我正在尝试获取不响应 ping 的网站的 IP 地址 - 它们超时。
我正在尝试从 C# 应用程序而不是 Windows 中的命令输入屏幕执行此操作。我一直在使用 ping 命令,该命令在某些站点上超时,因此在那里没有用。
还有其他不需要网站响应的方式来获取这些信息吗?
【问题讨论】:
-
OP 正在询问如何在代码中执行此操作。
我正在尝试获取不响应 ping 的网站的 IP 地址 - 它们超时。
我正在尝试从 C# 应用程序而不是 Windows 中的命令输入屏幕执行此操作。我一直在使用 ping 命令,该命令在某些站点上超时,因此在那里没有用。
还有其他不需要网站响应的方式来获取这些信息吗?
【问题讨论】:
即使站点不响应 PING(服务器上未启用 ICMP 或被防火墙过滤),PING 命令仍应将站点名称解析为 IP 地址并向您显示该 IP 地址。
在 Windows 上检查 ping 命令的输出(以粗体显示的 IP 地址):
ping wikipedia.org
ping wikipedia.org [208.80.152.2] 32 字节 o
来自 208.80.152.2 的回复:字节=32 时间=245ms TTL=50
来自 208.80.152.2 的回复:bytes=32 time=235ms TTL=50
更新(由于更新的问题)
如果您尝试从 C# 应用程序获取 DNS 名称的 IP 地址,则应使用 Dns 类中的 GetHostEntry 方法:http://msdn.microsoft.com/en-us/library/ms143998.aspx。
【讨论】:
您从 DNS 获取 IP,并需要它来执行 ping,因此您已经拥有它。
$ ping google.com
PING google.com (74.125.227.51) 56(84) bytes of data.
64 bytes from 74.125.227.51: icmp_seq=0 ttl=56 time=5.80 ms
64 bytes from 74.125.227.51: icmp_seq=1 ttl=56 time=6.23 ms
显示 IP。如果您没有获得 IP,您的 DNS 可能已关闭。
你也可以试试nslookup google.com
【讨论】:
从Dns.GetHostEntry() 中的主机名获取IP 地址。传入主机名,它会返回 IP 地址。
您没有理由需要 ping(无论如何联系)站点来获取其 IP 地址。 DNS 查找将为您提供所需的内容。
【讨论】:
您可以使用 nslookup 来解析域名。
nslookup google.com
【讨论】:
以下代码可用于对提供的主机名执行 DNS 查找。
使用 DNS 将绕过访问目标服务器。它是一个独立的分布式目录服务,维护主机名到 IP 地址的查找。
如果可以为提供的主机名解析 DNS 条目,则以下代码将给出主机的第一个返回 IP 地址。
public void test()
{
string hostname = "google.com";
IPAddress ipAdress;
if (TryGetIpAddress(hostname, out ipAdress))
{
Console.WriteLine("Host:'{0}', IP:{1}.", hostname, ipAdress);
}
else
{
Console.WriteLine("Host '{0}' not found.", hostname);
}
}
public bool TryGetIpAddress(string hostname, out IPAddress ipAddress)
{
const int HostNotFound = 11001;
ipAddress = null;
try
{
IPHostEntry hostEntry = Dns.GetHostEntry(hostname);
ipAddress = hostEntry.AddressList[0];
}
catch (SocketException ex)
{
if (ex.ErrorCode != HostNotFound) throw;
}
return (ipAddress != null);
}
【讨论】:
您可以使用tracert,它会解析IP地址并告诉您是否可以到达或停止。
【讨论】:
在代码中执行此操作,您应该有一些类似 gethostbyname() 的函数。
这应该在 stackoverflow.com 上
【讨论】:
【讨论】: