我即将开始开发一个简单的内部 Web 应用程序来记录我办公室的访客。基本上,他们将阅读 AUP,然后输入他们的姓名以表示确认。该应用程序还将使用 Request.UserHostAddress() 记录访问者的 IP。除了记录 IP 之外,我还想运行一个脚本来使用从应用程序获得的 IP 进行 DHCP 保留,但我还需要拥有 MAC 地址。这个应用程序只能在一个子网中使用,我计划为访问者使用一个小的 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 环回地址)。
但回到主要问题:还有其他方法吗?