从 IP 地址获取网站的服务器

4

我有一个函数,当你输入网站的url时,它会返回该网站的服务器:

private string GetWebServer()
{
    string server = string.Empty;

    //get URL
    string url = txtURL.Text.Trim().ToLower();
    if (!url.StartsWith("http://") && !url.StartsWith("https://"))
        url = "http://" + url;

    HttpWebRequest request = null;
    HttpWebResponse response = null;

    try
    {
        request = WebRequest.Create(url) as HttpWebRequest;
        response = request.GetResponse() as HttpWebResponse;

        server = response.Headers["Server"];
    }
    catch (WebException wex)
    {
        server = "Unknown";
    }
    finally
    {
        if (response != null)
        {
            response.Close();
        }
    }

    return server;
}

我希望能够通过IP地址获取网站的服务器,而不是通过网站的URL。但是,如果我输入IP地址,在调用WebRequest.Create(url)时会出现错误:"无效的URI:无法确定URI的格式。" 有人知道我该如何修改才能实现我的目标吗?


你是想从域内的客户端获取服务器名称吗? - dr.
你能给一个出现问题的URL的例子吗?至少在我测试过的所有URL中,一切都正常。例如,http://207.46.170.123/Downloads/en/default.aspx (http://www.microsoft.com/Downloads/en/default.aspx) 返回“Microsoft-IIS/7.5”。 顺便说一下,response.Headers["Server"] == response.Server。 - Oleg
他正在获取处理请求的服务器,例如“Microsoft-IIS/7.5”或“Apache/2.2.12 (Unix) mod_ssl/2.2.12 OpenSSL/0.9.7d mod_wsgi/3.2 Python/2.6.5rc2”。这是服务器响应头。 - uvita
3个回答

2
否则,您可以从IP地址查找名称,然后在其他调用中使用该地址:
System.Net.Dns.GetHostEntry("127.0.0.1").HostName.ToString()

1
你在使用IP地址时是否也使用了同样的方法?如果没有在IP地址前加上“http://”,就会抛出此错误。

1
一个IP地址可以为多个域名提供服务,你将无法实现1:1的映射。你正在尝试进行反向DNS查找。有许多网络服务提供了一个不完整的域名列表,这些域名是从一个IP地址中提供服务的。有一次我不得不使用它们的组合来获取更完整的列表。
以下是一些此类网站的小列表:
  1. http://remote.12dt.com/
  2. http://www.guerrilladns.com/

我已经使用了以下 DNS 查询,它还可以查找由同一 IP 服务的其他域名:

  1. http://www.robtex.com/dns/

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