オフィスへの訪問者を記録するための簡単な内部 Web アプリケーションの開発を開始しようとしています。基本的に、彼らは AUP を読んでから、承認を示すために名前を入力します。アプリケーションは、Request.UserHostAddress() を使用して訪問者の IP も記録します。IP をログに記録するだけでなく、スクリプトを実行して、アプリケーションから取得した IP で DHCP を予約したいのですが、MAC アドレスも必要です。このアプリケーションは 1 つのサブネット内でのみ使用されます。訪問者には小さな DHCP 範囲を使用する予定です。
ARP 経由で IP から MAC アドレスを解決するために使用できる組み込み関数はありますか? 既存の関数がある場合、回避策を使用する必要はありません。
さて、参考までに、これは私がやったことです:
Private Function get_MAC(ByVal ip As String) As String
Dim proc As New System.Diagnostics.Process
Try
proc.StartInfo.UseShellExecute = False
proc.StartInfo.RedirectStandardOutput = True
proc.StartInfo.CreateNoWindow = True
proc.StartInfo.FileName = Environment.ExpandEnvironmentVariables("%WINDIR%\system32\ping.exe")
proc.StartInfo.Arguments = ip
proc.Start()
proc.StartInfo.Arguments = "-a " & ip
proc.StartInfo.FileName = Environment.ExpandEnvironmentVariables("%WINDIR%\system32\arp.exe")
proc.Start()
Dim output As String = proc.StandardOutput.ReadToEnd
Dim rgx As New Regex("\w{2}-\w{2}-\w{2}-\w{2}-\w{2}-\w{2}")
If rgx.IsMatch(output) Then
Return rgx.Match(output).Value
Else
Return "ERROR No MAC address found."
End If
Catch ex As Exception
Return "ERROR " & ex.Message
End Try
End Function
私はそれを
get_MAC(Request.UserHostAddress())
これは、Web サーバーがホストと同じサブネットにあることが保証されているためにのみ機能することに注意してください。また、これを Visual Web Developer でテストする場合は、テスト サーバーが UserHostAddress を ::1 (IPv6 ループバック アドレス) として返すことに注意してください。
しかし、主な質問に戻ります。それを行う他の方法はありますか?