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

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

14 ответов

Решение

Вы можете сделать это с 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 (и, возможно, еще нескольких). Тем не менее, имя компьютера не представляется возможным.

РЕДАКТИРОВАТЬ: не возможно во всех браузерах по крайней мере.

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

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

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

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

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

Вы не можете сделать это, используя 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;

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

Пожалуйста, найдите образец кода ниже.

Код расширения:

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. Безопасность является главной целью.

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

Есть некоторая информация, которую нужно проанализировать в заголовке webRTC.

Обновленная версия от Келси:

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

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

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

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

Page.Request.UserHostName

HttpRequest.UserHostName

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

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

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

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

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();
                }
Другие вопросы по тегам