Определить имя компьютера клиента - PullRequest
39 голосов
/ 18 сентября 2009

Я создаю сайт интрасети, который будет отображать разные списки в зависимости от имени компьютера, поскольку разные компьютеры находятся в разных областях. Есть ли способ (в контроллере или модели) определить имя компьютера клиента?

Я пробовал system.environment.machinename, но он возвращает только имя сервера, какие-нибудь другие идеи?

Ответы [ 7 ]

48 голосов
/ 18 сентября 2009

Я получил его, используя следующее:

string IP = Request.UserHostName;
string compName = CompNameHelper.DetermineCompName(IP);

код от compnamehelper:

public static string DetermineCompName(string IP)
{
    IPAddress myIP = IPAddress.Parse(IP);
    IPHostEntry GetIPHost = Dns.GetHostEntry(myIP);
    List<string> compName = GetIPHost.HostName.ToString().Split('.').ToList();
    return compName.First();
}
4 голосов
/ 16 октября 2014

код в VB:

Dim myIP As IPAddress = IPAddress.Parse(Request.UserHostName)
    Dim GetIPHost As IPHostEntry = Dns.GetHostEntry(myIP)
    Dim compName As List(Of String) = GetIPHost.HostName.ToString.Split("").ToList

    return(compName.First)
3 голосов
/ 18 сентября 2009

Нет. Имя компьютера клиента никоим образом не доступно на сервере. Это природа http-запроса-ответа. Вы можете иметь только его IP-адрес.

Обходным путем может быть получение компьютера на клиенте из Flash / Silverlight (я сомневаюсь в JavaScript) и вставка в cookie, который доступен на сервере при каждом запросе. Но у этого подхода есть целый ряд проблем.

1 голос
/ 18 сентября 2009

Попробуйте это:

string name = Request.UserHostName;
1 голос
/ 18 сентября 2009

Я думаю, что вам лучше использовать один из следующих методов, чтобы привязать пользователя к местоположению:

  • cookie, который устанавливается после того, как пользователь сам выбирает свое местоположение
  • при входе пользователя на сайт, чтобы вы могли однозначно отслеживать его таким образом
  • запоминание пользователя по IP-адресу

Нет способа гарантировать уникальность удаленных имен хостов. Та же проблема возникает с IP из-за прокси, динамического IP и т. Д., Но я думаю, что это будет немного более надежным. Также вы можете выполнять геолокацию по IP-адресу.

0 голосов
/ 18 сентября 2009

Вот решение только для IE. Он работает в IE8 с несколькими предупреждениями безопасности.

<script type="text/javascript" language="javascript">
   var ax = new ActiveXObject("WScript.Network");
   document.write(ax.UserName + '<br />'); //logged in account name
   document.write(ax.ComputerName + '<br />'); //Windows PC name
</script>
0 голосов
/ 18 сентября 2009

Единственный известный мне способ проверки клиента - через коллекцию ServerVariables объекта Request (должен быть доступен для кода MVC).

См. http://www.4guysfromrolla.com/webtech/092298-3.shtml для получения дополнительной информации. REMOTE_HOST и REMOTE_ADDR выглядят как кандидаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...