Pergunta

Não é apenas uma captura que pretendo fazer aqui.Quero primeiro capturar o pacote e, em seguida, em tempo real, verificar a carga em busca de dados específicos, removê-lo, injetar uma assinatura e reinjetar o pacote na pilha para ser enviado como antes.

Eu li os soquetes de desvio ipfw usando IPFW e parece muito promissor.E quanto a exemplos de modificação de pacotes e reinjeção deles de volta na pilha usando desvios de soquete?Além disso, por uma questão de curiosidade, seria possível ler os dados do soquete usando Java ou isso me restringiria a empacotar e reinjetar, etc.?

Foi útil?

Solução

Eu iria repetir outras respostas que recomendaram iptables (dependendo da complexidade dos padrões que você está tentando corresponder e das modificações de pacote que deseja fazer) - até que percebi a tag BSD na questão.

Como Stephen Pellicer já mencionado, o libpcap é uma boa opção para capturar os pacotes.Acredito, porém, que o libpcap também pode ser usado para enviar pacotes.Para referência, tenho certeza de que tcpreplay usa-o para reproduzir arquivos formatados em pcap.

Outras dicas

Veja soquetes de desvio: Desviar soquetes mini COMO FAZER.

Eles funcionam passando o tráfego que corresponde a uma determinada regra ipfw para um soquete bruto especial que pode então reinjetar o tráfego alterado nas camadas da rede.

Se você está apenas procurando captura de pacotes, o libpcap é muito popular.É usado em ferramentas básicas como tcpdump e ethereal.No que diz respeito a "conectar-se à pilha", a menos que você planeje mudar fundamentalmente a forma como a rede é implementada (ou seja,adicione sua própria camada ou altere o comportamento do TCP), sua ideia de usar IPF para modificação ou intervenção de pacotes parece ser a melhor aposta.No Linux eles têm um alvo de redirecionamento específico para módulos de espaço do usuário, o IPF provavelmente tem algo semelhante ou você pode modificar o IPF para fazer algo semelhante.

Se você está apenas interessado em ver os pacotes, então libpcap é o caminho a percorrer.Você pode encontrá-lo em: http://www.tcpdump.org/

É possível fazer isso no espaço do usuário com o destino iptables QUEUE ou NFQUEUE, eu acho.O aplicativo cliente se conecta a uma fila e recebe todos os pacotes correspondentes, que pode modificar antes de serem reinjetados (também pode descartá-los, se desejar).

Existe uma biblioteca cliente libnetfilter_queue à qual ela precisa ser vinculada.Infelizmente, a documentação é mínima, mas existem algumas postagens e exemplos em listas de discussão por aí.

Por razões de desempenho, você não vai querer fazer isso com todos os pacotes, mas apenas com aqueles correspondentes específicos, que você terá que combinar usando regras padrão do iptables.Se isso não for suficiente, você precisará escrever seu próprio módulo de kernel netfilter.

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