2009-05-28 203 views
35

如何从浏览器读取客户端的机器/计算机名称?
是否有可能使用JavaScript和/或ASP.NET?如何从浏览器读取客户端的机器/计算机名称?

+0

我不知道,但也许它不是由JS安全策略 – 2009-05-28 18:37:50

+4

那么允许,你可以添加一个输入字段,要求用户输入自己的计算机名;-) – 2009-05-28 18:51:45

+10

的原因是对IT支撑系统客户希望能够将计算机/机器名称附加到由瑞安用户 – BigOmega 2009-05-28 18:54:31

回答

27

你可以用IE浏览器'有时'这样做,因为我已经在内部网上做了这个内部应用程序,只有IE浏览器。请尝试以下操作:

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

它可能会或可能不会需要在IE浏览器的一些特定安全设置的设置,以及允许浏览器访问ActiveX对象。

下面是对WScript的一些详细信息的链接:More Information

7

使用Javascript无法获取用户计算机名称。你可以得到关于浏览器和网络的所有细节。但不能超过那个。

像今天上一个问题的答案一样。

我已经为访问您的网站做了一个忙,可能我会退还或转介其他朋友..我也告诉过您您在哪里以及我使用的操作系统,浏览器和屏幕分辨率为什么您想知道颜色我的内衣? ;-)

你也不能用asp.net来做。

+3

呃,如果你在企业环境中构建一个内部应用程序,你会惊讶于知道这些信息会有多大帮助。我们跟踪应用程序中的错误,以及用户使用的IP地址取决于其环境(wifi,LAN,VPN)。能够从客户端发送到服务器的日志中获取计算机名称,然后使用企业工具查看该计算机上已安装的软件和Windows补丁。没有直接访问电脑。帮助解决问题,而不必让非技术人员参与其中。 – 2017-04-06 19:43:47

1

否此数据未公开。唯一可用的数据是通过HTTP请求公开的内容,其中可能包括他们的操作系统和其他此类信息。但肯定不是机器的名称。

9

浏览器,操作系统,屏幕颜色,屏幕分辨率,Flash版本和Java的支持都应该检测从JavaScript(也许几个) 。但是,计算机名称是不可能的。

编辑:至少在所有浏览器中不可能。

10

那么你可以使用asp.net获取ip地址,然后在ip上进行反向DNS查找以获取主机名。

从ASP.NET开发人员的食谱... Performing a Reverse-DNS Lookup

+0

我用192.168.1.100(机器托管浏览器的IP地址)运行该代码,并给出错误:'错误:请求的名称有效,但没有找到所请求类型的数据' – BigOmega 2009-05-28 22:49:33

-13

我们做了这样的一个bug跟踪公司内部工具,它得到了取出来之前,我们去生活,但我认为这是可行 我认为鸡舍的学生发现它在互联网上的某个地方:)

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(); 
       } 
-1

Erm有什么理由不能只使用HttpRequest?这将在服务器端,但你可以传递给JavaScript,如果你需要?

Page.Request.UserHostName 

HttpRequest.UserHostName

的一个问题,这是它只会在Intranet环境中真正发挥作用,否则它会刚刚结束拿起用户路由器或代理地址...

-3

Page.Request.UserHostName是也“很好,如果你想要关于服务器的信息”

但是为什么?该名称意味着它返回我们想要的。并且在微软网站上广告ServerVariables等同于做我们想要的,即给出远程的主机名。然而两者都给我的运行IIS的主机的IP地址(不是名称)。

3

尝试使用下面给出的代码在Mozilla Firefox中获取客户端计算机名称。

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; 

此外,同一段代码可以作为扩展名,它可以从您的网页调用。

请在下面找到示例代码。

扩展代码:

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 

网页代码:

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

有没有办法这样做,因为JavaScript没有以计算机名,文件系统和其他的访问当地信息。这是JavaScript规范的一部分。安全是主要目的。

0

的更新版本从凯尔:

$(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; 
}); 

要存储的值,添加这些控制:

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

,你也可以从后面像这样调用它:

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

为什么我们在限制范围,为什么不尝试下面的问题,你可能会提出问题,因为不一致进行DNS配置。

InetAddress inet=InetAddress.getByName(request.getRemoteAddr().trim()); 
System.out.println(" host name is : "+inet.getHostName()); 
相关问题