2009-09-18 27 views
26

Estoy construyendo un sitio de intranet que mostrará diferentes listas basadas en el nombre de la computadora porque diferentes computadoras están en diferentes áreas, ¿hay alguna manera (dentro de un controlador o modelo) para determinar el nombre de la computadora del cliente?Determinar el nombre del equipo del cliente

He intentado system.environment.machinename pero eso solo devuelve el nombre del servidor, ¿alguna otra idea?

Respuesta

34

Lo tengo trabajo utilizando la siguiente:

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

código de 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(); 
} 
+3

Tenga en cuenta que esto no le dará el resultado esperado si el cliente está detrás de una NAT, pero es probable que no sea un problema ya que está en una "intranet". – Niklas

+0

Está funcionando como un encanto. Pero tuve que hacer pequeños cambios para obtener la IP. string ip = HttpContext.Request.UserHostName.ToString(); el resto funciona asombrosamente .. +1 – Vinnie

+0

Bueno, puede funcionar solo en la red de área local pero no funcionará en Internet. – CodeIt

0

La única forma que conozco de inspeccionar al cliente es a través de la colección ServerVariables en el objeto Request (debería estar disponible para el código MVC).

Consulte http://www.4guysfromrolla.com/webtech/092298-3.shtml para obtener más información. REMOTE_HOST y REMOTE_ADDR se ven como candidatos.

0

Creo que es mejor usar uno de estos métodos para atar un usuario a una ubicación:

  • una cookie que se establece una vez que el usuario auto-selecciona su ubicación
  • tener el inicio de sesión de usuario a el sitio para que pueda realizar un seguimiento de ellas únicamente de esa manera
  • recordando usuario mediante la dirección IP

no hay manera de asegurar los nombres de hosts remotos son únicos. El mismo problema ocurre con IP debido a proxies, IP dinámica, etc., pero creo que será un poco más confiable. Además, puede hacer geolocalización por dirección IP.

3

No. El nombre de la computadora del cliente no está disponible de ninguna manera en el servidor. Esta es la naturaleza de la solicitud-respuesta http. Solo puedes tener su dirección IP.

Una solución alternativa podría ser recuperar la máquina en el cliente desde Flash/Silverlight (dudo de JavaScript) y colocarla en la cookie que está disponible en el servidor con cada solicitud. Pero hay una gran cantidad de problemas con este enfoque.

+1

¿Existe un método para buscar equipo nombres con una ip? – Jimmy

+0

Puede obtener el nombre de la computadora desde su IP haciendo una llamada al servidor DNS –

1

Prueba esto:

string name = Request.UserHostName; 
+0

No funcionó, el nombre devuelto del servidor web. Lo mismo con System.Net. –

-2

Aquí es un IE-única solución. Funciona en IE8, con múltiples advertencias de seguridad.

<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> 
3

código en 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) 
Cuestiones relacionadas