sharppcap
Totalmente administrado, plataforma cruzada (Windows, Mac, Linux) Biblioteca .NET para capturar paquetes de dispositivos en vivo y basados en archivos
El repositorio oficial de SharPPCAP.
Tabla de contenido
- Características
- Ejemplos
- Dispositivos de listado
- Capturar paquetes
- Leyendo de un archivo de captura
- Escribir en un archivo de captura
- Soporte de CI
- Lanzamientos
- Notas específicas de la plataforma
- Migración de 5.x a 6.0
Características
Para la disección y la creación de paquetes, consulte Packet.net.
En Linux, soporte para libpcap
En Windows, soporte para:
- Extensiones NPCAP (anteriormente WinPCAP), consulte la guía de API NPCAP
- Windivert (https://www.reqrypt.org/windivert.html)
En todas las plataformas:
- Listas de dispositivos en vivo
- Estadística
- Lectura de paquetes de dispositivos en vivo (dispositivos de red reales) y dispositivos fuera de línea (archivos de captura)
- Soporte para los filtros de paquetes de Berkeley
- Dumping Packets a archivos PCAP.
- Formato PCAP y PCAP-NG (cuando se usa libpcap> = 1.1.0 o npcap)
- Readonlyspan <> se usa para evitar la asignación de memoria y la copia dentro de SharppCap y proporcionar el mejor rendimiento.
- Se proporcionan métodos auxiliares para convertir a instancias de objetos si se desea persistir en los paquetes capturados en la memoria.
Soporte nativelibrary
- La resolución de la biblioteca de captura funciona sin problemas a través de Linux, OSX y Windows
- Carga limpiamente libpcap en Linux si la distribución tiene un enlace simbólico a libpcap.so o no.
.NET Core 3 y .NET Framework Soporte
Ejemplos
Consulte la carpeta de ejemplos para obtener una variedad de proyectos de ejemplo completos utilizando SharpPCAP
Dispositivos de listado
var devices = CaptureDeviceList . Instance ;
foreach ( var dev in devices )
Console . WriteLine ( "{0} n " , dev . ToString ( ) ) ; Capturar paquetes
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 ( ) ; Leyendo de un archivo de captura
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 ( ) ; Escribir en un archivo de captura
using var device = new CaptureFileWriterDevice ( "somefilename.pcap" , System . IO . FileMode . Open ) ;
var bytes = new byte [ ] { 1 , 2 , 3 , 4 } ;
device . Write ( bytes ) ; Soporte de CI
Tenemos soporte para varios sistemas CI por algunas razones:
- Diversidad de sistemas CI en caso de que uno de ellos se cierra
- Ejemplos en caso de que desee personalizar SharPPCAP y utilizar uno de estos sistemas CI para compilaciones internas. Tenga en cuenta que asumimos que está siguiendo la licencia para la biblioteca.
Lanzamientos
Sharppcap se lanza a través de Nuget
Notas específicas de la plataforma
- OSX (al menos a 11.1) carece de libpcap con pcap_open
Gracias
SharppCap es donde está hoy debido a varios desarrolladores que han proporcionado mejoras y correcciones y usuarios que han proporcionado comentarios útiles a través de problemas y solicitudes de funciones.
Agradecemos especialmente una serie de proyectos en los que construimos (ya que Sharppcap es un envoltorio C#):
- libpcap - muchas gracias por lanzar 1.10
- NPCAP: para continuar con soporte de captura de paquetes en Windows
Migración de 5.x a 6.0
Esperamos que encuentre que la API 6.x sea más limpia y más fácil de usar.
6.0 trae una serie de limpiezas que han resultado en la rotura de API para los usuarios de 5.x.
Para ayudar con la migración de 5.x a 6.0, aquí hay una lista de algunos de los cambios que tendrá que hacer en su uso de SharpPCAP.
Los ejemplos también son un gran recurso, ya que muestran ejemplos de trabajo utilizando la última API.
- Los datos de paquetes se devuelven a través de PacketCapture que utiliza ReadonlySpan <>.
- La conversión de ReadonlySpan <> a RawCapture se realiza mediante PacketCapture.getPacket ().
- Esto evita la asignación de la memoria durante la captura de paquetes.
- Al evitar la asignación de memoria y la copia de memoria, el rendimiento de captura sin procesar puede ser hasta un 30% más rápido.
- Los SPAN son ideales para casos de uso en los que los paquetes están siendo arrojados al disco para su posterior procesamiento.
- Nativelibrary se usa para mejorar la resolución de la biblioteca de captura
- Mejora la situación de la resolución de la biblioteca en Linux Distross donde hay un enlace simbólico libpcap.so.xy pero no libpcap.So Symlink
- El soporte para mono dllmap se ha eliminado a medida que mono admite nativelibrary. Ver https://www.mono-project.com/news/2020/08/24/native-loader-net5/
- Los dispositivos son idisibles
- Retire las llamadas para cerrar ()
- Switch 'var Device = xxx;' a 'usando dispositivos = xxx;'
- Cambiar el nombre de OpenFlags -> Devicemodes
- Los métodos abiertos () se han colapsado en menos métodos con variables predeterminadas.
- DeviceMode ha sido reemplazado por DeviceModes, ya que DeViceMode no pudo cubrir todas las combinaciones de formas en que podría abrir un dispositivo.
- Npcapdevice -> libpcaplivedEvice
- Si está utilizando npcapdevice, debe considerar usar libpcaplivedEvice. Las últimas versiones de NPCAP vienen con versiones más nuevas de libpcap que proporcionan casi toda la funcionalidad de las API nativas de NPCAP.
- La brecha actual aquí es el modo de estadística, actualmente solo compatible con NPCAP.
- Se ha hablado de un envoltorio de modo estadístico que proporcionaría una funcionalidad similar, aunque sin el mismo nivel de eficiencia que si se hiciera en el núcleo o controlador como en Windows, para los sistemas libpcap.
- WinPCAP ha sido desaprobado
- Recomendamos cambiar a libpcaplivedEvice
- Autenticación remota
- Si está utilizando remoteauthentication, alguna funcionalidad se ha doblado en esta clase y la API cambió para eliminar el uso de icredenciales y networkcredentials.