Pesquisa de site

ngrep - Um analisador de pacotes de rede para Linux


Ngrep (network grep) é um analisador de pacotes de rede simples, mas poderoso. É uma ferramenta semelhante ao grep aplicada à camada de rede – corresponde ao tráfego que passa por uma interface de rede. Ele permite que você especifique uma expressão regular ou hexadecimal estendida para corresponder às cargas de dados (as informações ou mensagens reais nos dados transmitidos, mas não os metadados gerados automaticamente) dos pacotes.

Esta ferramenta funciona com vários tipos de protocolos, incluindo IPv4/6, TCP, UDP, ICMPv4/6, IGMP, bem como Raw em diversas interfaces. Ele opera da mesma maneira que a ferramenta de detecção de pacotes tcpdump.

O pacote ngrep está disponível para instalação a partir dos repositórios padrão do sistema nas principais distribuições do Linux usando a ferramenta de gerenciamento de pacotes conforme mostrado.

sudo apt install ngrep
sudo yum install ngrep
sudo dnf install ngrep

Depois de instalar o ngrep, você pode começar a analisar o tráfego na sua rede Linux usando os exemplos a seguir.

1. O comando a seguir ajudará você a corresponder todas as solicitações de ping na interface de trabalho padrão. Você precisa abrir outro terminal e tentar fazer ping em outra máquina remota. O sinalizador -q diz ao ngrep para trabalhar silenciosamente, para não gerar nenhuma informação além dos cabeçalhos dos pacotes e suas cargas úteis.

sudo ngrep -q '.' 'icmp'

interface: enp0s3 (192.168.0.0/255.255.255.0)
filter: ( icmp ) and ((ip || ip6) || (vlan && (ip || ip6)))
match: .

I 192.168.0.104 -> 192.168.0.103 8:0
  ]...~oG[....j....................... !"#$%&'()*+,-./01234567                                                                                                             

I 192.168.0.103 -> 192.168.0.104 0:0
  ]...~oG[....j....................... !"#$%&'()*+,-./01234567                                                                                                             

I 192.168.0.104 -> 192.168.0.103 8:0
  ]....oG[............................ !"#$%&'()*+,-./01234567                                                                                                             

I 192.168.0.103 -> 192.168.0.104 0:0
  ]....oG[............................ !"#$%&'()*+,-./01234567  

Você pode pressionar Ctrl + C para encerrá-lo.

2. Para corresponder apenas o tráfego direcionado a um site de destino específico, por exemplo ‘google.com’, execute o comando a seguir e tente acessá-lo em um navegador.

sudo ngrep -q '.' 'host google.com'

interface: enp0s3 (192.168.0.0/255.255.255.0)
filter: ( host google.com ) and ((ip || ip6) || (vlan && (ip || ip6)))
match: .

T 172.217.160.174:443 -> 192.168.0.103:54008 [AP]
  ..................;.(...RZr..$....s=..l.Q+R.U..4..g.j..I,.l..:{y.a,....C{5>[email ..                                                                       

T 172.217.160.174:443 -> 192.168.0.103:54008 [AP]
  .............l.......!,0hJ....0.%F..!...l|.........PL..X...t..T.2DC..... ..y...~Y;[email 

3. Se você estiver navegando na web, execute o seguinte comando para monitorar quais arquivos seu navegador está solicitando:.

sudo ngrep -q '^GET .* HTTP/1.[01]'

interface: enp0s3 (192.168.0.0/255.255.255.0)
filter: ((ip || ip6) || (vlan && (ip || ip6)))
match: ^GET .* HTTP/1.[01]

T 192.168.0.104:43040 -> 172.217.160.174:80 [AP]
  GET / HTTP/1.1..Host: google.com..User-Agent: Links (2.13; Linux 4.17.6-1.el7.elrepo.x86_64 x86_64; 
  GNU C 4.8.5; text)..Accept: */*..Accept-Language: en,*;q=0.1..Accept-
  Encoding: gzip, deflate, bzip2..Accept-Charset: us-ascii,ISO-8859-1,ISO-8859-2,ISO-8859-3,ISO-8859-4,
  ISO-8859-5,ISO-8859-6,ISO-8859-7,ISO-8859-8,ISO-8859-9,ISO-8859-10,I
  SO-8859-13,ISO-8859-14,ISO-8859-15,ISO-8859-16,windows-1250,windows-1251,windows-1252,windows-1256,
  windows-1257,cp437,cp737,cp850,cp852,cp866,x-cp866-u,x-mac,x-mac-ce,x-
  kam-cs,koi8-r,koi8-u,koi8-ru,TCVN-5712,VISCII,utf-8..Connection: keep-alive.... 

4. Para ver todas as atividades que cruzam a porta de origem ou de destino 25 (SMTP), execute o seguinte comando.

sudo ngrep port 25

5. Para monitorar qualquer tráfego de syslog baseado em rede para a ocorrência da palavra “erro ”, use o comando a seguir.

 
sudo ngrep -d any 'error' port 514

É importante ressaltar que esta ferramenta pode converter nomes de portas de serviço armazenados em “/etc/services ” (em sistemas do tipo Unix, como Linux) em números de porta. Este comando é equivalente ao comando acima.

sudo ngrep -d any 'error' port syslog

6. Você também pode executar o ngrep em um servidor HTTP (porta 80), ele corresponderá todas as solicitações ao host de destino, conforme mostrado.

sudo ngrep port 80

interface: eth0 (64.90.164.72/255.255.255.252)
filter: ip and ( port 80 )
####
T 67.169.59.38:42167 -> 64.90.164.74:80 [AP]
  GET / HTTP/1.1..User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux i
  686) Opera 7.21  [en]..Host: www.darkridge.com..Accept: text/html, applicat
  ion/xml;q=0.9, application/xhtml+xml;q=0.9, image/png, image/jpeg, image/gi
  f, image/x-xbitmap, */*;q=0.1..Accept-Charset: iso-8859-1, utf-8, utf-16, *
  ;q=0.1..Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0..Cookie: SQ
  MSESSID=5272f9ae21c07eca4dfd75f9a3cda22e..Cookie2: $Version=1..Connection:
  Keep-Alive, TE..TE: deflate, gzip, chunked, identity, trailers....
##

Como você pode ver na saída acima, todas as transmissões de cabeçalhos HTTP são exibidas em detalhes sangrentos. Porém, é difícil de analisar, então vamos ver o que acontece quando você aplica o modo de assinatura -W.

sudo ngrep -W byline port 80

interface: eth0 (64.90.164.72/255.255.255.252)
filter: ip and ( port 80 )
####
T 67.169.59.38:42177 -> 64.90.164.74:80 [AP]
GET / HTTP/1.1.
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux i686) Opera ...
Host: www.darkridge.com.
Accept: text/html, application/xml;q=0.9, application/xhtml+xml;q=0.9 ...
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1.
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0.
Cookie: SQMSESSID=5272f9ae21c07eca4dfd75f9a3cda22e.
Cookie2: $Version=1.
Cache-Control: no-cache.
Connection: Keep-Alive, TE.
TE: deflate, gzip, chunked, identity, trailers.

7. Para imprimir um carimbo de data/hora no formato AAAA/MM/DD HH:MM:SS.UUUUUU toda vez que um pacote é correspondido, use o sinalizador -t.

sudo ngrep -t -W byline port 80

interface: enp0s3 (192.168.0.0/255.255.255.0)
filter: ( port 80 ) and ((ip || ip6) || (vlan && (ip || ip6)))
####
T 2018/07/12 16:33:19.348084 192.168.0.104:43048 -> 172.217.160.174:80 [AP]
GET / HTTP/1.1.
Host: google.com.
User-Agent: Links (2.13; Linux 4.17.6-1.el7.elrepo.x86_64 x86_64; GNU C 4.8.5; text).
Accept: */*.
Accept-Language: en,*;q=0.1.
Accept-Encoding: gzip, deflate, bzip2.
Accept-Charset: us-ascii,ISO-8859-1,ISO-8859-2,ISO-8859-3,ISO-8859-4,ISO-8859-5,utf-8.
Connection: keep-alive.

8. Para evitar colocar a interface que está sendo monitorada em modo promíscuo (onde ela intercepta e lê cada pacote de rede que chega em sua totalidade), adicione o sinalizador -p.

sudo ngrep -p -W byline port 80

9. Outra opção importante é -N que é útil caso você esteja observando protocolos brutos ou desconhecidos. Ele diz ao ngrep para exibir o número do subprotocolo junto com o identificador de um único caractere.

sudo ngrep -N -W byline

Para obter mais informações, consulte a página de manual ngrep.

man ngrep

Repositório ngrep do Github: https://github.com/jpr5/ngrep

Isso é tudo! Ngrep (network grep) é um analisador de pacotes de rede que entende a lógica do filtro BPF da mesma forma que o tcpdump. Gostaríamos de saber sua opinião sobre ngrep na seção de comentários.