Cheatsheet :: Casos de uso do comando netcat (nc) para troubleshooting de conexões de rede

Share:

Mais um post sobre tooling de redes. Dessa vez vou documentar alguns dos principais use cases do Netcat, uma das minhas ferramentas favoritas pra troubleshooting de conexões. Eu faço bastante uso desse carinha pra validar Network ACL's, Security Groups ou rotas entre VLAN's. É realmente um canivete suíço pra manipular conexões de rede.

Vamos lá

Instalação 

A maioria das distruibuições vem com o net instalado,  mas caso não tenha a ferramenta em mãos ela está disponível na maioria dos gerenciadores de pacotes e sempre pode ser encontrado pelas keys netcat ou nc

Ubuntu / Debian 

apt-get install netcat



CentOS / RHEL 

yum install nmap-ncat


Checando a instalação 

nc --version





Utlização basica 

A utilização do netcat no geral é bem simples. Pra criar uma conexão tcp básica com algum serviço / porta de um host, basta executar:


nc [options] [host] [port]


nc -v 0.0.0.0 9200




Criando um Client / Server com Netcat


Esse lab funcionaria como um comando wall, não é muito útil no dia a dia mas é legal pra entender a lógica de como o netcat funciona.

Criando um listener server na porta 9000


nc -l 9000


Criando uma conexão TCP  com o Server


nc 0.0.0.0 9000


Agora você pode enviar dados de texto entre todas as pontas da conexão cliente  / servidor. É bobo, mas didático.


Criando uma conexão UDP

Por padrão todas as conexões estabelecidas pelo netcat são feitas por meio do protocolo TCP. Para executar conexões utilizando UDP, basta executar a flag -u 


nc -u 0.0.0.0 9000


Executando um listener para o bash 


Isso também não é muito util pro dia a dia, mas é uma das utilidades do netcat. Não é muito seguro mas dependendo do caso de uso pode ser a solução para alguns tipos de problemas. Esse exemplo não se limita apenas ao bash, mas pode executar no geral qualquer comando instalado no server utilizando a opção -e.

Criando o server 


nc -lvp 9000 -e /bin/bash


Depois grude o client conforme os exemplos anteriores.





Criando uma conexão com suporte ipv4 e ipv6 


Utilizando as flags -4 ou -6 nós podemos especificar o tipo de suporte TCP/IP que a conexão terá.


nc -v 2001:4860:4860::8888 53 -6


Checando conexões abertas em um range de portas

Podemos verificar quais portas / serviços estão ativas num host utilizando o netcat. Basicamente precisamos especificar um intervalo de portas a serem checadas.

Checando um intervalo de portas 



nc -z -n -v 0.0.0.0 8000-9100



Checando um intervalo de portas com timeout


nc 0.0.0.0 8080-8090 -v -w 2



Filtrando somente os sucessos com grep 


nc -z -n -v 0.0.0.0 8000-9100 2>&1 | grep succeeded




Manipulando o Redis com netcat


Eu não tenho muita paciência no dia a dia pra lidar com clients de redis. Normalmente utilizo o netcat para fazer verificações e operações básicas em clusters. É um pouco de engenharia? Talvez. Pra mim é uma mão na roda, talvez possa ajudar vocês também.

Executando um comando para testar a conexão com o Redis



echo 'ping' | nc -v 0.0.0.0 6379




Manipulando keys do Redis 

Usando a mesma dinâmica, é possível utilizar todas as operações básicas do Redis. Basicamente todas que estão descritas na documentação. Pra manutenção e checagem rápida de coisas pontuais, pode ser bem util. 
                                                                                     

echo 'set FOO BAR' | nc -v 0.0.0.0 6379

echo 'get FOO' | nc -v 0.0.0.0 6379

echo 'del FOO' | nc -v 0.0.0.0 6379




Zerando todas as keys do redis com netcat 

Em medidas de emergência, manutenção ou teste, é possivel zerar todas as keys também. Esse truque é bem útil 


echo 'FLUSHALL' | nc -v 0.0.0.0 6379





Pegando o numero de keys guardadas no redis 


echo 'DBSIZE' | nc -v 0.0.0.0 6379






Manipulando o Memcached com Netcat

O memcached tem uma API um pouquinho mais complicada de se lidar. Não é tão simples como a do redis pra acesso rápido mas algumas das principais operações também podem ser realizadas via socket tcp sem a necessidade de um client. 

Zerando todas as keys do memcached 

echo 'flush_all' | nc 0.0.0.0 11211






Consultando as keys de status do memcached 


echo 'stats' | nc 0.0.0.0 11211



Consultando os status dos itens guardados 


echo 'stats items' | nc 0.0.0.0 11211



Espero ter ajudado! :)

Nenhum comentário