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#?
risposta
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:
- C# Raw UDP Socket Program Example
- C# Raw Socket Esempio di programma Ping part A | part B
- All examples
Non l'invio di pacchetti ma forse interessante: A Network Sniffer in C#, SharpPcap - A Packet Capture Framework for .NET
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
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. –
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
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);
Questo è un pacchetto TCP, non un pacchetto ethernet ... Sei 2 strati troppo in alto nello stack;) –
Ah, capisco. Comprensione fallita. – bufferz
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. –
IPHelper API ha alcune cose di basso livello - ma probabilmente non del tutto a partire da si desidera ottenere
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? –
Voglio solo inviare il pacchetto ethernet con alcuni campi modificati come l'indirizzo MAC – Saint
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. –