Introdução
Uma das maiores vantagens de usar Linux é a infinidade de utilitários úteis que ele fornece. Os recursos internos do programa geralmente são suficientes para a maioria dos programadores realizarem seu trabalho. Isso significa que, na maioria das vezes, você não precisará baixar programas e softwares externos. As ferramentas integradas fornecerão utilidade suficiente. Entre esses recursos úteis está o utilitário netcat.
Quando se trata do mundo das ferramentas de rede, o netcat é uma espécie de arma superpoderosa. É um comando incrivelmente versátil que você pode usar para múltiplos propósitos. Por exemplo, você pode usar esta única ferramenta para monitorar, testar, bem como transferir todos os tipos de arquivos e dados através das conexões do seu sistema. Neste guia, exploraremos como realizar todas essas ações em um VPS usando o netcat.
Encontrando o Netcat
O Netcat normalmente está disponível em todas as distribuições Linux modernas. O que significa que você provavelmente já o possui e não precisa se esforçar para instalá-lo. Em nosso tutorial, usaremos o VPS Ubuntu 12.04. Você pode instalar seu próprio servidor Ubuntu seguindo nosso tutorial. O Ubuntu normalmente vem com a variante BSD do utilitário netcat. Tenha em mente que, se você tiver outra versão, ela pode funcionar de maneira um pouco diferente.
Analisando a Sintaxe Básica
Começamos aprendendo sobre a sintaxe geral que funciona no utilitário netcat. Você pode operar o netcat iniciando uma conexão TCP. A conexão deve ser iniciada para um host remoto. Aqui está a sintaxe básica para o netcat:
|
1 |
netcat [opções] host porta |
Este comando tentará iniciar uma conexão TCP com um host remoto. O host ao qual ele se conecta depende do número da porta que você especificar no comando. A conexão não será criptografada. Como você pode ver, este comando funciona de maneira semelhante à forma como o comando telnet funciona.
Por outro lado, você também pode iniciar uma conexão UDP. Para enviar um pacote UDP em vez de TCP, você deve usar a opção -u. Seria algo assim:
|
1 |
netcat -u host porta |
Se desejar, você também pode especificar um intervalo de portas. Para fazer isso, você precisa colocar um hífen entre a primeira e a última porta. Aqui está um exemplo:
|
1 |
netcat host porta_inicial-porta_final |
Você também pode adicionar mais flags a isso. Outra coisa a notar é que você pode usar netcat e nc de forma intercambiável. Eles iniciarão o mesmo comando, o que significa que são aliases um do outro.
Usando o Netcat para Varredura de Portas
Para começar, vamos explorar um dos usos mais comuns do netcat. Vamos descobrir como usá-lo como um scanner de portas. Na maioria das situações, é melhor usar uma ferramenta como o nmap. No entanto, se você precisa apenas realizar varreduras de portas simples, o netcat é útil. Ele pode ajudá-lo a identificar portas abertas com facilidade.
Para usar o netcat como um scanner de portas, você precisa mencionar o intervalo de portas. Você fará isso usando a opção -z. Assim, o sistema varrerá o intervalo de portas em vez de tentar uma conexão. Digamos que queremos varrer da porta 1 até a porta 1000:
|
1 |
netcat -z -v dominio.com 1-1000 |
Além do comando -z, também usamos a opção -v. Esta última nos permite fornecer mais informações ao comando. Ela nos permite ser mais 'verbosos'.
Você obterá uma saída como esta em retorno:

A saída mostra muitas informações para cada porta individual. Você sabe o status da conexão de cada porta. Por outro lado, você pode usar o endereço IP no lugar do nome de domínio, se o souber. Isso torna o processo muito mais rápido. Aqui está um exemplo:
|
1 |
netcat -z -n -v 198.51.100.0 1-1000 |
Usamos a flag -n para indicar que o sistema não precisa usar o DNS para resolver o endereço IP.
Normalmente, as mensagens de retorno são enviadas para a saída de erro padrão (stderr). Para filtrar os resultados mais rapidamente, você pode redirecioná-los para a saída padrão (stdout). Usaremos a sintaxe bash 2>&1 para fazer isso. Posteriormente, filtraremos os resultados usando o grep. Vamos aplicar isso ao nosso exemplo:
|
1 |
netcat -z -n -v 198.51.100.0 1-1000 2>&1 | grep sucedido |
A saída será semelhante a esta:
![]()
A saída mostra que apenas a porta 22 está aberta para conexão no intervalo fornecido. A porta 22 por acaso é a porta SSH tradicional.
Comunicação através do Netcat: Como funciona?
A seguir, veremos como você pode usar o netcat para enviar pacotes TCP e UDP. Não apenas isso, mas ele também pode receber pacotes em várias portas. Como resultado dessa capacidade, você pode usar duas instâncias do netcat para criar uma relação cliente-servidor. No início, você determinará o cliente e o servidor. Após a configuração inicial, ambos os clientes podem enviar e receber pacotes em qualquer direção.
Naturalmente, você terá que configurar o netcat em um sistema para escutar conexões em uma porta. Para fazer isso, você deve usar o parâmetro -l. Com isso, você pode selecionar a porta de sua escolha assim:
|
1 |
netcat -l 4444 |
Agora o TCP nesta máquina estará escutando conexões na porta 4444. Um ponto a ser observado é que, se você for um usuário não-root ou comum, não poderá acessar portas abaixo de 1000.
Em seguida, você deve configurar uma segunda máquina para estabelecer uma conexão. Você usará o mesmo número de porta e indicará um nome de domínio específico assim:
|
1 |
netcat domain.com 4444 |
A execução deste comando não fornecerá nenhuma saída. No entanto, ele estabelecerá a conexão. Isso significa que você pode começar a enviar mensagens de qualquer um dos servidores para o outro. Para fazer isso, tudo o que você precisa fazer é digitar a mensagem e pressionar ENTER. A mensagem aparecerá em ambas as telas.
Quando terminar, você pode fechar a conexão TCP pressionando CTRL+D.
É possível enviar arquivos usando o Netcat?
A seguir, mostraremos como você pode enviar arquivos através do netcat. Com uma conexão TCP, você pode enviar mensagens, bem como outros tipos de dados. Para começar, você deve selecionar uma máquina para escutar conexões. No entanto, em vez de digitar as informações no comando, nós as colocaremos em um arquivo como este:
|
1 |
netcat -l 4444 > received_file |
Na outra máquina, você terá que criar um novo arquivo de texto. Aqui está o comando a ser usado:
|
1 |
echo "Olá, este é um arquivo" > original_file |
Para transmitir o arquivo, você o usará como entrada para a conexão no computador que está escutando:
|
1 |
netcat domain.com 4444 < original_file |
O outro computador mostrará um novo arquivo chamado ‘received_file.’ Ele conterá todas as informações que digitamos:
|
1 |
cat received_file |
Você pode usar este utilitário e transformá-lo em um programa de transferência de arquivos. Digamos que você queira transferir o conteúdo de um diretório. Faremos isso criando um tarball sem nome que transferiremos para o sistema e descompactaremos no diretório remoto. Na outra máquina, precisamos nos preparar para receber o arquivo. Sabemos que precisaremos descompactá-lo e extraí-lo. Para fazer isso, execute este comando:
|
1 |
netcat -l 4444 | tar xzvf - |
O hífen indica que o tar operará na entrada padrão. Isso vem do netcat no servidor inicial quando estabelecemos a conexão inicial.
Finalmente, podemos colocar o conteúdo de todo o diretório em um tarball e enviá-lo através do netcat assim:
|
1 |
tar -czf - * | netcat domain.com 4444 |
O hífen no comando tar mostra que estamos dizendo ao sistema para compactar e empacotar o conteúdo do diretório. Ele também o instrui a gravar o resultado na saída padrão. O arquivo passará pela conexão TCP para a outra extremidade. O servidor receptor irá descompactá-lo e salvá-lo no diretório remoto atual.
Assim como isso, você também pode transferir outros tipos de dados através do netcat. Muitas pessoas usam o comando dd para criar imagens de discos e transferi-las. Para outra maneira de transferir dados e arquivos, dê uma olhada no nosso tutorial mostrando como garantir a segurança ao transferir arquivos com SFTP.
Usando o Netcat como um Servidor Web
Outra função útil do netcat é que você pode usá-lo para testar suas páginas. Digamos que estamos usando um servidor para criar um arquivo HTML como este:
|
1 |
nano index.html |
Este é o código HTML que o arquivo contém:
|
1 2 3 4 5 6 7 8 9 10 |
<html> <head> <title>Página de Teste</title> </head> <body> <h1>Cabeçalho de Nível 1</h1> <h2>Subtítulo</h2> <p>Texto normal aqui</p> </body> </html> |
Insira isso no arquivo, depois salve e feche-o. Normalmente, a porta 80 é a porta web padrão. Como um usuário comum, não root, selecionaremos a porta 8888. Assumindo que você deseja servir e verificar a página uma vez, você deve usar este comando:
|
1 |
printf 'HTTP/1.1 200 OK\n\n%s' "$(cat index.html)" | netcat -l 8888 |
Para visualizar o conteúdo do arquivo, acesse o seu navegador. Visite o seguinte:
|
1 |
http://server_IP:8888 |
Você poderá ver a página que codificou com o arquivo HTML:

Assim que você acessar a página, a conexão netcat será fechada. Isso significa que atualizar a página resultará em um erro em vez do conteúdo. Isso ocorre porque a configuramos para servir a página apenas uma vez. Se você quiser continuar recebendo conexões para ver a página indefinidamente, usará um código diferente:
|
1 |
while true; do printf 'HTTP/1.1 200 OK\n\n%s' "$(cat index.html)" | netcat -l 8888; done |
Aqui, envolvemos o último comando em um loop infinito. Se quiser parar o loop, tudo o que precisa fazer é digitar CTRL-C. Agora você pode continuar visualizando sua página e sua renderização mesmo após o fechamento da primeira conexão. No entanto, esta é a funcionalidade máxima que você pode extrair do uso do utilitário netcat como um servidor web. Não tente usá-lo para servir sites reais, pois ele não oferece nenhuma segurança. Em vez disso, você pode dar uma olhada em nossos tutoriais sobre como instalar software de servidor web como o Nginx ou Apache.
Conclusão
Neste tutorial, abordamos o utilitário netcat e exploramos sua versatilidade como uma ferramenta no Ubuntu. Como abordamos nas seções acima, você pode usá-lo para fins de comunicação, transferência de dados e exibição de páginas. Ele funciona perfeitamente para interações rápidas entre servidores por meio de conexões TCP/UDP. É um recurso muito útil para muitas funcionalidades básicas e diagnósticos.
Feliz Computação!
Comentários
Nenhum comentário ainda. Seja o primeiro.