#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:
Вы не гарантированно получите эту информацию в удаленной сети. Я предполагаю, что ваш сервер разработки не находится в той же сети.