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
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