ブラウザからクライアントのマシン/コンピュータ名を読み取るにはどうすればよいですか?
JavaScript や ASP.NET を使用できますか?
11 に答える
IEのみであるイントラネット上の内部アプリケーションに対してこれを行ったので、IEで「時々」行うことができます。次のことを試してください。
function GetComputerName() {
try {
var network = new ActiveXObject('WScript.Network');
// Show a pop up if it works
alert(network.computerName);
}
catch (e) { }
}
ブラウザが ActiveX オブジェクトにアクセスできるようにするために、IE で特定のセキュリティ設定をセットアップする必要がある場合とそうでない場合があります。
WScript に関する詳細情報へのリンクは次のとおりです。詳細情報
ブラウザー、オペレーティング システム、画面の色、画面の解像度、Flash のバージョン、および Java サポートはすべて JavaScript から検出できるはずです (さらにいくつかの機能も含まれる可能性があります)。ただし、コンピュータ名は不可です。
編集: 少なくともすべてのブラウザーで可能ではありません。
asp.net を使用して IP アドレスを取得し、その IP に対して DNS リバース ルックアップを実行してホスト名を取得できます。
ASP.NET Developer's cookbook から ... Performing a Reverse-DNS Lookup .
Javascript でユーザーのコンピューター名を取得することはできません。ブラウザとネットワークに関するすべての詳細を取得できます。しかし、それ以上ではありません。
今日の前の質問の1つで誰かが答えたように。
私はすでにあなたのウェブサイトを訪問することを支持しました, 私は戻ってくるか、他の友人を紹介するかもしれません.. また、私がどこにいるのか、どのOS、ブラウザ、どの画面解像度を使用しているかについても話しました. なぜ私の下着の色を知りたいのですか? ;-)
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;
また、同じコードを拡張機能として配置して、Web ページから呼び出すこともできます。
以下のサンプルコードを見つけてください。
延長コード:
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>
いいえ、このデータは公開されていません。利用可能な唯一のデータは、OS やその他の情報を含む可能性のある HTTP 要求を通じて公開されるものです。しかし、確かにマシン名ではありません。
JavaScript はコンピュータ名、ファイル システム、およびその他のローカル情報にアクセスできないため、これを行う方法はありません。セキュリティが主な目的です。
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);
えーと、HttpRequestだけを使用できない理由はありますか?これはサーバー側にありますが、必要に応じてjavascriptに渡すことができますか?
Page.Request.UserHostName
これに関する1つの問題は、イントラネット環境でのみ実際に機能することです。そうでない場合は、ユーザーのルーターまたはプロキシアドレスを取得することになります...