При получении URL-адреса через HttpWebRequest могу ли я увидеть IP-адрес конечного сервера?
-
21-09-2019 - |
Вопрос
Предположим, я извлекаю URL-адрес следующим образом:
string url = "http://www.somesite.com/somepage.html"
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Есть ли способ, которым я могу увидеть IP-адрес целевого URL-адреса?Требуется ли для этого отдельный вызов?
Спасибо
Решение
Посмотрите на класс System.Net.Dns.Вы можете получить список IP-адресов хоста из Dns.GetHostEntry()Dns.GetHostEntry() способ.
Другие советы
Хотя Dns.GetHostEntry()
может предоставить вам IP-адрес сервера, в случае наличия нескольких записей A для одного и того же хоста, вы получите их все (также известный как циклический DNS).Однако при фактическом подключении к веб-серверу клиент выбирает один из этих IP-адресов.
Похоже, что не существует открытого способа точно узнать, какой IP-адрес был использован при подключении.Я нашел эту информацию во время работы над нашим решением для веб-мониторинга по адресу www.justwentdown.com.Эта информация находится в личном поле веб-ответа,
myHttpWebResponse.ResponseStream.Connection.ServerAddress
Однако, поскольку Connection
и ServerAddress
являются частными / внутренними свойствами, вам нужно будет использовать отражение, чтобы получить значения.Я нашел это решение быть очень полезным в таких ситуациях.
Я протестировал это с .NET 4.0.Это немного запутанно и может привести к сбоям в будущих версиях .NET, поэтому я бы рекомендовал добавить модульный тест.