如何从浏览器中读取客户端的机器/计算机名称? 是否可以使用JavaScript和/或ASP.NET?
答案 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
这样做的一个问题是,它只会在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();
}