quinta-feira, 12 de janeiro de 2012

ngrep - Um filtro de rede avançado


o "grep" é um aplicativo para LINUX, ele scaneia a saída de um comando linha por linha procurando pelos argumentos especificados na sintaxe de pesquisa deste comando.
Por exemplo: ls -la | grep teste
o comando acima irá listar tudo que tiver o nome teste seja ele arquivo ou diretório.
Mas o nosso objetivo aqui é mostrar um filtro de rede muito eficiente como é o caso do aplicativo "ngrep".
Primeiro, nem sempre o ngrep vem instalado no LINUX então para instar é preciso dar o comando em um terminal como Super usuário.

# apt-get install ngrep

O ngrep é um aplicativo para filtrar dados em redes, tendo como exemplo as informações acima onde "grep" é um filtro e o "n" de network que antecede o nome formando ngrep.
Se digitar somente o nome do programa provávelmente receberá uma mensagem como esta abaixo.
# ngrep
eth0: no IPv4 address assigned: Não foi possível acessar o endereço requisitado
interface: eth0
Ele sempre irá buscar a interface de rede padrão para qualquer LINUX, no nosso caso como utilizo o KUBUNTU Oneric 11.10 ele me oferece a interface wireless como sendo eth2, o que poderia ser uma wlan0,1,2 ou 3 ou até mesmo eth0,1,2,ou 3 depende da interface ativa que você quer filtrar.
Se for modo gráfico o melhor é ir no gerenciador de rede geralmente perto do relógio, lá você verá qual o tipo e número da sua placa.
Agora utilize o comando abaixo, no nosso caso é a eth2 como dito antes.

Para descobrir mais sobre o ngrep acesse o manual do aplicativo com o comando abaixo:
# man ngrep

# ngrep -l -q -t -d eth2 -i 'http://'
Explicando o comando acima:

ngrep = programa de filtro
-l    = Cria a linha de saída no buffer* (memória temporária*)
-q    = Fica estático, sem mostrar qualquer outra informação do cabeçalhos dos pacotes e sua carga útil (só mostra o que for pedido no comando)
-t    = Imprimi o timestamp no formato YYYY / MM / DD HH: MM: SS.UUUUUU sempre que um pacote é correspondida à pesquisa.
-d    = Como dito acima por padrão o ngrep irá selecionar uma interface padrão para escutar. Use esta opção para forçar a ngrep escutar a interface que você especificar.
eth2  = interface especificada por você para o ngrep escutar, do contrário o ngrep irá escutar a eth0 por padrão.
-i    = ignorar caso a expressão não possuir o expressão a ser filtrada entre os apóstrofos.
'http://' = tudo que estiver dentro dos apóstrofos será mostrado no terminal, o que não constar será descartado. Nesta parte você pode escolher o que quer filtrar na rede, o interessante é configurar a placa que quer que o ngrep escute no modo promiscuo, onde tudo que rolar na rede será escutado pela interface, isso faz com que o filtro seja feito de forma mais completa e precisa.
Utilizando como base o comando acima e você quiser saber se alguém está acessando site pornográficos ou conteúdo impróprio tente:

# ngrep -l -q -t -d eth2 -i 'porn'

Ou utilize outras palavras que possam definir a pesquisa.
Pode-se abrir outras instâncias de terminal e com o mesmo comando mudar somente as palavras que quer filtrar, com isso terá sucesso mais rápido na pesquisa a ser filtrada.
Agora! como vou ler tudo isso, já que o terminal tem limite de buffe para mostrar na tela?
É fácil, utilize dois comandos juntos emendado pelo pipe "|", veja abaixo, com o comando abaixo vamos criar automaticamente o arquivo de saída de dados onde será gravado toda escuta feita pelo ngrep com base no que queremos ficar esperando que o ngrep capture:

# ngrep -l -q -t -d eth2 -i 'facebook' | cat >> test.txt

Nós queremos que ele mostre tudo e todos que acessarem algo que possua a palavra "facebook" e grave em um novo arquivo por nome de "test.txt", com os redirecionadores de sinal de maior duplo ">>" sempre que quiser-mos utilizar o mesmo arquivo o ngrep gravará logo abaixo da última linha já escrita anteriormente, mas se utilizar um redirecionador simples ">" ele apagará o conteúdo anterior e será gerado outro arquivo com novo conteúdo.

É isso se tiverem alguma dúvida poste ai.
Até a próxima!