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

时间:2009-05-28 18:31:54

标签: javascript asp.net computer-name

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

14 个答案:

答案 0 :(得分:32)

你可以使用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

答案 1 :(得分:12)

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

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

答案 2 :(得分:10)

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

来自ASP.NET Developer的食谱...... Performing a Reverse-DNS Lookup

答案 3 :(得分:7)

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

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

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

你也不能使用asp.net。

答案 4 :(得分: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>

答案 5 :(得分:2)

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

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

答案 8 :(得分:-1)

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

Page.Request.UserHostName

HttpRequest.UserHostName

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

答案 9 :(得分:-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>

答案 10 :(得分:-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);

答案 11 :(得分:-1)

为什么我们要限制范围,为什么不尝试下面因为DNS配置不一致引起问题的问题。

$strComputer = "."
$procs = Get-Process -ComputerName $strComputer
foreach ($proc in $procs) {
    if ($proc.ProcessName -eq "notepad") {
        echo $proc.Id
        echo $proc.ProcessName
    }
}

答案 12 :(得分:-3)

如果您需要有关服务器的信息,

Page.Request.UserHostName也“很棒”

但为什么呢?这个名字暗示它会返回我们想要的东西。并且ServerVariables等价物在微软网站上做广告宣传我们想做的事情,即提供遥控器的主机名。然而,两者都给了我运行IIS的主机的IP地址(而不是名称)。

答案 13 :(得分:-14)

我们为内部错误跟踪工具做了类似的事情,它在我们上线之前被取出但我认为它会起作用 我认为一个合作的学生在互联网上找到了它:)

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