Como analisar / interceptar pacotes antes de serem enviadas / recebidas pelo sistema operacional?

StackOverflow https://stackoverflow.com/questions/1457491

Pergunta

Eu sempre me perguntei como firewalls de software trabalham sob as cobertas, e gostaria de ser capaz de escrever minhas próprias ferramentas personalizadas para analisar ou pacotes interceptar antes de serem enviados ou recebidos pelo sistema operacional. Eu estou bastante familiarizado com os princípios de rede de núcleo; Eu só não tenho idéia por onde começar se eu quero escrever software que se encaixa dentro da pilha de rede semelhante à maneira como firewalls fazer. Alguém poderia me dar algumas dicas?

eu estaria especialmente interessado se isso pode ser feito usando C #, mas eu posso fazer outras línguas também. Estou focando principalmente no Windows, mas gostaria de saber se havia alguma bibliotecas multi-plataforma lá fora também.

Editar Utilizar um controlador NDIS (como Wireshark faz) soa como uma boa opção, e pacotes do Vista filtragem capacidades de som puro, mas como firewalls fazê-lo, por exemplo, no Windows XP? Eles não têm de instalar um driver especial que eu conheço.

Foi útil?

Solução

No Windows Vista e para cima, você pode querer olhar para o Windows Filtering Platform . Em versões anteriores do Windows, você precisa usar drivers de filtro (página ligada ao MSDN menciona quais tecnologias Substitui PAM).

Outras dicas

Como eu recordo que envolve a escrita de um driver NDIS. Este fica praticamente em cima do NIC (Network Interface Card) e você tem controle absoluto sobre o que entra ou sai da NIC antes de mais nada -. Baixo direito ao nível de pacote ethernet

Isto não pode ser realizado com C #. Você realmente precisa usar C ou C ++ para essa tarefa.

Atualizar : I última fez isso em dias Janela XP. Eu vejo de outra resposta há uma nova, e pelo que parece, API mais simples se você estiver usando o Windows Vista em diante.

Não tenho certeza se é "antes do O / S", mas ter um olhar para WireShark eo biblioteca que utiliza, libpcap .

Dê uma olhada em WinPcap - ele usa um driver NDIS para implementar seu pacote de filtragem capacidades. Esta biblioteca provavelmente pode fornecer uma excelente base para qualquer programa de inspeção de pacotes / firewall que você gostaria de escrever, e é open-source. De http://www.winpcap.org/docs/docs_40_2/html/group__internals .html :

Em primeiro lugar, um sistema de captura precisa desvio das sistemas operacionais pilha de protocolo, a fim de aceder a dados brutos que transitam na rede. Isto requer uma execução dentro poro o kernel do sistema operacional, interagindo diretamente com os controladores de interface de rede. Esta parte é muito dependente do sistema, e em nossa solução é realizado como um driver de dispositivo, chamado Netgroup Filtro de pacotes (NPF); nós provemos diferentes versões do driver para Windows 95, Windows 98, Windows ME, Windows NT 4, Windows 2000 e Windows XP. Esses drivers oferecem básica recursos como a captura de pacotes e injecção, bem como mais avançado queridos como uma filtragem programável sistema e um mecanismo de monitoramento. o um primeiro pode ser utilizada para restringir uma sessão de captura a um subconjunto do tráfego de rede (por exemplo, é possível para capturar apenas o tráfego de ftp gerado por um hospedeiro particular), o segundo fornece um poderoso mas simples de usar o mecanismo para se obter estatísticas sobre o tráfego (por exemplo, é possível obter a carga da rede ou a quantidade de dados trocados entre dois hosts).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top