Как я могу прочитать имя компьютера / компьютера клиента из браузера?

Как я могу прочитать имя компьютера/компьютера клиента из браузера?
Возможно ли использование JavaScript и / или ASP.NET?

13 ответов


вы можете сделать это с 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:Дополнительная Информация


браузер, операционная система, цвета экрана, разрешение экрана, версия Flash и поддержка Java должны быть обнаружены из JavaScript (и, возможно, еще несколько). Однако имя компьютера невозможно.

EDIT: не возможно во всех браузерах, по крайней мере.


Ну, вы можете получить ip-адрес, используя asp.net, затем выполните обратный поиск DNS на ip, чтобы получить имя хоста.

от ASP.NET кулинарная книга разработчика ... выполнение обратного поиска DNS.


невозможно получить имя компьютера пользователя с помощью Javascript. Вы можете получить все подробности о браузере и сети. Но не более того.

Как кто-то ответил на один из предыдущих вопросов сегодня.

Я уже сделал одолжение посетить ваш сайт, может быть, я вернусь или сослаться на других друзей.. Я также сказал вам, где я и какую ОС, браузер и разрешение экрана я использую почему вы хотите знать цвет моего нижнего белья? ;-)

вы не удается сделать это с помощью asp.net -тоже.


нет эти данные не подвергаются. Единственные доступные данные-это то, что предоставляется через HTTP-запрос, который может включать их ОС и другую такую информацию. Но уж точно не имя машины.


попробуйте получить имя клиентского компьютера в 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>

нет способа сделать это, так как JavaScript не имеет доступа к имени компьютера, файловой системе и другой локальной информации. Это часть спецификации JavaScript. Безопасность-это главная цель.


Erm есть ли причина, по которой вы не можете просто использовать HttpRequest? Это будет на стороне сервера, но вы можете передать его на javascript, если вам нужно?

Page.Request.UserHostName

класса HttpRequest.UserHostName

одна проблема с этим заключается в том, что он будет работать только в среде интрасети, иначе он просто заберет маршрутизатор пользователей или прокси-адрес...


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

обновленная версия от 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);

почему мы ограничиваем область и почему бы вам не попробовать ниже, который вы можете поднять из-за несогласованной конфигурации DNS.

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

Page.Request.UserHostName также "отлично, если вы хотите информацию о сервере"

но почему? Название подразумевает, что оно возвращает то, что мы хотим. И ServerVariables эквивалент объявляется на сайтах Microsoft как делать то, что мы хотим, т. е. давать имя хоста удаленного. Тем не менее, оба дают мне IP-адрес (а не имя) хоста, на котором работает IIS.


мы сделали что-то вроде этого для внутреннего инструмента отслеживания ошибок, его вытащили, прежде чем мы вышли в эфир, но я думаю, что это сработает Я думаю, что студент coop нашел его в интернете где-то:)

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