#c# #asp.net #hostname
#c# #asp.net #имя хоста
Вопрос:
Я хочу получить IP-адрес хоста на моей aspx
странице с помощью C#
, я использую методы класса DNS для их получения.
Локально это работало нормально, но когда я развернул решение на IIS7, оно вернуло только IP-адрес, назначенный провайдером, но мне нужен локальный IP-адрес этого компьютера.
Есть предложения?
Комментарии:
1. Локальный IP-адрес означает адрес, который машина имеет в локальной сети, например 192.168.xxx.xxx
2. Таким образом,
HTTP_X_FORWARDED_FOR
предложенный Мухаммедом Ахтаром — ваш лучший выбор.
Ответ №1:
Вот пример для этого. В этом примере мы можем получить IP-адрес из нашего заданного имени хоста.
string strHostName = "www.microsoft.com";
// Get DNS entry of specified host name
IPAddress[] addresses = Dns.GetHostEntry(strHostName).AddressList;
// The DNS entry may contains more than one IP addresses.
// Iterate them and display each along with the type of address (AddressFamily).
foreach (IPAddress address in addresses)
{
Response.Write(string.Format("{0} = {1} ({2})", strHostName, address, address.AddressFamily));
Response.Write("<br/><br/>");
}
Комментарии:
1. Пожалуйста, обратите внимание, что модераторы и другие пользователи удаляют ваши спам-ссылки на ваш собственный веб-сайт из ваших ответов. Пожалуйста, прекратите включать их, чтобы избежать более жестких санкций за эти ссылки.
Ответ №2:
Я совершенно уверен, что вы не можете получить локальный адрес 192.168.C.D локальной машины таким образом.
Это из-за безопасности и видимости (NAT и т.д.).
Если вы хотите однозначно идентифицировать пользователя. Я бы посмотрел на сеансы или файлы cookie.
Ответ №3:
При поиске ip-адреса в общедоступном DNS вы получите официальный IP-адрес, передаваемый наружу. Если используется NAT и вам нужен внутренний адрес, вы должны подключиться к DNS-серверу, который хранит внутренние IP-адреса.
Ответ №4:
вы можете использовать этот метод…
public static String GetIP()
{
String ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if(string.IsNullOrEmpty(ip))
{
ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
return ip;
}
Комментарии:
1. Это самое близкое, что вы можете найти к решению, но это не гарантия, что оно сработает. Промежуточные маршрутизаторы могут устанавливать любой IP-адрес в переменной HTTP_X_FORWARDED_FOR.
2. это для IP-адреса серверной машины, я хочу получить IP-адрес любой машины в локальной сети.
3. Это вернет IP-адрес клиента, можете попробовать.
4. Спасибо за помощь, Ахтар, но проблема в том, что у меня есть имя хоста какой-то машины, и я должен оценить ip этой машины, поможет ли это в данном случае?
5. Вы можете проверить, но я не уверен.