Software Design

Design de software em C, C++, Java, etc…

Interceptando uma conexão utilizando o netcat

As vezes precisamos interceptar uma conexão para ver os dados que estão sendo transferidos. Existem várias ferramentas excelentes para isso, por exemplo o wireshark. Mas tem casos em que você não tem o wireshark à mão e não pode ou não quer instalar ele para fazer um teste rápido.

Nesses casos você pode utilizar o netcat para ficar no meio de uma conexão, fazendo com que seu cliente conecte-se no netcat ao invés de conectar diretamente no host remoto.

Para isso, primeiramente precisamos criar um fifo com o comando mkfifo.

mkfifo tmp_fifo

Feito isso, vamos abrir 2 vezes o netcat ( uma atuando como cliente e outra como servidor ). O comando é o seguinte:

nc -l -p 21 < tmp_fifo | tee request.log | nc ftp.kernel.org 21 | tee tmp_fifo response.log

Configure seu cliente de FTP para conectar na porta 21 do host local ( PS: só funciona em modo passivo por motivos óbvios ). Ao conectar, você vai receber ver que o netcat vai mandar as requisições para o servidor ( ftp.kernel.org ) e as respostas do servidor serão enviadas de volta para o cliente, permitindo a comunicação normal, como se o cliente ftp estivesse conectado diretamente ao ftp.kernel.org, porém, com a vantagem de o netcat gerar logs das requisições / respostas.

Agora vou desmembrar o comando para ficar mais fácil de entender:

nc -l -p 21 < tmp_fifo | tee request.log

Inicia o netcat em modo listen na porta 21, o “< tmp_fifo” informa que a entrada padrão do comando será o arquivo tmp_fifo ( este arquivo será escrito pelo outro nc ). Já o “| tee request.log” é usado para receber a saída padrão do nc e multiplexar ela para o arquivo request.log e para a saída padrão do tee – basicamente ele serve para poder gravar o log

| nc ftp.kernel.org 21 | tee tmp_fifo response.log

O pipe redireciona a saída padrão do comando tee anterior para a entrada padrão do comando “nc ftp.kernel.org 21” que por sua vez vai abrir uma conexão com o host especificado e mandar tudo que ele receber em sua entrada padrão. Já o “| tee tmp_fifo response.log” vai multiplexar a saída padrão do comando nc anterior em 3 saídas ( tmp_fifo, respose.log e stdout[não especificado mas implícito ao comando tee] ).

Basicamente é isso, é um comando bastante simples e direto, espero que a explicação tenha sido clara o suficiente, caso tenha ficado alguma dúvida fique à vontade para perguntar.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Informação

Publicado às outubro 16, 2012 por em Linux, Network e marcado , , , .
%d blogueiros gostam disto: