2009-12-17 1 views
3

Я пытаюсь найти ip-адрес (а не имя хоста), который ответил на мой WebRequest в C#. Я не хочу делать DNS-разрешение, потому что это случаи, когда возвращаемые записи DNS не являются серверами, отвечающими на запрос. Для экс:Как получить IP-адрес сервера, отвечающий на WebResponse C#

Client -> Load Balancer -> Веб-сервер

сервер DNS будет реагировать с IP балансировки нагрузки в. Предполагая, что ответный веб-сервер не вернется через балансировщик нагрузки, тогда IP-адрес станет фактическим веб-сервером, который я пытаюсь найти.

+0

Почему вы должны сделать это? Что вы будете делать, например, если у сервера несколько IP-адресов? –

ответ

1

У вас есть доступ к серверному коду? Или для настройки веб-сервера? Вы всегда можете разместить IP-адрес машины или любой другой идентификатор, который вам нужен, в пользовательском заголовке и искать его на клиенте.

Что касается вашего первоначального вопроса, я не считаю, что информация находится где-нибудь в классах HttpWebRequest/HttpWebResponse.

+0

Нет, к сожалению, я этого не делаю, иначе это был бы отличный вариант. – Traderde

1

Думаю, вам нужно будет погрузиться в OSI, а также создать и использовать свой собственный сокет;
тогда вы будете иметь доступ к свойству RemoteEndPoint (по крайней мере, после того, как ваш сокет подключен или был подключен к) следующим образом:

Socket sprocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sprocket.Connect("www.google.com", 80);
string IPAddressOfRespondingServer = ((IPEndPoint)sprocket.RemoteEndPoint).Address.ToString();

+0

Это будет IP-адрес на другом конце соединения, не обязательно IP-адрес ответа на запрос - они могут отличаться от прокси-серверов или задействованных балансировщиков нагрузки. –

+0

Я думаю, ты прав .... хммм .... Думаю, я просто буду с твоим, мрСаундером, то есть, комментировать вопрос; почему? Было бы интересно посмотреть, как это делается. Есть ли пуленепробиваемый способ получения IP через обсуждаемые средства, которые не требуют «настройки» либо пакетов, либо еще чего-то на обоих концах соединения? –