是否有辦法在C#中設置ARP緩存條目?如何在Windows XP中以編程方式創建靜態ARP緩存條目
我發現的唯一的方法是使用ARP實用Address Resolution Protocol
與ARP添加靜態項-s命令不會從緩存過期的關係。
有相關崗位約How do I access ARP-protocol information through .NET?
是否有辦法在C#中設置ARP緩存條目?如何在Windows XP中以編程方式創建靜態ARP緩存條目
我發現的唯一的方法是使用ARP實用Address Resolution Protocol
與ARP添加靜態項-s命令不會從緩存過期的關係。
有相關崗位約How do I access ARP-protocol information through .NET?
它不會是純粹的.NET將很明顯,但你應該能夠通過在IP助手API庫在Win32 API來做到這一點 - 即CreateIpNetEntry和SetIpNetEntry方法。您可能希望通過P/Invoke或包裝的託管C++庫來完成此操作。
http://msdn.microsoft.com/en-us/library/aa366071(v=vs.85).aspx
我使用的是現在最簡單的解決方法是運行批處理命令,將添加此靜態進入ARP表。在Vista上,這將需要管理員用戶權限。
' arp -s 192.168.1.12 01-02-03-04-05-06
Public Sub UpdateArpTable(IpAddress as string, MacAddress as string)
Dim outputMessage As string = ""
Dim errorMessage As string = ""
Dim command As String = String.Format("-s {0} {1}", Address, MacAddress)
ExecuteShellCommand("arp", command, outputMessage, errorMessage)
End Sub
Public Shared Sub ExecuteShellCommand(FileToExecute As String, CommandLine As String)
Dim Process As System.Diagnostics.Process = Nothing
Try
Process = New System.Diagnostics.Process()
Dim CMDProcess As String = String.Format("{0}\cmd.exe", Environment.SystemDirectory)
Dim Arguments As String = String.Format("/C {0}", FileToExecute)
If CommandLine IsNot Nothing AndAlso CommandLine.Length > 0 Then
Arguments += String.Format(" {0}", CommandLine)
End If
Dim ProcessStartInfo As New System.Diagnostics.ProcessStartInfo(CMDProcess, Arguments)
ProcessStartInfo.CreateNoWindow = True
ProcessStartInfo.UseShellExecute = False
ProcessStartInfo.RedirectStandardOutput = True
ProcessStartInfo.RedirectStandardInput = True
ProcessStartInfo.RedirectStandardError = True
Process.StartInfo = ProcessStartInfo
Process.Start()
Process.WaitForExit()
Process.WaitForExit()
Finally
' close process and do cleanup
Process.Close()
Process.Dispose()
Process = Nothing
End Try
End Sub
你可以簡單的運行命令ARP -s inet_addr eth_adr其中inet_addr是IP地址和eth_adr是硬件地址。
Process process = new Process();
process.StartInfo.FileName = "arp -s 220.0.0.161 00-50-04-62-F7-23";
process.StartInfo.CreateNoWindow = true; //Don't show window
process.Start();