• 締切済み

WMIスクリプトを使用してMACアドレスをASPで取得

タイトルの通りですが、 WMIスクリプトを使用して、 ASPでMACアドレスの取得を行なっているのですが、 なかなか上手くいきません。 <%@ LANGUAGE="VBSCRIPT"%> <HTML> <HEAD> </HEAD> <BODY> <% Dim QfeSet Dim QfeSets Dim Qfe Dim Locator Dim Service Dim Ret on error resume next Set Locator = CreateObject("WbemScripting.SWbemLocator") Set Service = Locator.ConnectServer If Err = 0 then Set QfeSet = Service.Get("Win32_NetworkAdapterConfiguration") QfeSet.Security_.impersonationLevel = impersonate Set QfeSets = QfeSet.Instances_ End If For Each Qfe In QfeSet If Qfe.IPEnabled = True Then Ret = Qfe.MACAddress & vbCrLf Response.write("MACADDRESS:" & Ret & "<BR>") End If Next %> </BODY> </HTML> CreateObjectやService.Getのところが 原因ではないかと思うのですが・・・。 どなたか教えて戴けますでしょうか? 宜しくお願い致します。

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

サーバーのNICのMACアドレスを取得するのですか? CreateObjectは Server.CreateObject と言った具合にするのだと思います ただこうしても セキュリティ関連のエラーで跳ねられてしまいますが… ConnectServerメソッドでアクセス違反になってしまうので ログオンできるユーザー情報を設定しても無理みたいですよ

CCTOKO
質問者

お礼

回答有りがとう御座います。 >サーバーのNICのMACアドレスを取得するのですか? いえ、クライアント側です。 >CreateObjectは Server.CreateObject と言った具合にするのだと思います >ただこうしても セキュリティ関連のエラーで跳ねられてしまいますが… >ConnectServerメソッドでアクセス違反になってしまうので ログオンできるユーザー情報を設定しても無 >理みたいですよ そうですか、わかりました。 ありがとう御座いました。

関連するQ&A

  • サーバーからクライアントのMACアドレスを取得

    ASPを使用して、サーバーからクライアント側の ネット情報などを取得したいのですが、できるのでしょうか? 今現在WMIを使用してクライアントからサーバーのMACアドレスを 取得できているのですが、逆の事もできるのではと考えました。 <HTML> <HEAD> <TITLE>MACアドレスの表示</TITLE> </HEAD> <BODY> <Form method="post" name="form1"> <input type="hidden" name="h_MACaddress" value="<%= MACA %>"> <% Dim MACA ConnectString = "winmgmts:{impersonationLevel=impersonate}!root\cimv2" Query = "SELECT MACaddress " Query = Query & " FROM Win32_NetworkAdapterConfiguration" Query = Query & " WHERE IPEnabled=TRUE" On Error Resume Next Set IPConfigSet = GetObject( ConnectString ).ExecQuery( Query ) if Err <> 0 Then 'エラー発生表示 if Err.Number = -2147217405 then Response.Write "Error 0x80041003: Access Denied: " Response.Write "Check permissions and file security for this ASP file." Response.Write "<BR>" else Response.Write "エラー説明: " Response.Write Err.Description Response.Write "エラー番号: " Response.Write Err.Number Response.Write "<BR>" end if end if For each IPConfig in IPConfigSet 'MACアドレス取得処理 Response.Write("MACADDRESS: ") Response.Write(IPConfig.MACaddress & "<br>") MACA = IPConfig.MACaddress Next 'Response.write("aaa:" & MACA & "<BR>") 'MACアドレスの変数 Response.Write "<BR>" if Err <> 0 Then 'エラー発生表示 Response.Write "エラー説明: " Response.Write Err.Description Response.Write "エラー番号: " Response.Write Err.Number Response.Write "<BR>" end if %> </BODY> </HTML> プログラムはこのようなものを使用しております。 できるできないだけでも知りたいので、 分かる方いらっしゃいましたら教えていただけますでしょうか? 宜しく御願い致します。

  • Macアドレスの取得(ソースは書けたが不安です)

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load '1番目の方法 Dim Objquery As New Management.ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE MACAddress is not null") Dim ObjCollection As Management.ManagementObjectCollection = Objquery.Get Dim Obj As Management.ManagementObject For Each Obj In ObjCollection If (CType(Obj("IPEnabled"), Boolean) = True) Then Label1.Text = Replace(Obj("MacAddress"), ":", "") End If Next '2番目の方法 Dim computerProperties As IPGlobalProperties = IPGlobalProperties.GetIPGlobalProperties() Dim nics As NetworkInterface() = NetworkInterface.GetAllNetworkInterfaces() Dim adapter As NetworkInterface For Each adapter In nics Label2.Text = adapter.GetPhysicalAddress().ToString() Exit For Next adapter End Sub いつもお世話になっております。 以上の2種類の方法のどちらかでMACアドレスを取得したいのですが、あいにく知識不足で、どちらの方がより高い確率で取得できるのでしょう。 ちなみにソースを見る限り、IPアドレスなどは複数持つことができるようです。かなりかなり不安です。 お願いいたします。

  • VBSでとある条件の時に処理をやらずに終了させる方法

    VBSでとある条件の時に処理をやらずに終了させる方法で悩んでいます。 Dim ObjIE Dim ObjShell Dim ObjWindow Dim WinExist WinExist = False Set ObjShell = CreateObject("Shell.Application") For Each ObjWindow In ObjShell.Windows If TypeName(ObjWindow.Document) = "HTMLDocument" Then WinExist = True Set ObjIE = ObjWindow End If Next Set ObjShell = Nothing If Not WinExist = True Then Set ObjIE = CreateObject("InternetExplorer.Application") End If ・ ・ ・ ・ 例えばこのように起動しているIEを探します そこでもしYahoo!JAPANが起動していたら以降の処理をやらずに終わらせたいのですが・・・ どのような記述にすればよいでしょうか?

  • VBのコードが理解できません 解説いただけないでしょうか?

    Dim ObjIE As Object Dim ObjShell As Object Dim ObjWindow As Object Dim WinExist As Boolean WinExist = False Set ObjShell = CreateObject("Shell.Application") For Each ObjWindow In ObjShell.Windows If TypeName(ObjWindow.Document) = "HTMLDocument" Then  WinExist = True  Set ObjIE = ObjWindow End If Next Set ObjShell = Nothing If Not WinExist = True Then Set ObjIE = CreateObject("InternetExplorer.Application") End If ObjIE.Navigate "http://nantokakantoka.html" ObjIE.Visible = True このコードを解説いただけないでしょうか? 特に WinExist For Each ObjWindow In ObjShell.Windows If TypeName(ObjWindow.Document) = "HTMLDocument" Then が何をしているのか分からないんです。

  • asp.netでのセッションを使用したログイン

    asp.netでmssql server を利用してログイン機能を実装しました。 以下のようなコードでmssqlに保存してあるIDとパスが一致すれば 以降の画面ではセッションにID、パスが保存され page loadでセッションにID、パスがなかればページがすすんでいけないような設定にしています。 機能は問題なく動作しているのですがこのような仕様はセキュリティ上問題はないのでしょうか。 商用サイトではないのですが、ある程度広域に向けたサイトを構築しようと考えておりまして、セキュリティ向上のため、工夫できるようなことがあればご意見いただきたいです。 よろしくお願いいたします。 ************************************************************** ログインページ ************************************************************** Dim staffid As Integer Dim staffname As String Dim adminflag As Boolean Protected Sub btnLogon_Click(ByVal sender As Object, ByVal e As System.EventArgs) 'ユーザーIDの入力チェック If txtUserID.Text = "" Then lblErr.Text = "ユーザーIDを入力してください。" Return End If 'パスワードの入力チェック If txtpassword.Text = "" Then lblErr.Text = "パスワードを入力してください。" Return End If 'ユーザーとパスワードの検証 If Not CheckUserPassword(txtUserID.Text, txtpassword.Text) Then lblErr.Text = "ユーザーIDまたはパスワードが違います。" Return End If 'セッション変数へ値をセットする Session("StaffID") = staffid Session("StaffName") = staffname Session("AdminFlag") = adminflag End Sub Private Function CheckUserPassword(ByVal userid As String, ByVal password As String) As Boolean Dim ret As Boolean Dim strSQL As String strSQL = "SELECT staffID, staff_name, admin_flag , permission FROM tbl_staff " & _ "WHERE userID = '" & userid.Replace("'", "''") & _ "' AND password = '" & password.Replace("'", "''") & "'" '接続文字列を取得する Dim cnStr As String = System.Configuration.ConfigurationManager.ConnectionStrings("hogehogeConnectionString").ConnectionString() 'コネクションを定義する Using connection As New SqlConnection(cnStr) 'コマンドを定義する Dim command As New SqlCommand(strSQL, connection) 'コネクションを開く connection.Open() Try 'コマンドからデータリーダーを定義する Dim dr As SqlDataReader = command.ExecuteReader 'データリーダーから結果を読み込む If dr.Read Then '対象データが存在する場合 '正しいユーザーIDとパスワードが指定されたので、 'データリーダーから読み出したデータをメンバ変数にセットする staffid = dr("staffID") staffname = dr("staff_name") adminflag = dr("admin_flag") permission = dr("permission") ret = True Else '対象データが存在しない場合 '不正なユーザーIDまたはパスワードが指定された ret = False End If Catch ex As Exception '例外処理(SQLエラーなど) ret = False End Try 'コネクションを閉じる connection.Close() End Using '結果を返して終了する Return ret End Function ************************************************************** ログイン後に行くページでの設定 ************************************************************** Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) '[ユーザーID]ボックスにフォーカスをセットする If Session("StaffID") Is Nothing Then Response.Redirect("~/top.aspx") ElseIf Not Session("AdminFlag") = True Then Response.Redirect("~/top_normal.aspx") End If End Sub

  • VBでのContinueが間違っているとき

    http://oshiete1.goo.ne.jp/qa4564345.htmlではありがとうございました。 教わったことを参考にやってみたのですがうまくいきません。 Continueの部分がうまくいくPCといかないPCがあるのでどうしたらいいか分からなくなってしまいました・・・ Option Explicit Dim objIE Dim objShell Dim objWindow Dim WinExist Dim strURL Dim strURL2 Dim Flug strURL = "http://www.yahoo.co.jp/" strURL2 = "http://www.google.co.jp/" WinExist = False Set objShell = CreateObject("Shell.Application") For Each objWindow In objShell.Windows If TypeName(objWindow.Document) <> "HTMLDocument" Then Continue End If WinExist = True Set objIE = objWindow If objIE.LocationURL = strURL Then Flug = True Exit For End If Next If Flug = True Then msgbox "ヤフー存在" Else msgbox "別の処理を行なう" If WinExist = False Then 'IEが無い場合 起動する Set objIE = WScript.CreateObject("InternetExplorer.Application") objIE.Navigate strURL2 objIE.Visible = True Set objIE = Nothing End If End If

  • PDFlibでエラー(permission denied)

    ASP初心者です。 IIS+ASP+VBScript+PDFlibの環境でPDFを出力するアプリを開発中です。 実行すると 「Error: Couldn't open PDF file 'sample.pdf' for writing  (permission denied)」 というエラーになります。 権限がないのが原因だと思うのですが、これは  ・プログラム側の問題  ・環境設定に抜けがある のどちらなのでしょうか? どなたかご存知の方がいらっしゃいましたらご教授下さい。 よろしくお願いします。 ちなみにプログラムは下記になります。 <%@ Language=VBScript %> <% Option Explicit const title = "証明書" dim msg Response.Write("株式会社○○") Dim font Dim oPDF Set oPDF = Server.CreateObject("PDFlib_com.PDF") oPDF.set_info "Creator", "sample.asp" oPDF.set_info "Author", "marumaru" oPDF.set_info "Title", "sample (COM/VBS)!" ' This means we must check return values of load_font() etc. oPDF.set_parameter "errorpolicy", "return" if (oPDF.begin_document("sample.pdf", "") = -1) then msg = "Error: " & oPDF.get_errmsg end if Set oPDF = Nothing %> <HTML> <HEAD> <TITLE><% = title %></TITLE> </HEAD> <BODY> </BODY> </HTML>

  • 起動しているIEをVBSで閉じるときの問題・・・

    VBスクリプトで起動しているIEを探し特定のサイトであればウィンドウを閉じたいのですがどのようにすればよいのでしょうか? Dim ObjIE Dim ObjShell Dim ObjWindow Dim WinExist WinExist = False Set ObjShell = CreateObject("Shell.Application") For Each ObjWindow In ObjShell.Windows If TypeName(ObjWindow.Document) = "HTMLDocument" Then WinExist = True Set ObjIE = ObjWindow End If Next Set ObjShell = Nothing If Not WinExist = True Then Set ObjIE = CreateObject("InternetExplorer.Application") End If If objIE.Document.URL = "http://www.yahoo.co.jp/" Then objIE.quit End If If objIE.Document.URL = "http://www.excite.co.jp/" Then objIE.quit End If If objIE.Document.URL = "http://www.google.co.jp/" Then ?????????? End If ・ ・ ・ 例えばディスプレイ上にYahoo、Excite、Googleのホームページがそれぞれ立ち上がっていたとします。 もしYahooがあれば閉じて次にExciteを探しあれば閉じて、次にGoogleのページがあればそのままにし後の処理を行わず終わらせたいのですが・・・もしGoogleが開いていればこれ以降の処理を全てすっ飛ばして終了にしたいのですが・・・ また、If thenを繰り返してばかりで汚いコードのような気もします。 これをやっていてYahoo、Excite、Google全て開いていた場合何故かエラーが出て終了してしまいます。 どなたかいい方法があれば教えて下さい。

  • VBSからリモートでbat実行(WMI)

    VBS初心者です。 別端末上のbatファイルを別ユーザでリモート実行したいのですが、 以下のソースでエラーが起きてしまいます。(result が2で返ってきてしまう) どなたか原因がお解りになりましたらご教授宜しくお願い致します。 ----------------------------------------------------- RemoteExecute "リモート先","ドメイン\User","pass","C:\test.bat" Function RemoteExecute(strServer, strUser, strPassword, CmdLine) Const Impersonate = 3 RemoteExecute = -1 Set Locator = CreateObject("WbemScripting.SWbemLocator") Set Service = Locator.ConnectServer(strServer, "root\cimv2", strUser, strPassword) Service.Security_.ImpersonationLevel = Impersonate Set Process = Service.Get("Win32_Process") result = Process.Create(CmdLine, , , ProcessId) If (result <> 0) Then WScript.Echo "Creating Remote Process Failed: " & result Wscript.Quit End If RemoteExecute = ProcessId End Function -----------------------------------------------------

  • ASP上のVB SCRIPT記述

    初心者です。 ●Request.Formatで配列が取得できるのがベスト ●MID関数の代替手段(代替ロジック) 下記の処理を行いたいのですが、どうのようにコーディングしていいのか分かりません。VB SCRIPTでは、MID関数がサポートされていないようなのですが、他の代替手段が思い付きません。どなたか宜しくアドバイス願います。 「delObject」はHTML上で一覧表示する為の1カラムで、行単位に配列で値をもってます。Request.Formatでとれればベストなのですが、配列は取得できませんでした。そのかわり、下記コーディングでstrDelCondの中にカンマ(,)区切りで値が取得できたので、それをMID関数で一文字ずつ取得しようとしました。が、MID関数がサポートされていないようで行き詰まってしまってます。宜しくお願いします。 dim strStr dim strSeq(100) dim nLen strDelCond = Request.Form("delObject") nLen = Len(strDelCond) ii=0 for i=0 to nLen strSeq(ii)="" strStr = Mid(strDelCond,i,1) if strStr = "," then ii = ii + 1 else strSeq(ii) = strSeq(ii) + strStr strSeq[ii] = strStr end if next

専門家に質問してみよう