Come inviare pacchetti Ethernet grezzi con C #?

C’è un modo per inviare Ethernet di pacchetti grezzi ad un altro host tramite C #? In Windows 7 se fa differenza.

Sulla base del suggerimento di Saint_pl:

Ho trovato probabilmente una soluzione migliore, simile a SharpPcap. È Pcap.Net – .NET wrapper per WinPcap. Ora posso modificare i miei pacchetti tutto ciò che voglio.


Ho delle risorse per te che potrebbero essere d’aiuto. Non provo le soluzioni in Windows 7 ma forse contiene alcune informazioni utili per iniziare.

Manipolazione o mirror di pacchetti Ethernet Raw su CodeProject

Questo scopo di questo articolo è spiegare come inviare un pacchetto Ethernet raw utilizzando C # su una piattaforma Microsoft. Un pacchetto Ethernet raw è il frame di rete Layer 2 completo che viene inviato al wire fisico. L’invio di un frame come questo consente di manipolare gli indirizzi MAC di destinazione e di origine e i campi del protocollo Layer 3.

Anche alcune informazioni sui socket non elaborati (nel caso sia interessante anche tu):

Client (e Server) Sockets Comunicazione dare un’occhiata a tutto il capitolo ma qui parti chiave:

  • Esempio di programma Socket UDP raw C #
  • C # Raw Socket Ping Esempio di programma parte A | parte B
  • Tutti gli esempi

Non invio di pacchetti ma forse interessante: uno sniffer di rete in C # , SharpPcap – Un pacchetto per Capture Framework per .NET

Le API di iphelper hanno alcune cose di basso livello, ma probabilmente non così basse come si vuole ottenere

Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint ip = new IPEndPoint(IPAddress.Parse("10.25.184.11"), 4456); server.Connect(ip); byte[] sendData = new byte[] { 0, 8, 32, 64 }; server.Send(sendData); //done. now let's listen for data byte[] receiveData = new byte[1024]; int receivedDataLength = server.Receive(receiveData); //if the response is a string message string stringData = Encoding.ASCII.GetString(receiveData, 0, receivedDataLength); Console.WriteLine(stringData);