Получить имя клиентской машины

#c# #.net #asp.net

#c# #.net #asp.net

Вопрос:

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

Это asp.net приложение mvc.

 string clientMachineName;
clientMachineName = 
    (Dns.GetHostEntry(Request.ServerVariables["remote_addr"]).HostName);
Response.Write(clientMachineName);
  

Мне нужно имя компьютера или машинное имя клиента, который отправляет запрос. Приведенный выше код дает мне значение ‘172.16.12.100’.

любая помощь очень ценится.

Комментарии:

1. это ASP.NET ? какая версия? просьба добавить эту информацию в тег

2. Да, это в asp.net приложение

3. какой результат вы получаете на сервере разработки? и каков ожидаемый результат?

4. Мне нужно имя компьютера или машинное имя клиента, который отправляет запрос. Приведенный выше код дает мне значение ‘172.16.12.100’.

Ответ №1:

Вы понимаете, что то, что вы спрашиваете и как вы делаете, просто неправильно, верно?

В первую очередь вам нужно понять, что такое IP-адрес.

При использовании Request.ServerVariables("REMOTE_ADDR") это никогда не будет «реальным адресом», поскольку «реальный адрес» никогда не отправляется.

IP-адрес — это то, что используется на сетевом уровне, и на самом деле не должно использоваться вашим приложением, если вы действительно хотите идентифицировать данную машину, вам нужно использовать что-то вроде сертификатов X.509, которые предназначены для представления идентификатора (IP-адрес не является идентификатором).

У вас возникнут проблемы, когда пользователь находится за NAT, и вы никогда не получите правильную идентификацию пользователя.

Вот почему под localhost все работает нормально, но вскоре вам захочется чего-то вне вашей «коробки», и все начнет портиться.

Комментарии:

1. Даже в случае интрасети мы не сможем получить имя клиентской машины?

2. В среде интрасети вы должны использовать проверку подлинности Windows для извлечения из Active Directory идентификатора самого пользователя, а не компьютера, поскольку я могу войти со своими учетными данными на моем компьютере коллеги.

3. Это не проблема, в нашей сети у каждой машины будет свое имя машины.

4. Я не указывал, что у вас проблемы с именем машины, но что вам, вероятно, нужен пользователь, который обращается к вашему приложению, а не к самому компьютеру, поскольку каждый может использовать другую машину, или его машина не работает, и он / она войдет в систему с другой машины, и вам, вероятно, нужен этот пользователь.

5. Мне не нужно беспокоиться обо всем сценарии, который вы рассказали. не могли бы вы, пожалуйста, сказать мне, будет ли написанный мной код работать в случае интрасети.

Ответ №2:

Dns.GetHostEntry Method (String) Метод запрашивает у DNS-сервера IP-адрес, который связан с именем хоста или IP-адресом. Это, вероятно, не сработало бы в удаленной сети, потому что вы не запрашиваете тот же DNS-сервер.

Дополнительная информация: http://msdn.microsoft.com/en-us/library/ms143998.aspx

Ответ №3:

Вы не гарантированно получите эту информацию в удаленной сети. Я предполагаю, что ваш сервер разработки не находится в той же сети.