Можно ли (и если да, то как) обойти DNS при выполнении HTTP-запроса?
Я хочу напрямую обратиться к интерфейсу с HTTP-запросом, не проходя через NLB, но с правильным заголовком хоста. Поскольку у меня есть IP-адрес моего сервера, мне просто нужно обойти DNS.
Я попытался использовать WebRequest, заменив URL-адрес на IP и установив заголовок Host, но этот заголовок защищен.
Как я могу это сделать ? Нужно ли мне самому создавать HTTP-запрос?
Примечание: редактирование файла хоста не является вариантом





В то время, когда был задан этот вопрос, это было невозможно сделать с классом WebRequest. Однако после проблемы Microsoft Connect, возникшей в результате этого вопроса, Microsoft добавила свойство Host в класс HttpWebRequest в .Net версии 4.0. Таким образом, если вы используете .net 4.0 или более позднюю версию, вы можете добиться желаемого с помощью этого кода.
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://127.0.0.1");
Request.Host = "www.example.com"
До версии 4 .Net единственный реальный вариант - открыть Socket и выполнить HTTP-запрос самостоятельно или найти сторонний компонент, который имеет больше функций.
У меня была аналогичная проблема, но мне удалось обойти ее с помощью сокетов (как упоминал Мартин Браун. Вот мой ответ: https://stackoverflow.com/questions/359041/request-web-page-in-c-spoofing-the-host#359299
Мне удается сделать то, что мне нужно, установив прокси на IP-адрес удаленного сервера:
request.Proxy = new WebProxy(ip.ToString());
Это работает не во всех сценариях, но сработало в моем случае.
Вы можете использовать мое решение этой проблемы, оно размещено здесь:
Как установить собственный заголовок "Host" в HttpWebRequest?
Это может помочь вам отредактировать заголовок хоста и избежать использования прокси-сервера.
Однако в моем случае мне нужна аутентификация Kerberos, и мне понадобится перенаправление 302. На самом деле не чувствуется перекодирование всего этого :)