我正在尝试获取不响应 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 的回复:字节=32 时间=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 查找将为您提供所需的信息。
以下代码可用于对提供的主机名执行 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);
}
您可以使用 nslookup 来解析域名。
nslookup google.com
您可以使用tracert,它会解析IP地址并告诉您是否可以到达或停止在哪里。
在代码中执行此操作,您应该有一些类似 gethostbyname() 的函数。
这应该在 stackoverflow.com 上