Pular para o conteúdo principal

Thanwer's Blog

Netcat

Table of Contents

Já ouvi muitas vezes de algum colega de trabalho, ou de algum prestador de serviços frases como “Tem algo de errado com a rede”, ou “Essa porta não está aberta!”.

Voce pode usar testes online para verificar as portas abertas, uma rápida pesquisa no Google vai te trazer resultados bons, porem nem sempre isso é o suficiente.

# O problema

Vamos supor que voce seguiu meu outro post sobre restringir por endereço de origem no iptables, nesse caso essas ferramentas aleatórias não vão lhe ajudar, então voce pode usar o nmap!

Farei um post sobre o nmap no futuro, por enquanto vamos usa-lo de forma bem simples para verificar se uma porta está aberta:

$ sudo nmap -sS -p 80 example.com
Password:
Starting Nmap 7.95 ( https://nmap.org ) at 2024-10-31 22:08 -03
Nmap scan report for example.com (192.0.0.4)
Host is up (0.18s latency).
Other addresses for example.com (not scanned): 2001:db8::192:0:0:4

PORT   STATE SERVICE
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 0.39 seconds

Como voce pode ver, a parte importante é o -p 80, que especifica a porta que queremos testar, 80 nesse caso, e o ultimo argumento é o host que estamos escaneando.

Agora vamos supor que a outra pessoa está configurando uma central telefônica, que é um exemplo clássico… Eu tenho muitas historias para contar sobre essa galera da telefonia… Por exemplo, ele pode ter errado uma configuração simples, como o gateway ou a mascara de rede, e isso vai fazer com que o seu serviço não funcione. Ele vai fazer os testes que expliquei acima e em vez da porta aparecer como “open” ela vai dizer “filtered”.

Com isso ele vai ter o argumento pronto, e vai culpar a sua rede por isso. Como podemos provar que as nossas regras de firewall estão corretas e funcionando?

A forma mais simples é usar o netcat!

# netcat (nc)

O netcat é uma ferramenta super simples, porem muito poderosa para esses casos. Com ela voce pode subir rapidamente um serviço em qualquer porta TCP ou UDP!

## Instalação

A instalação é muito simples! Em um sistema Debian basta executar o seguinte comando:

sudo apt install netcat

## Usando a ferramenta

Lhes convido a ler a man page do nc.

Os principais argumentos que precisamos são:

  • -p : Isso especifica a porta que queremos escutar.
  • -k : Isso mantem o netcat aberto mesmo depois do cliente desconectar.
  • -u : Isso faz o netcat escutar UDP em vez de TCP.

## Casos de uso

### Testar comunicação de rede

Escutar na porta 2000:

nc -l 2000

Isso inicia um serviço na porta 2000.

Agora vamos abrir outro terminal e conectar um cliente a essa porta:

nc localhost 2000

Em ambos os terminais voce deve ver algo semelhante a um chat funcionando, isso é transmitido através da rede!

Veja um exemplo disso funcionando:

Exemplo de uso do netcat

### Transferencia de arquivos

O netcat tambem pode ser usado para transferir arquivos entre dois hosts, isso é util em casos de ambientes sem acessos FTP ou SCP.

No receptor:

nc -l -p 1234 > arquivo_recebido.txt

No transmissor, assumindo que o receptor seja o IP 192.0.0.2::

nc 192.0.0.2 -p 1234 < arquivo_para_enviar.txt

Isso pode ser util para transferir um arquivo de log, por exemplo.

### Port scac

nc pode ser usado como uma alternativa “mais barata” para o nmap:

$ nc -z host.example.com 20-30
Connection to host.example.com 22 port [tcp/ssh] succeeded!
Connection to host.example.com 25 port [tcp/smtp] succeeded!

### Falar diretamente com servidores

nc também pode ser usado como alternativa para o telnet em alguns casos para troubleshooting.

Por exemplo, podemos falar diretamente com um servidor SMTP na porta 25:

$ nc localhost 25 << EOF
HELO host.example.com
MAIL FROM: <user@host.example.com>
RCPT TO: <user2@host.example.com>
DATA
Body of email.
.
QUIT
EOF