58

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

4

11 回答 11

37

您可以“有时”使用 IE 来执行此操作,因为我已经为仅 IE 的 Intranet 上的内部应用程序执行此操作。尝试以下操作:

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

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

以下是有关 WScript 的更多信息的链接:更多信息

于 2009-05-28T18:43:19.287 回答
15

浏览器、操作系统、屏幕颜色、屏幕分辨率、Flash 版本和 Java 支持都应该可以从 JavaScript 中检测到(可能还有更多)。但是,计算机名称是不可能的。

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

于 2009-05-28T18:46:07.050 回答
12

好吧,您可以使用 asp.net 获取 ip 地址,然后对 ip 进行反向 DNS 查找以获取主机名。

来自 ASP.NET Developer's cookbook ... Performing a Reverse-DNS Lookup

于 2009-05-28T19:01:05.133 回答
9

无法使用 Javascript 获取用户计算机名称。您可以获得有关浏览器和网络的所有详细信息。但不止于此。

就像今天有人在上一个问题中回答的那样。

我已经帮了您的忙,可能会返回或推荐其他朋友.. 我还告诉过您我在哪里以及我使用的操作系统、浏览器和屏幕分辨率您为什么想知道我的内衣颜色?;-)

你也不能使用 asp.net 来做到这一点。

于 2009-05-28T18:35:16.667 回答
4

尝试使用下面给出的代码在 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>
于 2012-03-08T05:33:21.767 回答
1

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

于 2009-05-28T18:35:52.970 回答
1

没有办法这样做,因为 JavaScript 无法访问计算机名称、文件系统和其他本地信息。安全是主要目的。

于 2016-06-07T19:41:16.470 回答
0

有一些信息可以解析到 webRTC 标头中。

var p = new window.RTCPeerConnection();
p.createDataChannel(null);
p.createOffer().then((d) => p.setLocalDescription(d))
p.onicecandidate = (e) => console.log(p.localDescription)

于 2021-04-03T16:58:57.557 回答
-1
<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>
</body>
</html>
于 2016-01-30T11:07:02.173 回答
-1

来自 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;
});

要存储值,请添加以下控件:

<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);
于 2016-08-15T10:46:53.937 回答
-2

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

Page.Request.UserHostName

HttpRequest.UserHostName

这样做的一个问题是它只能在 Intranet 环境中真正工作,否则它最终只会获取用户路由器或代理地址......

于 2009-05-29T00:31:14.500 回答