我測試了一些Firefox和Chrome的插件,可以識別給定網站的IP地址。但其中一些還可以顯示網站運行的服務器端技術。插件如何識別網站正在運行的服務器類型?
他們如何做到這一點?我知道客戶端用戶代理,HTTP協議中服務器發送「服務器 - 主機代理」是否有類似的字符串?
如果是這樣,那麼這個代碼將如何回溯這個外觀。我猜它與WebClient有什麼關係?
有人嗎?
我測試了一些Firefox和Chrome的插件,可以識別給定網站的IP地址。但其中一些還可以顯示網站運行的服務器端技術。插件如何識別網站正在運行的服務器類型?
他們如何做到這一點?我知道客戶端用戶代理,HTTP協議中服務器發送「服務器 - 主機代理」是否有類似的字符串?
如果是這樣,那麼這個代碼將如何回溯這個外觀。我猜它與WebClient有什麼關係?
有人嗎?
使用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;
}
}
謝謝我在等待時發現了類似的東西,但是我使用了GET,並在GET響應中生成了整個HTML頁面,這對於大型網頁來說可能是一種矯枉過正。再次感謝! – BerggreenDK 2011-04-12 12:57:10
我試過使用HTTPS地址,他們似乎崩潰或什麼? – BerggreenDK 2011-04-12 12:59:15
崩潰?你有例外的細節嗎?使用Fiddler來研究您使用瀏覽器提出的請求的細節以及您得到的回覆。這將使你能夠確定發生了什麼。 – 2011-04-12 13:01:46
的可能重複的[如何檢測web服務器類型](http://stackoverflow.com/questions/1097472/how- to-detect-web-server-type) – Shoban 2011-04-12 11:33:13
ohh!儘管我在發帖之前嘗試過,但我沒有找到那一個。對不起,謝謝你的鏈接。也會檢查那一個。 – BerggreenDK 2011-04-12 12:58:01