2010-10-18 16 views
25

Existe-t-il un moyen d'envoyer un paquet Ethernet brut à un autre hôte via C#? Dans Windows 7, si cela fait une différence.Comment envoyer un paquet Ethernet brut avec C#?

+2

Qu'attendez-vous pour arriver à l'autre bout? Raw aussi? Faire votre propre protocole? Quel est le problème avec ceux que nous utilisons tous, votre matériel sait comment acheminer et votre administrateur LAN sait comment prendre en charge? –

+0

Je veux juste envoyer un paquet ethernet avec certains champs modifiés comme l'adresse MAC – Saint

+1

SharpPcap et Pcap.net sont la voie à suivre. Vous avez besoin d'un framework wrapper WinPcap car Windows n'autorise pas l'accès aux en-têtes de protocole de niveau inférieur pour des raisons de sécurité. WinPcap fournit son propre pilote réseau qui vous permet de contourner cette restriction. –

Répondre

17

Sur la base de suggestion Saint_pl:

J'ai trouvé une solution sans doute mieux - semblable à SharpPcap. C'est Pcap.Net - Enveloppeur .NET pour WinPcap. Maintenant, je peux modifier mes paquets tout ce que je veux.


J'ai des ressources pour vous que peut-être utile. Je n'essaie pas ces solutions dans Windows 7 mais peut-être qu'il contient quelques bonnes informations pour commencer.

Raw Ethernet Packet Manipulation ou mirror on CodeProject

Ce but de cet article est d'expliquer comment envoyer un paquet Ethernet brut en C# sur une plate-forme Microsoft. Un paquet Ethernet brut est la trame réseau complète de couche 2 qui est envoyée au fil physique. Envoyer un cadre comme celui-ci vous permet de manipuler les adresses MAC cible et source et les champs de protocole de couche 3.

également quelques informations sur les sockets raw (au cas où vous intéressant aussi):

Client (and Server) Sockets Communication un coup d'oeil sur le chapitre entier, mais ici des éléments clés:

Ne pas envoyer des paquets, mais peut-être intéressant: A Network Sniffer in C#, SharpPcap - A Packet Capture Framework for .NET

+0

Je pense que l'envoi de paquets Ethernet bruts de CodeProject va m'aider. Et btw je suppose que c'est un seul et unique moyen que j'ai été trouvé pour envoyer un paquet Ethernet avec, par exemple, changé l'adresse MAC via C#. – Saint

+0

La manipulation d'Ethernet brut est assez bas niveau. Pour compléter votre tâche à un bon niveau, vous avez certainement besoin de connaissances sur les spécifications d'interface de pilote de réseau et sur la compréhension des pilotes de périphériques (et de leur API). Ne le saute pas. C# seul ne vous donne pas la pleine puissance dans cette tâche. –

+2

J'ai trouvé probablement une meilleure solution - similaire à SharpPcap. C'est http://pcapdotnet.codeplex.com/ - Enveloppe .NET pour WinPcap. Maintenant, je peux modifier mes paquets tout ce que je veux. Merci :) – 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

Ceci est un paquet TCP, pas un paquet ethernet ... Vous êtes 2 couches trop haut sur la pile;) –

+3

Ah je vois. La compréhension échoue. – bufferz

+0

Cela ne fonctionnerait pas non plus sur Windows 7. [Seules les versions Server de Windows permettent l'utilisation de sockets TCP brutes] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms740548%28v=vs. 85% 29.aspx # LIMITATIONS_ON_RAW_SOCKETS) en raison d'un abus de logiciels malveillants dans le passé. –

0

IPHelper API a quelques trucs de bas niveau - mais probablement pas tout à fait aussi bas que vous voulez obtenir