次の問題があります。Webサーバーがあります。このウェブサーバーはルーターの背後にあります。問題は、さらなる目的のためにサーバー上でWebサイトを開くクライアントのMACアドレスが必要なことです。 ActiveXオブジェクトを介してMACアドレスを取得しようとしましたが、クライアントにWMIをインストールする必要があります。実際のコードは次のとおりです。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title></title>
<meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
<meta name="vs_targetSchema" content="http://schemas.Microsoft.com/intellisense/ie5">
<script id="clientEventHandlersJS" language="javascript">
function Button1_onclick() {
var locator = new ActiveXObject("WbemScripting.SWbemLocator");
var service = locator.ConnectServer(".");
var properties = service.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration");
var e = new Enumerator (properties);
document.write("<table border=1>");
dispHeading();
for (;!e.atEnd();e.moveNext ())
{
var p = e.item ();
document.write("<tr>");
document.write("<td>" + p.Caption + "</td>");
document.write("<td>" + p.IPFilterSecurityEnabled + "</td>");
document.write("<td>" + p.IPPortSecurityEnabled + "</td>");
document.write("<td>" + p.IPXAddress + "</td>");
document.write("<td>" + p.IPXEnabled + "</td>");
document.write("<td>" + p.IPXNetworkNumber + "</td>");
document.write("<td>" + p.MACAddress + "</td>");
document.write("<td>" + p.WINSPrimaryServer + "</td>");
document.write("<td>" + p.WINSSecondaryServer + "</td>");
document.write("</tr>");
}
document.write("</table>");
}
function dispHeading()
{
document.write("<thead>");
document.write("<td>Caption</td>");
document.write("<td>IPFilterSecurityEnabled</td>");
document.write("<td>IPPortSecurityEnabled</td>");
document.write("<td>IPXAddress</td>");
document.write("<td>IPXEnabled</td>");
document.write("<td>IPXNetworkNumber</td>");
document.write("<td>MACAddress</td>");
document.write("<td>WINSPrimaryServer</td>");
document.write("<td>WINSSecondaryServer</td>");
document.write("</thead>");
}
</script>
</head>
<body>
<INPUT id="Button1" type="button" value="Button" name="Button1" language="javascript" onclick="return Button1_onclick()">
</body>
ボタンをクリックすると、ネットワーク構成を含むテーブルが返されるはずですが、それは私には機能しません。ブラウザを介してクライアントのMACアドレスを取得するための別の解決策があるかどうか知りたい。また、Internet Explorerでの使用を制限したくありません。よろしくお願いします。
よろしく、クリス
Javaアプレット、 https://forums.Oracle.com/forums/thread.jspa?threadID=1144276 のpoststを参照)を使用してこれを実行できるようです。および http://techdetails.agwego.com/2008/02/11/37/ 。
これに対するセキュリティ警告にユーザーが同意する必要があるかどうかわからないので、私は試していません。
ActiveXはWindows(およびIEのみ)でのみ機能し、標準のHTMLまたはJavaScriptでMACアドレスを取得するAPIがないため、おそらくこれ以上の方法はありません。私は使用しません。 Flashがこれに役立つかどうかはわかりますが、私はそうは思いません。
ただし、ユーザーのMACアドレスを取得する理由は妥当と思われるかもしれませんが、スプーフィング/変更される可能性があり、特定の状況では正しく表示されない可能性があるため、情報を推測することはお勧めできません。問題に対してより良い解決策が見つかれば(MACアドレスの取得を含まない)、より良い結果が得られます。
私の前のプロジェクトでは。ブラウザのJavaScriptでwebsocketを使用して、同じマシンで実行されているネイティブコードであるC#dllと通信しました。ネイティブコードは、任意のシステム情報、MACアドレス、およびメモリ、ディスク容量などの他のシステム情報を取得できます。Node.jsを使用して、C#を置き換えるだけでなく、Windowsマシンの制限を破ってMACマシンにすることもできます。アプリ全体(chromeブラウザ+ネイティブコード))は、インストールシールドを使用してクライアントにダウンロードされました。