Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 插件如何识别网站运行的服务器类型?_C#_Httpwebrequest_Webserver_Identification - Fatal编程技术网

C# 插件如何识别网站运行的服务器类型?

C# 插件如何识别网站运行的服务器类型?,c#,httpwebrequest,webserver,identification,C#,Httpwebrequest,Webserver,Identification,我已经测试了一些Firefox和Chrome插件,它们可以识别某个特定网站的IP号码。但其中一些还可以显示网站运行的服务器端技术 他们是怎么做到的?我知道客户机用户代理,在HTTP协议中,服务器发送“服务器主机代理”之类的字符串时,是否存在类似的情况 如果是这样的话,检索代码会是什么样子呢。我想是网络客户端的问题吧 有人吗?使用HttpWebRequest并将方法属性设置为HEAD,您可以执行HTTP HEAD请求,这是非常轻量级的。它将返回HTTP头(可能正确,也可能不正确)。它们的HTTP头

我已经测试了一些Firefox和Chrome插件,它们可以识别某个特定网站的IP号码。但其中一些还可以显示网站运行的服务器端技术

他们是怎么做到的?我知道客户机用户代理,在HTTP协议中,服务器发送“服务器主机代理”之类的字符串时,是否存在类似的情况

如果是这样的话,检索代码会是什么样子呢。我想是网络客户端的问题吧


有人吗?

使用
HttpWebRequest
并将
方法
属性设置为
HEAD
,您可以执行HTTP HEAD请求,这是非常轻量级的。它将返回HTTP头(可能正确,也可能不正确)。它们的HTTP头也可能因服务器而异,因为对于服务器应该公开的头没有标准

守则:

HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create("http://www.contoso.com/");
myReq.Method = "HEAD";
WebResponse myRes = myReq.GetResponse();
for(int i=0; i < myHttpWebResponse.Headers.Count; ++i) {
   Console.WriteLine(
      "\nHeader Name:{0}, Value :{1}", 
      myHttpWebResponse.Headers.Keys[i], myHttpWebResponse.Headers[i]
   ); 
}

可能是重复的哦!我没有找到那个,尽管我在发帖前试过了。抱歉,谢谢你的链接。谢谢,我在等待时发现了一些类似的东西,但是我使用了GET,在GET响应中生成了整个HTML页面,这对于大型网页来说可能有点过分了。再次感谢!我也尝试过使用HTTPS地址,它们似乎崩溃了还是什么?崩溃?你在例外情况中得到任何细节吗?使用Fiddler研究您在浏览器中提出的请求的详细信息以及您得到的响应。这将使你能够确定发生了什么。好的,谢谢你和费德勒的想法。现在我想处理例外情况,因为除了完美的URL之外,任何东西都可以工作。404坠毁了……啊,现在我明白发生了什么。是的,您至少需要捕获
WebException
。查看有关
GetResponse()
可能引发的异常的文档:
var request = (HttpWebRequest)WebRequest.Create("http://www.http500.com");
try
{
    var response = request.GetResponse();
}
catch (WebException wex)
{
    // Safe cast to HttpWebResponse using 'as', will return null if unsuccessful
    var httpWebResponse = wex.Response as HttpWebResponse;
    if(httpWebResponse != null)
    {
        var httpStatusCode = httpWebResponse.StatusCode;
        // HttpStatusCode is an enum, cast it to int for its actual value
        var httpStatusCodeInt = (int)httpWebResponse.StatusCode;                    
    }
}