如何从浏览器读取客户端的机器/计算机名称?

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

您可以使用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的更多信息的链接: 更多信息

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

从ASP.NET开发人员的食谱… 执行反向DNS查找 。

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

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

用Javascript来获取用户计算机名称是不可能的。 你可以得到关于浏览器和networking的所有细节。 但不是更多。

就像今天上一个问题中的一个回答一样。

我已经做了一个访问您的网站的好处,可能是我会返回或引荐其他朋友..我也告诉你我在哪里,我使用什么操作系统,浏览器和屏幕分辨率为什么你想知道我的内衣颜色? 😉

你也不能用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; 

同样的一段代码也可以作为扩展名,它可以从你的网页中调用。

请在下面find示例代码。

扩展代码:

 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请求公开的内容,可能包括他们的操作系统和其他信息。 但肯定不是机器的名字。

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

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

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 

HttpRequest.UserHostName

一个问题是,它只能在Intranet环境下工作,否则最终只能获得用户路由器或代理地址。

为什么我们限制了范围,为什么不尝试下面的问题,你可能会提出问题,由于不一致的DNSconfiguration。

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

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

但为什么? 这个名字意味着它返回我们想要的。 ServerVariables等价物在Microsoft网站上做广告,做我们想做的事情,即给出远程的主机名。 然而两者都给我的运行IIS的主机的IP地址(而不是名称)。

我们做了这样的内部错误跟踪工具,它在我们上线之前就被拿走了,但是我认为它会起作用我认为一个coop的学生在互联网上find了它:)

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