Как я могу прочитать имя компьютера / компьютера клиента из браузера?
Как я могу прочитать имя компьютера / компьютера клиента из браузера?
Возможно ли использовать 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
Единственная проблема с этим заключается в том, что он действительно будет работать только в среде интрасети, в противном случае он просто получит адрес маршрутизатора или прокси-сервера пользователя...
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();
}