Как программно создавать записи статического кэша ARP в Windows XP - PullRequest
3 голосов
/ 08 октября 2010

Есть ли способ установить запись кэша ARP в C #?

Единственный найденный мной способ связан с использованием arp утилита Протокол разрешения адресов

Статические записи, добавленные с помощью команды arp -s , не истекли из кэша.

Есть соответствующие сообщения о Как мнедоступ к информации ARP-протокола через .NET?

Ответы [ 3 ]

0 голосов
/ 20 января 2011

Очевидно, что это не будет чисто .NET, но вы должны быть в состоянии сделать это через Win32 API в библиотеке API IP Helper, а именно - методы CreateIpNetEntry и SetIpNetEntry.Вы, вероятно, захотите сделать это через P / Invoke или упакованную управляемую библиотеку C ++.

http://msdn.microsoft.com/en-us/library/aa366071(v=vs.85).aspx

0 голосов
/ 20 сентября 2013

Вы можете просто запустить команду ARP -s inet_addr eth_adr, где inet_addr - IP-адрес, а eth_adr - аппаратный адрес.

0 голосов
/ 23 декабря 2010

Простое решение, которое я использую сейчас, - запустить пакетную команду, которая добавит эту статическую запись в таблицу 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
...