【发布时间】:2010-09-24 07:24:14
【问题描述】:
在进行 HTTP 请求时是否可以(如果可以,如何)绕过 DNS?
我想通过 HTTP 请求直接访问前端,而不通过 NLB,但使用正确的主机标头。 由于我有我的服务器的 IP,我只需要绕过 DNS。
我尝试使用 WebRequest,将 URL 替换为 IP 并设置 Host 标头,但此标头受到保护。
我该怎么做?我需要自己创建 HTTP 请求吗?
注意:编辑主机文件不是一种选择
【问题讨论】:
在进行 HTTP 请求时是否可以(如果可以,如何)绕过 DNS?
我想通过 HTTP 请求直接访问前端,而不通过 NLB,但使用正确的主机标头。 由于我有我的服务器的 IP,我只需要绕过 DNS。
我尝试使用 WebRequest,将 URL 替换为 IP 并设置 Host 标头,但此标头受到保护。
我该怎么做?我需要自己创建 HTTP 请求吗?
注意:编辑主机文件不是一种选择
【问题讨论】:
在提出这个问题时,这不可能与 WebRequest 类有关。但是,在此问题引发的 Microsoft Connect 问题之后,Microsoft 将 Host 属性添加到 .Net 4.0 版中的 HttpWebRequest 类中。因此,如果您使用的是 .net 4.0 或更高版本,则可以使用此代码实现您想要的。
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://127.0.0.1");
Request.Host = "www.example.com"
在 .Net 版本 4 之前,唯一真正的选择是打开一个 Socket 并自己执行 HTTP 请求,或者找到具有更多功能的第 3 方组件。
【讨论】:
我设法将代理设置为远程服务器的 IP 地址:
request.Proxy = new WebProxy(ip.ToString());
并非在所有情况下都有效,但在我的情况下有效。
【讨论】:
我自己也遇到过类似的问题,但设法使用套接字解决了它(正如 Martin Brown 所提到的。这是我的回答:https://stackoverflow.com/questions/359041/request-web-page-in-c-spoofing-the-host#359299
【讨论】:
你可以使用我的解决方案来解决这个问题,它贴在这里:
How to set custom "Host" header in HttpWebRequest?
这可以帮助您编辑主机头,避免使用代理解决方法。
【讨论】: