一位客户给了我一个包含数百个域名的电子表格。
我的任务是确定以下各项:
- 哪些域连接到 Web 服务器/网站。
- 其中,重定向到另一个站点。
- 运行的服务器软件是什么(ASP、ASP.NET、Apache 等)
...并以有组织的方式输出结果。
是否有脚本,最好是 c#,可以帮助解决这个问题?
一位客户给了我一个包含数百个域名的电子表格。
我的任务是确定以下各项:
...并以有组织的方式输出结果。
是否有脚本,最好是 c#,可以帮助解决这个问题?
您可以使用HttpWebRequest类来测试域名。根据 HttpWebResponse 的 HttpStatus 属性,您可以决定是否存在重定向。
在某些情况下,您可以通过查看随响应发送的标头来找出服务器软件,但可能并非所有(或只有少数)服务器都发送这些标头。
为此,我使用了以下内容:
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri);
req.AllowAutoRedirect = false; // allows tracking of redirects
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
string server = resp.Headers["Server"]; // to track server software
string poweredby = resp.Headers["X-Powered-By"]; //denotes ASP.NET, PHP, etc
string aspnetVersion = resp.Headers["X-AspNet-Version"]; //only applies to IIS servers
可以捕获一些额外的响应标头以获取更多信息:
您的大部分要求都可以通过System.Net.WebClient
课程来处理。一个棘手的问题是该站点使用的服务器软件。即使您运行直接查询服务器的东西,您也无法可靠地判断它正在使用什么服务器软件,因为该软件通常可以配置为对您撒谎并告诉您并模仿另一个常见服务器品牌的响应。虽然说谎并不常见,但也并非闻所未闻(有些人认为这是一种摆脱饼干的最佳做法)。
关于你的第二个项目
•那些重定向到另一个站点的那些。
HttpWebRequest/Response 和 WebClient 将捕获大部分重定向,但不是全部,因为有些页面通过 JavaScript 进行重定向。由于它们都不执行 JavaScript,除非您使用WebBrowser控件或其他能够运行 JavaScript 的东西,否则您将无法检测到这些情况。