SharppCap
Totalmente gerenciado, Cross Platform (Windows, Mac, Linux) .NET Library para capturar pacotes de dispositivos ao vivo e baseados em arquivos
O repositório oficial do SharppCap.
Índice
- Características
- Exemplos
- Dispositivos de listagem
- Captura de pacotes
- Lendo de um arquivo de captura
- Escrevendo em um arquivo de captura
- Suporte de IC
- Lançamentos
- Notas específicas da plataforma
- Migração de 5.x para 6.0
Características
Para dissecção e criação de pacotes, consulte o packet.net.
No Linux, suporte para libpcap
No Windows, suporte para:
- Extensões NPCAP (anteriormente WinPCap), consulte o NPCAP API Guide
- Windivert (https://www.reqrypt.org/windivert.html)
Em todas as plataformas:
- Listas de dispositivos ao vivo
- Estatística
- Lendo pacotes de dispositivos vivos (dispositivos de rede reais) e dispositivos offline (arquivos de captura)
- Suporte para filtros de pacotes de Berkeley
- Pacotes de despejo nos arquivos PCAP.
- Formato PCAP e PCAP-NG (ao usar libpcap> = 1.1.0 ou npcap)
- O ReadOnlyspan <> é usado para evitar alocação de memória e copiar dentro do SharppCap e fornecer o melhor desempenho.
- Os métodos auxiliares são fornecidos para converter em instâncias de objeto, se desejar persistir pacotes capturados na memória.
Suporte nativa da biblioteca
- A resolução da biblioteca de captura opera sem problemas em Linux, OSX e Windows
- Carrega de maneira limpa libpcap no Linux se o distro tem um link simulado para libpcap.so ou não.
.NET Core 3 e .NET Framework Support
Exemplos
Veja a pasta Exemplos para uma variedade de projetos de exemplo completos usando o SharppCap
Dispositivos de listagem
var devices = CaptureDeviceList . Instance ;
foreach ( var dev in devices )
Console . WriteLine ( "{0} n " , dev . ToString ( ) ) ; Captura de pacotes
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 ( ) ; Lendo de um arquivo 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 ( ) ; Escrevendo em um arquivo de captura
using var device = new CaptureFileWriterDevice ( "somefilename.pcap" , System . IO . FileMode . Open ) ;
var bytes = new byte [ ] { 1 , 2 , 3 , 4 } ;
device . Write ( bytes ) ; Suporte de IC
Temos suporte para vários sistemas de IC por alguns motivos:
- Diversidade de sistemas de IC, caso um deles seja desligado
- Exemplos, caso você queira personalizar o SharppCap e usar um desses sistemas de IC para compilações internas. Observe que assumimos que você está seguindo a licença da biblioteca.
Lançamentos
SharppCap é lançado via Nuget
Notas específicas da plataforma
- OSX (pelo menos a partir de 11.1) não possui libpcap com pcap_open
Obrigado
O SharppCap é onde está hoje por causa de vários desenvolvedores que forneceram melhorias, correções e usuários que forneceram feedback útil por meio de problemas e solicitações de recursos.
Agradecemos especialmente a vários projetos que construímos (como o SharppCap é um wrapper C#):
- libpcap - Muito obrigado por lançar 1.10
- NPCAP - Para suporte contínuo de captura de pacotes no Windows
Migração de 5.x para 6.0
Esperamos que você encontre a API 6.x mais limpa e mais fácil de usar.
6.0 traz uma série de limpezas que resultaram em quebra de API para usuários 5.x.
Para ajudar na migração de 5.x para 6.0 Aqui está uma lista de algumas das alterações que você terá que fazer no seu uso do SharpPCAP.
Os exemplos também são um ótimo recurso, pois mostram exemplos de trabalho usando a API mais recente.
- Os dados do pacote são retornados via PacketCapture, que utiliza o ReadOnlyspan <>.
- A conversão do ReadOnlyspan <> para RAWCapture é realizada pelo packetcapture.getpacket ().
- Isso evita a alocação de memória durante a captura de pacotes.
- Ao evitar a alocação de memória e a cópia da memória, o desempenho de captura bruta pode ser até 30% mais rápido.
- O Span's é ideal para casos de uso em que os pacotes estão sendo despejados no disco para processamento posterior.
- A NatIfleBrary é usada para melhorar a resolução da biblioteca de captura
- Melhora a situação da resolução da biblioteca em distritos Linux, onde há um libpcap.so.xy Symlink, mas não libpcap.so simplink
- O suporte ao Mono DLLMAP foi removido, pois o mono suporta a NativeLibrary. Veja https://www.mono-project.com/news/2020/08/24/native-loader-net5/
- Os dispositivos são idiposáveis
- Remova as chamadas para fechar ()
- Switch 'var dispositivo = xxx;' para 'usando o dispositivo = xxx;'
- Renomear o OpenFlags -> DeviceModes
- Os métodos abertos () foram colapsados em menos métodos com variáveis padrão.
- O DivEMode foi substituído por devicemodes, pois o DivEMode não conseguiu cobrir todas as combinações de maneiras pelas quais você poderia abrir um dispositivo.
- NpcapDevice -> libpCAPLIVIDEVICE
- Se você estiver usando o npcapDevice, considere usar o libpcapLivedEvice. As versões mais recentes do NPCAP vêm com versões mais recentes do LIBPCAP que fornecem quase todas as funcionalidades das APIs nativas do NPCAP.
- A lacuna atual aqui é o modo de estatística, atualmente suportado apenas pelo NPCAP.
- Falou -se sobre um invólucro de modo de estatística que forneceria funcionalidade semelhante, embora sem o mesmo nível de eficiência como se fosse feito no kernel ou no motorista como no Windows, para sistemas LIBPCAP.
- Winpcap foi preterido
- Recomendamos mudar para libpcaplivetevice
- Autenticação remota
- Se você estiver usando a remoteração de remoto, alguma funcionalidade foi dobrada nesta classe e a API foi alterada para remover o uso de icredenciais e credes de rede.