2009-05-28 108 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()); 
相關問題