Domanda

Sto scrivendo un'applicazione che inietta pacchetti usando SharpPcap .

Tuttavia, dal momento che sto costruendo i pacchetti per conto mio e conoscere solo l'indirizzo IP della destinazione, devo determinare l'indirizzo fisico del salto successivo. Posso sempre inviare un ping al indirizzo IP , annusarla, e di ottenere il MAC indirizzo dal pacchetto sniffato. Tuttavia, speravo che c'è un modo meno contorto di farlo in C # .

Ovviamente, ottenendo l'indirizzo IP del prossimo hop sarà anche molto utile, come posso quindi utilizzare SendArp di determinare l'indirizzo MAC.

Come la tabella di routing farà. Come faccio a ottenere che utilizzando il codice?

È stato utile?

Soluzione

Ho avuto alcuni problemi con WMI (sembra che non si può correlare tra un'interfaccia-indice in Win32_IP4RouteTable con un dispositivo reale; documentazione MSDN è sbagliato, e altre tecniche più hackish fallire su alcuni computer).

Così, ho scelto di utilizzare la GetBestRoute , che in realtà mi ha salvato un sacco di tempo, perché permette di Windows fare la decisione di routing su se stessa, e restituisce l'indirizzo IP del prossimo hop e l'identificatore NIC che porta a tale indirizzo. E 'anche un bel po' più veloce di esecuzione di una query WMI.

È quindi possibile trovare la scheda di rete in sé, con la ricerca di tale identificatore nella lista restituita da GetAdaptersInfo .

Speranza che aiuta ...

Altri suggerimenti

indirizzi fisici sono risolte dalle href="http://en.wikipedia.org/wiki/Address_Resolution_Protocol" Address Resolution Protocol - basta inviare una ARP Reuest con l'indirizzo IP da risolvere.

Se la destinazione non è nella rete locale, il pacchetto deve essere inviata al gateway standard e una deve eseguire una richiesta ARP per il gateway standard. Il gateway standard può essere ottenuto con metodi dalla System.Net .NetworkInformation namespace.

 NetworkInterface.GetAllNetworkInterfaces()[0].GetIPProperties().GatewayAddresses

Il modo completamente hacker di farlo sarebbe quello di eseguire il comando "arp -a" e leggere e analizzare i risultati del comando (utilizzando il cache ARP già detenuta da Windows).

In caso contrario, è necessario includere ARP nel vostro stack di protocollo. Questo è come il vostro sistema si lavora per capire dove inviare fotogrammi. O, infine, se non sei preoccupato di essere inefficiente, è possibile impostare la destinazione Ethernet come: FF: FF: FF: FF: FF: FF e inondazioni tutti sulla stessa LAN come lei. Quando qualcosa risponde o si ottiene un pacchetto, in cache da soli per avere indirizzo MAC corretta destinazione.

Personalmente, se avete fatto l'approccio tutti diluvio sulla mia rete, mi piacerebbe farti del male, ma a seconda della situazione che potrebbe essere un hack abbastanza facile. Tuttavia, facendo un'implementazione dello stack completo al 100% è piuttosto complessa, dal momento che ci sono un sacco di casi limite che dovrebbe essere ben supportato (come ad esempio la gestione di proxy ARP, ARP gratuito, ecc.).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top