2011-04-12 88 views
0

我测试了一些Firefox和Chrome的插件,可以识别给定网站的IP地址。但其中一些还可以显示网站运行的服务器端技术。插件如何识别网站正在运行的服务器类型?

他们如何做到这一点?我知道客户端用户代理,HTTP协议中服务器发送“服务器 - 主机代理”是否有类似的字符串?

如果是这样,那么这个代码将如何回溯这个外观。我猜它与WebClient有什么关系?

有人吗?

+0

的可能重复的[如何检测web服务器类型](http://stackoverflow.com/questions/1097472/how- to-detect-web-server-type) – Shoban 2011-04-12 11:33:13

+0

ohh!尽管我在发帖之前尝试过,但我没有找到那一个。对不起,谢谢你的链接。也会检查那一个。 – BerggreenDK 2011-04-12 12:58:01

回答

1

使用HttpWebRequest并将Method属性设置为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] 
    ); 
} 

编辑:

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;      
    } 
} 
+0

谢谢我在等待时发现了类似的东西,但是我使用了GET,并在GET响应中生成了整个HTML页面,这对于大型网页来说可能是一种矫枉过正。再次感谢! – BerggreenDK 2011-04-12 12:57:10

+0

我试过使用HTTPS地址,他们似乎崩溃或什么? – BerggreenDK 2011-04-12 12:59:15

+0

崩溃?你有例外的细节吗?使用Fiddler来研究您使用浏览器提出的请求的细节以及您得到的回复。这将使你能够确定发生了什么。 – 2011-04-12 13:01:46