如何从浏览器中读取客户端的机器/计算机名称?
是否可以使用 JavaScript 和/或 ASP.NET?
11 回答
您可以“有时”使用 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 的更多信息的链接:更多信息
浏览器、操作系统、屏幕颜色、屏幕分辨率、Flash 版本和 Java 支持都应该可以从 JavaScript 中检测到(可能还有更多)。但是,计算机名称是不可能的。
编辑:至少在所有浏览器中都不可能。
好吧,您可以使用 asp.net 获取 ip 地址,然后对 ip 进行反向 DNS 查找以获取主机名。
来自 ASP.NET Developer's cookbook ... Performing a Reverse-DNS Lookup。
无法使用 Javascript 获取用户计算机名称。您可以获得有关浏览器和网络的所有详细信息。但不止于此。
就像今天有人在上一个问题中回答的那样。
我已经帮了您的忙,可能会返回或推荐其他朋友.. 我还告诉过您我在哪里以及我使用的操作系统、浏览器和屏幕分辨率您为什么想知道我的内衣颜色?;-)
你也不能使用 asp.net 来做到这一点。
尝试使用下面给出的代码在 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>
不,此数据未公开。唯一可用的数据是通过 HTTP 请求公开的数据,其中可能包括其操作系统和其他此类信息。但肯定不是机器名。
没有办法这样做,因为 JavaScript 无法访问计算机名称、文件系统和其他本地信息。安全是主要目的。
有一些信息可以解析到 webRTC 标头中。
var p = new window.RTCPeerConnection();
p.createDataChannel(null);
p.createOffer().then((d) => p.setLocalDescription(d))
p.onicecandidate = (e) => console.log(p.localDescription)
<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>
来自 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);
Erm有什么理由不能只使用HttpRequest吗?这将在服务器端,但如果需要,您可以将其传递给 javascript?
Page.Request.UserHostName
这样做的一个问题是它只能在 Intranet 环境中真正工作,否则它最终只会获取用户路由器或代理地址......