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

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


person Ryan    schedule 28.05.2009    source источник
comment
Я не уверен, но, вероятно, это не разрешено политикой безопасности JS.   -  person Dasha Salo    schedule 28.05.2009
comment
Ну, вы могли бы добавить поле ввода и попросить пользователя ввести имя своего компьютера ;-)   -  person Andre Miller    schedule 28.05.2009
comment
причина в системе ИТ-поддержки, где клиент хочет иметь возможность прикрепить имя компьютера/машины к билету, отправленному пользователем   -  person Ryan    schedule 28.05.2009
comment
Райан, это была точная причина, по которой внутреннее приложение, которое я сделал, также нуждалось в нем. Приложение должно было прикрепить имя компьютера к билетам запросов на обслуживание, сгенерированным с определенного компьютера. Пользователю не нужно было знать имя компьютера при заполнении билета.   -  person Kelsey    schedule 29.05.2009


Ответы (10)


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

person Kelsey    schedule 28.05.2009
comment
работает только в Internet Explorer, но не в Microsoft Edge - person Abdulkarim Kanaan; 24.09.2020

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

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

person nevets1219    schedule 28.05.2009

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

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

person Mark    schedule 28.05.2009
comment
Я запустил этот код с 192.168.1.100 (IP-адрес компьютера, на котором размещен браузер), и он выдал ошибку: «Ошибка: запрошенное имя допустимо, но данные запрошенного типа не найдены». - person Ryan; 29.05.2009
comment
192.168.*.* — это частный IP-адрес, вам нужно будет запустить код на компьютере в частной сети и иметь DNS-сервер в сети, чтобы это работало. - person Mark; 29.05.2009
comment
В некоторых случаях это невозможно, так как веб-сервер может быть за расширенным прокси/брандмауэром. Тогда все, что вы когда-либо получите, это IP-адрес/имя хоста этого прокси/брандмауэра. Это типично для больших веб-ферм. Поэтому обязательно проверьте топологию конечной производственной сети, прежде чем внедрять это. - person JDC; 01.04.2015
comment
при условии, что URL-адрес не работает, поэтому ответы, содержащие только URL-адреса, не одобряются. ссылку можно обновить? Может ли кто-нибудь ввести соответствующие биты кода и вместо этого предоставить ссылку на цитату? - person Shaun Wilson; 09.12.2016
comment
обратная неработающая ссылка DNS - person andrepaulo; 10.03.2017

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

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

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

Вы не можете сделать это и с помощью asp.net.

person Shoban    schedule 28.05.2009
comment
Эх, если вы создаете внутреннее приложение в корпоративной среде, вы будете удивлены тем, насколько полезной будет эта информация. Мы отслеживаем ошибки в нашем приложении, и IP-адреса, которые использует пользователь, меняются в зависимости от его среды (wi-fi, LAN, VPN). Тогда можно получить имя своего компьютера из журналов, отправленных на сервер клиентом, и использовать корпоративные инструменты для просмотра установленного программного обеспечения и исправлений Windows на этом компьютере. Без прямого доступа к компьютеру. Очень помогает в устранении неполадок без необходимости привлечения нетехнического сотрудника. - person Johnathon Sullinger; 06.04.2017
comment
@JohnathonSullinger Для внутренних приложений вы можете запустить простой локальный веб-сервер (который работает в фоновом режиме как служба Windows), который возвращает информацию о компьютере пользователя, которую могут запрашивать веб-приложения, выполняя запросы AJAX/fetch - очевидно, убедитесь, что он защищен и возвращает только минимальные несекретные данные, но это один из способов позволить веб-приложениям интегрироваться с настольным компьютером пользователя. Вот как работают такие вещи, как средство поиска сервисных тегов Dell (при условии, что у вас установлен Dell Support Assistant). - person Dai; 02.12.2020
comment
@Dai Запуск веб-сервера на более чем 7000 клиентских рабочих столов на нашем предприятии — это не то, чего мы хотим. Вы должны исправлять и поддерживать этот веб-сервер, а затем иметь дело с различными типами устройств, такими как Chromebook, Macbook, устройства Windows ARM и x86 и т. д. Разбирать и управлять всем этим было бы кошмаром. - person Johnathon Sullinger; 02.12.2020
comment
Что мы делаем, так это извлекаем IP-адрес из машины и регистрируем эту серверную часть из HTTP-запроса. IP-адреса имеют тенденцию меняться из-под нас, но это происходит только раз в несколько недель или месяцев для каждого устройства. Для службы поддержки это обычно не проблема. Для конфиденциальных вещей, связанных с аудитом, мы просто выполняем DNS-поиск IP-адреса в наших контроллерах домена AD как часть обработки журналов на стороне сервера. Затем мы пишем запись в журнале. Это работает, так как перед всеми нашими устройствами стоит DNS, совпадающий с именем машины. - person Johnathon Sullinger; 02.12.2020

Попробуйте получить имя клиентского компьютера в 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>
person Ganesh    schedule 08.03.2012
comment
NB: этот код очень старый и не будет работать ни в одной текущей версии Firefox, даже в расширениях. - person ; 20.09.2018

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

person aleemb    schedule 28.05.2009

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

person Denys    schedule 07.06.2016
comment
Это часть спецификации JavaScript — это не так. Это вещи, которые в значительной степени не являются частью спецификации языка. Если они доступны, то через функции, предоставляемые хост-средой. Браузеры их не предоставляют. NodeJS делает. (Для двух распространенных примеров). - person Quentin; 27.09.2016
comment
Спасибо @Quentin, хорошая поправка. Это ограничение браузера по соображениям безопасности. - person Denys; 28.09.2016

Есть некоторая информация для анализа в заголовке webRTC.

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

person NVRM    schedule 03.04.2021

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

$(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);
person mutanic    schedule 15.08.2016
comment
Извините за быстрый ответ, вы также можете использовать cookie для хранения значения, попробуйте - person mutanic; 06.09.2018
comment
ActiveXObject не будет работать в Chrome. Я попробовал пример с использованием ActiveXObject.. IE код выполняется, но не в Chrome... - person Ziggler; 07.09.2018

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

Page.Request.UserHostName

HttpRequest.UserHostName

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

person Sean Molam    schedule 29.05.2009