sharppcap
Bibliothèque .NET entièrement gérée, Cross Platform (Windows, Mac, Linux) pour capturer des paquets à partir d'appareils en direct et basés sur des fichiers
Le référentiel officiel de SharppCap.
Table des matières
- Caractéristiques
- Exemples
- Dispositifs de liste
- Capturer des paquets
- Lecture à partir d'un fichier de capture
- Écriture dans un fichier de capture
- CI Support
- Sorties
- Notes spécifiques à la plate-forme
- Migration de 5.x à 6.0
Caractéristiques
Pour la dissection et la création des paquets, voir Packet.net.
Sur Linux, support pour libpcap
Sur Windows, prise en charge de:
- Extensions NPCAP (anciennement WinPCAP), voir Guide de l'API NPCAP
- Windivert (https://www.reqrypt.org/windivert.html)
Sur toutes les plateformes:
- Listes d'appareils en direct
- Statistiques
- Lire des paquets à partir d'appareils en direct (appareils réseau réels) et des appareils hors ligne (fichiers de capture)
- Prise en charge des filtres de paquets Berkeley
- Vider des paquets dans les fichiers PCAP.
- Format PCAP et PCAP-NG (lorsque vous utilisez libpcap> = 1.1.0 ou npCap)
- ReadOnlySpan <> est utilisé pour éviter l'attribution de la mémoire et la copie à l'intérieur de SharPPCAP et fournir les meilleures performances.
- Des méthodes d'assistance sont fournies pour convertir en instances d'objets si l'on souhaite persister des paquets capturés en mémoire.
Support nativelibrary
- La résolution de la bibliothèque de capture fonctionne en douceur sur Linux, OSX et Windows
- Charge proprement libpcap sur linux, que la distribution ait un lien symbolique à libpcap.so ou non.
Prise en charge de .NET Core 3 et .NET Framework
Exemples
Voir le dossier Exemples pour une gamme d'exemples complets à l'aide de SharPPCAP
Dispositifs de liste
var devices = CaptureDeviceList . Instance ;
foreach ( var dev in devices )
Console . WriteLine ( "{0} n " , dev . ToString ( ) ) ; Capturer des paquets
void Device_OnPacketArrival ( object s , PacketCapture e )
{
Console . WriteLine ( e . GetPacket ( ) ) ;
}
using var device = LibPcapLiveDeviceList . Instance [ 0 ] ;
device . Open ( ) ;
device . OnPacketArrival += Device_OnPacketArrival ;
device . StartCapture ( ) ; Lecture à partir d'un fichier de capture
void Device_OnPacketArrival ( object s , PacketCapture e )
{
Console . WriteLine ( e . GetPacket ( ) ) ;
}
using var device = new CaptureFileReaderDevice ( "filename.pcap" ) ;
device . Open ( ) ;
device . OnPacketArrival += Device_OnPacketArrival ;
device . Capture ( ) ; Écriture dans un fichier de capture
using var device = new CaptureFileWriterDevice ( "somefilename.pcap" , System . IO . FileMode . Open ) ;
var bytes = new byte [ ] { 1 , 2 , 3 , 4 } ;
device . Write ( bytes ) ; CI Support
Nous soutenons un certain nombre de systèmes CI pour plusieurs raisons:
- La diversité des systèmes CI au cas où l'un d'eux s'arrête
- Exemples au cas où vous souhaitez personnaliser SharPPCAP et utiliser l'un de ces systèmes CI pour les versions internes. Notez que nous supposons que vous suivez la licence de la bibliothèque.
Sorties
SharppCap est publié via Nuget
Notes spécifiques à la plate-forme
- OSX (au moins à 11.1) manque de libpcap avec PCAP_OPEN
Merci
SharPPCAP est l'endroit où il est aujourd'hui en raison d'un certain nombre de développeurs qui ont fourni des améliorations et des correctifs et des utilisateurs qui ont fourni des commentaires utiles grâce aux problèmes et aux demandes de fonctionnalités.
Nous apprécions particulièrement un certain nombre de projets sur lesquels nous construisons (car SharppCap est un wrapper C #):
- libpcap - Merci beaucoup d'avoir sorti 1.10
- NPCAP - Pour la prise en charge de la capture de paquets continue sur Windows
Migration de 5.x à 6.0
Nous espérons que vous constaterez que l'API 6.x est plus propre et plus facile à utiliser.
6.0 apporte un certain nombre de nettoyages qui ont entraîné une rupture d'API pour les utilisateurs 5.x.
Pour aider à la migration de 5.x à 6.0, voici une liste de certaines des modifications que vous devrez apporter à votre utilisation SharPPCAP.
Les exemples sont également une excellente ressource car ils montrent des exemples de travail en utilisant la dernière API.
- Les données de paquets sont renvoyées via PacketCapture qui utilise ReadOnlySpan <>.
- La conversion de ReadOnlySpan <> à RawCapture est effectuée par PacketCapture.getPacket ().
- Cela évite l'attribution de la mémoire pendant la capture des paquets.
- En évitant l'allocation de la mémoire et la copie de la mémoire, les performances de capture brutes peuvent être jusqu'à 30% plus rapides.
- Span est idéal pour les cas d'utilisation où les paquets sont jetés sur le disque pour un traitement ultérieur.
- Nativelibrary est utilisé pour une résolution de bibliothèque de capture améliorée
- Améliore la situation de résolution de la bibliothèque sur les distros de Linux où il y a un libpcap.so.xy symmink mais pas de libpcap.
- La prise en charge de la DLLMAP Mono a été supprimée car Mono prend en charge Nativelibrary. Voir https://www.mono-project.com/news/2020/08/24/native-loader-net5/
- Les appareils sont iDisposables
- Supprimer les appels pour fermer ()
- Switch 'var Device = xxx;' à 'Utilisation du périphérique = xxx;'
- Renommer OpenFlags -> DeviceModes
- Les méthodes Open () ont été effondrées en moins de méthodes avec des variables par défaut.
- DeviceMode a été remplacé par DeviceModes car DeviceMode n'a pas été en mesure de couvrir toutes les combinaisons de façons d'ouvrir un appareil.
- Npcapdevice -> libpcaplivevicevice
- Si vous utilisez npcapDevice, vous devriez envisager d'utiliser libpcaplivevicevice. Les dernières versions de NPCAP sont livrées avec des versions plus récentes de LiBPCAP qui fournissent presque toutes les fonctionnalités des API natives NPCAP.
- L'écart actuel ici est le mode statistique, actuellement pris en charge uniquement par NPCAP.
- Il a été question d'un emballage en mode statistique qui fournirait des fonctionnalités similaires, bien que sans le même niveau d'efficacité que si cela était fait dans le noyau ou le pilote que sur Windows, pour les systèmes LIBPCAP.
- WinPCap a été obsolète
- Nous vous recommandons de passer à libpcaplivevicevice
- Authentification à distance
- Si vous utilisez le remoteAuthentification, certaines fonctionnalités ont été intégrées à cette classe et que l'API a changé pour supprimer l'utilisation d'Icredentials et de NetworkCredentials.