2010-10-18 6 views
25

C'è un modo per inviare Ethernet pacchetto raw ad un altro host tramite C#? In Windows 7 se fa differenza.Come inviare pacchetti Ethernet raw con C#?

+2

Cosa vi aspettate che accada su l'altra estremità? Anche crudo? Crea il tuo protocollo? Cosa c'è di sbagliato in quelli che tutti noi usiamo, il tuo hardware sa come instradare e il tuo amministratore della LAN sa come supportare? –

+0

Voglio solo inviare il pacchetto ethernet con alcuni campi modificati come l'indirizzo MAC – Saint

+1

SharpPcap e Pcap.net sono la strada da percorrere. È necessario un framework wrapper WinPcap perché Windows non consente l'accesso alle intestazioni del protocollo di livello inferiore per "ragioni di sicurezza". WinPcap fornisce il proprio driver di rete che consente di ignorare tale restrizione. –

risposta

17

Sulla base di suggerimento di Saint_pl:

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


devo alcune risorse per te, che forse utile. Non provo le soluzioni in Windows 7 ma forse contiene alcune informazioni utili per iniziare.

Raw Ethernet Packet Manipulation o mirror on CodeProject

Questo scopo di questo articolo è quello di spiegare come per inviare un pacchetto Ethernet RAW utilizzando C# su 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 su socket raw (solo nel caso in cui anche interessanti):

Client (and Server) Sockets Communication un'occhiata su intero capitolo, ma qui parti fondamentali:

Non l'invio di pacchetti ma forse interessante: A Network Sniffer in C#, SharpPcap - A Packet Capture Framework for .NET

+0

Penso che l'invio di pacchetti Ethernet Raw da CodeProject mi aiuterà. E suppongo che sia il solo ed unico modo per cui ho trovato il pacchetto ethernet con e.g cambiato indirizzo mac via C#. – Saint

+0

La manipolazione di ethernet raw è piuttosto bassa. Per completare il tuo compito a un buon livello, hai sicuramente bisogno di conoscere le specifiche dell'interfaccia dei driver di rete e capire i driver dei dispositivi (e le relative API). Non saltarlo. C# da solo non ti dà la piena potenza in quel compito. –

+2

Ho trovato probabilmente una soluzione migliore, simile a SharpPcap. È http://pcapdotnet.codeplex.com/ - .NET wrapper per WinPcap. Ora posso modificare i miei pacchetti tutto ciò che voglio. Grazie :) – Saint

-3
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); 
+11

Questo è un pacchetto TCP, non un pacchetto ethernet ... Sei 2 strati troppo in alto nello stack;) –

+3

Ah, capisco. Comprensione fallita. – bufferz

+0

Anche questo non funzionerebbe su Windows 7. [Solo le versioni server di Windows consentono l'uso di socket TCP non elaborati] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms740548%28v=vs. 85% 29.aspx # LIMITATIONS_ON_RAW_SOCKETS a causa di abuso di malware in passato. –

0

IPHelper API ha alcune cose di basso livello - ma probabilmente non del tutto a partire da si desidera ottenere