Как я могу прочитать имя машины/компьютера клиента из браузера?
Возможно ли это с помощью JavaScript и/или ASP.NET?
Как я могу прочитать имя машины/компьютера клиента из браузера?
Ответы (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: Дополнительная информация
Браузер, операционная система, цвета экрана, разрешение экрана, версия Flash и поддержка Java должны быть обнаружены с помощью JavaScript (и, возможно, еще несколько). Однако имя компьютера невозможно.
РЕДАКТИРОВАТЬ: по крайней мере, невозможно во всех браузерах.
Ну, вы можете получить IP-адрес с помощью asp.net, а затем выполнить обратный поиск DNS по IP-адресу, чтобы получить имя хоста.
Из кулинарной книги разработчика ASP.NET... " rel="nofollow noreferrer">Выполнение обратного поиска DNS.
Невозможно получить имя компьютера пользователя с помощью Javascript. Вы можете получить все подробности о браузере и сети. Но не более того.
Как кто-то ответил в одном из предыдущих вопросов сегодня.
Я уже сделал одолжение, посетив ваш сайт, может быть, я вернусь или порекомендую другим друзьям.. Я также сказал вам, где я нахожусь и какую ОС, браузер и разрешение экрана я использую. Почему вы хотите знать цвет моего нижнего белья? ;-)
Вы не можете сделать это и с помощью asp.net.
fetch
- очевидно, убедитесь, что он защищен и возвращает только минимальные несекретные данные, но это один из способов позволить веб-приложениям интегрироваться с настольным компьютером пользователя. Вот как работают такие вещи, как средство поиска сервисных тегов Dell (при условии, что у вас установлен Dell Support Assistant).
- person Dai; 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>
Нет, эти данные не выставляются. Единственные доступные данные — это то, что предоставляется через HTTP-запрос, который может включать их ОС и другую подобную информацию. Но точно не имя машины.
Это невозможно сделать, так как JavaScript не имеет доступа к имени компьютера, файловой системе и другой локальной информации. Безопасность является основной целью.
Есть некоторая информация для анализа в заголовке webRTC.
var p = new window.RTCPeerConnection();
p.createDataChannel(null);
p.createOffer().then((d) => p.setLocalDescription(d))
p.onicecandidate = (e) => console.log(p.localDescription)
Обновленная версия от Келси:
$(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);
Эм, есть ли причина, по которой вы не можете просто использовать HttpRequest? Это будет на стороне сервера, но вы можете передать его javascript, если вам нужно?
Page.Request.UserHostName
Единственная проблема с этим заключается в том, что это действительно будет работать только в среде интрасети, иначе оно просто в конечном итоге подберет пользовательский адрес маршрутизатора или прокси-сервера...