2009-05-28 28 views
35

¿Cómo puedo leer el nombre de máquina/computadora del cliente desde el navegador?
¿Es posible usar JavaScript y/o ASP.NET?¿Cómo puedo leer el nombre de máquina/computadora del cliente desde el navegador?

+0

No estoy seguro, pero probablemente no está permitido por la política de seguridad JS –

+4

Bueno, habría que agregar un campo de entrada y pedir al usuario que escriba en su nombre de equipo ;-) –

+10

la razón es para un sistema de soporte de TI donde el cliente quiere poder adjuntar el nombre de la computadora/máquina a un boleto enviado por el usuario – BigOmega

Respuesta

27

Puede hacerlo con IE 'a veces', ya que he hecho esto para una aplicación interna en una intranet que es solo IE. Pruebe lo siguiente:

function GetComputerName() { 
    try { 
     var network = new ActiveXObject('WScript.Network'); 
     // Show a pop up if it works 
     alert(network.computerName); 
    } 
    catch (e) { } 
} 

Se puede o no requerir alguna configuración específica configuración de seguridad en Internet Explorer, así para permitir que el navegador para acceder al objeto ActiveX.

Aquí hay un enlace a algo más de información sobre WScriptl: More Information

7

No es posible obtener el nombre de la computadora de los usuarios con Javascript. Puede obtener todos los detalles sobre el navegador y la red. Pero no más que eso.

Al igual que alguien respondió en una de las preguntas anteriores hoy.

Ya hice un favor al visitar su sitio web, puede ser que regrese o consulte a otros amigos .. También le dije dónde estoy y qué sistema operativo, navegador y resolución de pantalla utilizo ¿Por qué quiere saber el color de mi ropa interior? ;-)

No puede hacerlo usando asp.net también.

+3

Eh, si está creando una aplicación interna en una configuración empresarial, se sorprenderá de lo útil que sería saber esta información. Realizamos un seguimiento de los errores en nuestra aplicación, y las direcciones IP que usa el usuario cambian según su entorno (wifi, LAN, VPN). Ser capaz de obtener el nombre de su computadora de los registros enviados al servidor desde el cliente, y el uso de herramientas empresariales para ver el software instalado y los parches de Windows en esa máquina es posible. Sin acceso directo a la computadora. Ayuda mucho en la resolución de problemas sin tener que involucrar al empleado no técnico. –

1

No esta información no está expuesta. La única información disponible es la que está expuesta a través de la solicitud HTTP, que puede incluir su sistema operativo y otra información similar. Pero ciertamente no es el nombre de la máquina.

9

navegador, sistema operativo, colores de la pantalla, resolución de pantalla, la versión de Flash y ayuda Java todos deben ser detectables desde JavaScript (y tal vez un poco más) . Sin embargo, el nombre de la computadora no es posible.

EDITAR: No es posible en todos los navegadores al menos.

10

Bien podrías obtener la dirección IP usando asp.net, luego hacer una búsqueda DNS inversa en el ip para obtener el nombre de host.

Del libro de cocina del desarrollador de ASP.NET ... Performing a Reverse-DNS Lookup.

+0

Ejecuto ese código con 192.168.1.100 (dirección IP del navegador de alojamiento de la máquina) y aparece un error: 'Error: el nombre solicitado es válido, pero no se encontraron datos del tipo solicitado' – BigOmega

+5

192.168. *. * Es un dirección IP privada, necesitará ejecutar el código en una computadora en la red privada y tener un servidor DNS en la red para que esto funcione. – Mark

+1

Esto no es posible en algunos casos, ya que el servidor web puede estar detrás de un proxy/firewall avanzado. Entonces, todo lo que obtendrá será la dirección IP/nombre de host de este proxy/firewall. Esto es típicamente para grandes webfarms. Así que asegúrese de verificar la topología de la red de producción final antes de implementar esto. – JDC

-13

Hicimos algo como esto para una herramienta de seguimiento de errores de inhouse, que nos llevaron a cabo antes de ir en vivo, pero creo que sería trabajar Creo que un estudiante Coop encuentra en el Internet en alguna parte :)

using System; 
using System.Management; 
using System.Windows.Forms; 
namespace ComputerInfo 

{ 
/// <summary> 
/// Summary description for Class1. 
/// </summary> 
public class CPUInfo 
{ 
    #region Properties 
    private String osVersion; 
    public String OSVersion 
    { 
     get { return this.osVersion; } 
    } 

    private String machineName; 
    public String MachineName 
    { 
     get { return this.OSVersion; } 
    } 

    private int width; 
    public int ScreenWidth 
    { 
     get { return this.width; } 
    } 

    private int height; 
    public int ScreenHeight 
    { 
     get { return this.height; } 
    } 

    private String userName; 
    public String UserName 
    { 
     get { return this.userName; } 
    } 

    private String clockSpeed; 
    public String ClockSpeed 
    { 
     get { return this.clockSpeed; } 
    } 

    private String procName; 
    public String ProcessorName 
    { 
     get { return this.procName; } 
    } 

    private String manufacturer; 
    public String ProcessorManufacturer 
    { 
     get { return this.manufacturer; } 
    } 

    private String version; 
    public String ProcessorVersion 
    { 
     get { return this.version; } 
    } 

    private double ram; 
    public double RAM 
    { 
     get { return this.ram; } 
    } 

    private bool usehtml; 
    public bool UseHTMLFormatting 
    { 
     get { return this.usehtml; } 
     set { usehtml = value; } 
    } 
    #endregion 

    public CPUInfo() : this(false) 
    { 

    } 

    public CPUInfo(bool use_html_formatting) 
    { 
     usehtml = use_html_formatting; 
     osVersion = System.Environment.OSVersion.ToString() ; 
     machineName = System.Environment.MachineName.ToString(); 
     width = Screen.PrimaryScreen.Bounds.Width; 
     height = Screen.PrimaryScreen.Bounds.Height; 
     userName = ""; 
     clockSpeed = ""; 
     procName = ""; 
     manufacturer = ""; 
     version = ""; 
     ram = 0.0d; 
     getMachineInfo(); 
    } 

    private void getMachineInfo() 
    { 
     try 
     { 
      using(ManagementObjectSearcher win32Proc = new ManagementObjectSearcher("select * from Win32_Processor"), 
        win32CompSys = new ManagementObjectSearcher("select * from Win32_ComputerSystem"), 
        win32Memory = new ManagementObjectSearcher("select * from Win32_PhysicalMemory")) 
      { 
       foreach (ManagementObject obj in win32Proc.Get()) 
       { 
        clockSpeed = obj["CurrentClockSpeed"].ToString(); 
        procName = obj["Name"].ToString(); 
        manufacturer = obj["Manufacturer"].ToString(); 
        version = obj["Version"].ToString(); 
       } 
+13

Sí, esto es genial si quieres información sobre el servidor! –

+0

Este es el código del lado del servidor – Gemasoft

-1

Erm ¿hay alguna razón por la que no puedas usar simplemente HttpRequest? Esto sería del lado del servidor, pero ¿podría pasarlo a javascript si fuera necesario?

Page.Request.UserHostName 

HttpRequest.UserHostName

El único problema con esto es que sólo sería realmente trabajar en un entorno Intranet de lo contrario se acaba de terminar recogiendo el router usuarios o la dirección de proxy ...

-3

Page.Request.UserHostName es también "genial si quieres información sobre el servidor"

¿Pero por qué? El nombre implica que devuelve lo que queremos.Y el equivalente ServerVariables se anuncia en los sitios de Microsoft haciendo lo que queremos, es decir, dando el nombre de host del control remoto. Sin embargo, ambos me dan la dirección IP (no el nombre) del host que ejecuta IIS.

3

Intente obtener el nombre de la computadora del cliente en Mozilla Firefox utilizando el siguiente código.

netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); 

var dnsComp = Components.classes["@mozilla.org/network/dns-service;1"]; 
var dnsSvc = dnsComp.getService(Components.interfaces.nsIDNSService); 
var compName = dnsSvc.myHostName; 

Además, el mismo fragmento de código se puede poner como una extensión, y se puede llamar desde su página web.

Encuentra el código de muestra a continuación.

código de extensión:

var myExtension = { 
    myListener: function(evt) { 

//netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); 
var dnsComp = Components.classes["@mozilla.org/network/dns-service;1"]; 
var dnsSvc = dnsComp.getService(Components.interfaces.nsIDNSService); 
var compName = dnsSvc.myHostName; 
content.document.getElementById("compname").value = compName ;  
    } 
} 
document.addEventListener("MyExtensionEvent", function(e) { myExtension.myListener(e); }, false, true); //this event will raised from the webpage 

Código Página Web:

<html> 
<body onload = "load()"> 
<script> 
function showcomp() 
{ 
alert("your computer name is " + document.getElementById("compname").value); 
} 
function load() 
{ 
//var element = document.createElement("MyExtensionDataElement"); 
//element.setAttribute("attribute1", "foobar"); 
//element.setAttribute("attribute2", "hello world"); 
//document.documentElement.appendChild(element); 
var evt = document.createEvent("Events"); 
evt.initEvent("MyExtensionEvent", true, false); 
//element.dispatchEvent(evt); 
document.getElementById("compname").dispatchEvent(evt); //this raises the MyExtensionEvent event , which assigns the client computer name to the hidden variable. 
} 
</script> 
<form name="login_form" id="login_form"> 
<input type = "text" name = "txtname" id = "txtnamee" tabindex = "1"/> 
<input type="hidden" name="compname" value="" id = "compname" /> 
<input type = "button" onclick = "showcomp()" tabindex = "2"/> 

</form> 
</body> 
</html> 
+0

¡Funciona para mi tarea! ¡Muchas gracias! – zhekaus

0
<html> 
<body onload = "load()"> 
<script> 
function load() 
{ 

try 
{ 
var ax = new ActiveXObject("WScript.Network"); 
alert('User: ' + ax.UserName); 
alert('Computer: ' + ax.ComputerName); 
} 
catch (e) 
{ 
document.write('Permission to access computer name is denied' + '<br />'); 
} 

</script> 
</form> 
</body> 
</html> 
0

No hay manera de hacerlo, como JavaScript no tiene acceso al nombre del equipo, sistema de archivos y otra información local Esto es parte de la especificación de JavaScript. La seguridad es el objetivo principal.

+3

"Esto es parte de la especificación JavaScript" - No lo es. Esas son cosas que * no * son parte de la especificación del lenguaje. Cuando están disponibles, es a través de funciones proporcionadas por el entorno de host. Los navegadores no los proporcionan. NodeJS lo hace. (Para tomar dos ejemplos comunes). – Quentin

+0

Gracias @Quentin, buena corrección. Es la limitación del navegador, por razones de seguridad. – Denys

0

Una versión actualizada de Kelsey:

$(function GetInfo() { 
    var network = new ActiveXObject('WScript.Network'); 
     alert('User ID : ' + network.UserName + '\nComputer Name : ' + network.ComputerName + '\nDomain Name : ' + network.UserDomain); 
     document.getElementById('<%= currUserID.ClientID %>').value = network.UserName; 
     document.getElementById('<%= currMachineName.ClientID %>').value = network.ComputerName; 
     document.getElementById('<%= currMachineDOmain.ClientID %>').value = network.UserDomain; 
}); 

para almacenar el valor, agregar estos controles:

<asp:HiddenField ID="currUserID" runat="server" /> <asp:HiddenField ID="currMachineName" runat="server" /> <asp:HiddenField ID="currMachineDOmain" runat="server" /> 

donde también podrán llamar desde detrás de la siguiente manera:

Page.ClientScript.RegisterStartupScript(this.GetType(), "MachineInfo", "GetInfo();", true); 
-1

Por qué estamos limitando el alcance y por qué no prueba el siguiente que puede plantear problemas debido a inconsistencias configuración de DNS.

InetAddress inet=InetAddress.getByName(request.getRemoteAddr().trim()); 
System.out.println(" host name is : "+inet.getHostName()); 
Cuestiones relacionadas