Ce wrapper de WinPcap fait parti d'un de mes projets professionnels, cela faisait un bout de temps que je le trainais sur mon disque.
Comme c'est noel je me suis décidé à partager ce petit cadeau :)
Vous devez installer le driver WinPcap auparavant: http://www.winpcap.org/ (peut importe la version,3 ou 4 beta du driver fonctionne correctement)
Si vous recherchez la doc du driver elle se trouve ici http://www.winpcap.org/devel.htm
Dans la solution se trouve un dossier Public, ces classes sont extraitent de JPcap une librairie Java exploitant WinPcap http://sourceforge.net/projects/jpcap (et oui je n'invente rien).
J'ai également joint un fichier dump.txt que j'ai capturé avec cette source. Vous pouvez le visualiser dans la partie Dump -> Ouvrir.
La source est commentée mais sans plus, je me suis beaucoup inspiré des exmples fournis dans la doc de WinPcap.
Apercu de la classe WinPcapWrapper:
-Evénements:
--InnerMessage //Evénement pour les messages d'erreur internes.
--PacketArrival //Evénement d'arrivée d'un paquet.
--EndCapture //Evénement de fin de capture d'un paquet.
--StatisticsPackets //Evénement où sont recu les statistiques.
-Propriétés:
--DeviceHandle //Obtient le handle du matériel branché.
--Mode //Mode de capture du driver.
--IsEnabledDump //Indique si un dump sur la capture est ouvert.
--DumpHandle //Obtient le handle du dump.
-Méthodes publiques:
--GetDevices() //Obtient la liste des matériels réseaux présent.
--OpenDevice(PcapDevice device) //Ouverture d'un handle sur le matériel.
--OpenDevice(PcapDevice device, bool promisc) //Ouverture d'un handle sur le matériel.
--OpenDevice(PcapDevice device, bool promisc, int timeout) //Ouverture d'un handle sur le matériel.
--CloseDevice() //Libère le handle tenu sur le matériel.
--CloseDump() //Libère le handle tenu sur le fichier de dump.
--StartCapture() //Démarre la capture.
--StartCapture(string filter) //Démarre la capture en mettant un filtrage des paquets à capturer. (similaire à la méthode SetFilter(string filter)
--StartCapture(int packetcount) //Démarre la capture en se limitant à capturer un certains nombre de paquets.
--StartCapture(string filter, int packetcount) //Reprend les 2 méthodes ci-dessus.
--SetFilter(string filter) //Compile au niveau kernel une expression de filtre et associe le filtre au matériel.
--StopCapture() //Arrête la capture.
--OpenDump(string filename) //Ouverture d'un handle pour un dump de la capture.
--DumpPacket(Packet packet) //Ecriture d'un paquet dans le fichier dump.
--ReadDump(string filename) //Lecture d'un fichier de dump.
-Méthodes privées:
--WaitForStop() //Méthode bloquante sur le processus de capture tant que celui-ci n'est pas terminée ou arrêtée.
--CapturePacketLoop() //Méthode exécutant les procédures du processus de capture.
--GetNextPacket(out Packet packet) //Récupère le paquet suivant capturé.
--GetNextPacketOffline(IntPtr p, out Packet packet) //Récupère le paquet suivant capturé en mode dump (offline).
--SetMode(PcapMode value) //Applique un mode de capture supporté par le driver.
--InvokePacketArrivalEvent(Packet packet) //Méthode traitant l'arrivée d'un paquet suivant son mode de capture.
--InvokeEndCaptureEvent(DateTime date, bool error) //Méthode traitant la fin de réception d'un paquet.
--GetDatalink() //Récupère la couche réseau.
--GetErr(string prefix) //Traduit les erreurs internes de WinPcap.
-Apercu des autres classes
--WinPcapNative //Classe définissant les méthodes, structures, constantes du mode utilisateur du driver WinPcap (wpcap.dll).
--PcapHeader //Classe fournissant les données d'en-tête d'un paquet (wrapper de la structure pcap_pkhdr). Non héritable.
--PcapDevice //Classe fournissant les données sur un matériel réseau. Non héritable.
--EndCaptureEventArgs //Classe fournissant les données pour l'événement EndCapture.
--InnerMessageEventArgs //Classe fournissant les données pour l'événement InnerMessage.
--PacketArrivalEventArgs //Classe fournissant les données pour l'événement PacketArrival.
--StatisticsEventArgs //Classe fournissant les données pour l'événement StatisticsPackets.