Como usar a ferramenta de rede netcat

Índice

Neste tutorial, vamos falar sobre um ferramenta de rede Netcat muito poderosa, comumente abreviado como nc. Esta ferramenta é utilizada através da linha de comando e sua sintaxe é muito simples. Isso nos permitirá escrever e receber dados através de sockets (TCP ou UDP). Ele tem muitos recursos e, portanto, podemos usá-lo de muitas maneiras. É importante conhecer seu funcionamento, pois nos permitirá depurar, testar e investigar na rede.

Netcat pode operar em 2 modos:

ClienteNeste modo ele se encarregará de se conectar com o ouvinte (que está escutando em um endereço e IP específicos, e que precisaremos saber).

Servidor ou ouvinteAguarde conexões de clientes em uma determinada porta.

Vamos a aprenda como o Netcat ou nc funciona por meio de exemplos práticos, que é a melhor maneira de aprender. Para isso usarei o sistema operacional Ubuntu 16.04.

A primeira coisa que veremos é a sintaxe do netcat:

 nc [opções] [destino] [porta]
Netcat você tem muitas opções, vamos ver algumas:

Algumas opções netcar

  • -eu: Diz ao netcat para ouvir.
  • -p: Para indicar o porto de origem.
  • -s: Para indicar o endereço de origem.
  • -k: Para permitir conexões "infinitas" ao ouvinte (usado com -l).
  • -ou: Netcat abre a porta como UDP em vez de TCP (que é por padrão).
  • -v: Com esta opção, ele nos mostrará informações de conexão.
  • -eu: Para indicar o atraso de envio e recebimento. (Em segundos).
  • -4: Permite que o Netcat use apenas IPv4.
  • -6: Como o anterior, mas obriga a usar IPv6.

Existem mais opções que podemos ver executando o seguinte comando:

 nc -h
Abaixo você pode ver na foto:

Vamos começar com os exemplos, o mais simples vai primeiro, para complicar, mas só um pouco, você verá que é muito fácil de usar.

Exemplo 1
Coloque minha máquina para escutar na porta 87:

 sudo nc -l -p 87
NotaFuncionaria da mesma forma removendo -p.

Agora vamos estabelecer uma conexão de outro terminal, já que eu executo na mesma máquina, uso localhost como endereço:

 nc localhost 87
Se escrevermos algo do cliente que acabamos de abrir, também o veremos no terminal que está escutando, e assim verificamos se a conexão funciona corretamente. Mas se escrevermos para o ouvinte, o primeiro terminal, ele também alcançará o cliente. Em seguida, deixo uma imagem do ouvinte e outra do cliente:

Vemos que eles se comunicam como queríamos neste exemplo, vamos para outro.

Exemplo 2
Podemos fazer com que o servidor ou ouvinte salve os dados enviados pelo cliente em um arquivo, para isso o comando a ser executado não difere muito do visto no primeiro exemplo:

 sudo nc -l 87> teste
Observaçãoteste é o nome do arquivo onde você salvará as informações que chegarem.

No lado do cliente, o comando será o mesmo de antes:

 nc localhost 87
A imagem a seguir mostra o que é executado no cliente (o ouvinte está ouvindo antes de se conectar, caso contrário, não teria efeito):

E do lado do servidor podemos ver que aparentemente nada é recebido, mas a única certeza é que não é mostrado na tela e fica salvo no arquivo de teste:

Vamos continuar com outro exemplo.

Exemplo 3
Vamos verificar se existe um intervalo de portas, para saber se estão abertas ou não, neste exemplo o intervalo será 80-90. Primeiro, abrimos um servidor na porta 80 como fizemos no primeiro exemplo (então veremos como funciona quando está aberto e quando não está):

 sudo nc -l 87
E no cliente iremos executar:
 nc -z -v localhost 80-90
Parâmetro -z é usado para digitalização, e o -v Como vimos antes para mostrar a informação (se não colocarmos isso não vai mostrar qual porta está aberta e qual não está), então a imagem do cliente:

Vamos ver um exemplo em UDP.

Exemplo 4
Este exemplo também é simples, vamos escutar UDP na porta 2016 e vamos forçá-lo a ser um endereço IPv4:

 sudo nc -l -u -4 2016
E agora fazemos com que o cliente se conecte:
 nc -u -4 2016
Não forneço uma imagem, pois a captura será a mesma do exemplo 1, mudando naturalmente a parte do comando. Vamos ver um exemplo em que usamos o código Python.

Exemplo 5
Vamos colocar um código o mais simples possível em Python para que ele escute uma conexão, receba um dado e termine.

 import socket s = socket.socket () s.bind (("192.168.56.1", 1987)) s.listen (1) conn, addr = s.accept () data = conn.recv (1024) .decode (" utf-8 ") imprimir (dados) 
Vou executar este código no Windows e, a partir do Linux, conectarei a ele por meio do netcat, a imagem a seguir mostra o lado do cliente no Linux:

E como seria no Windows:

Se modificarmos algo no código, podemos fazê-lo executar um comando e nos enviar seu conteúdo, mas também podemos retornar um shell, que nos permitirá fazer muitas coisas, então vamos para o próximo exemplo.

Exemplo 6
Neste exemplo, vou executar um código python Na mesma máquina Linux, e vou conectar com o netcat, vamos verificar se um Shell (/ bin / bash) nos retorna. Abaixo deixo o código Python, o mais simples e curto possível, apenas para o exemplo.

 import socket, subprocess s = socket.socket (socket.AF_INET) s.setsockopt (socket.IPPROTO_IP, socket.SO_REUSEADDR, 1) s.bind (("", 1987)) s.listen (1) conn, addr = s .accept () p = subprocess.Popen (["/ bin / bash"], stdin = conn, stdout = conn, stder = conn) 
O código Python é executado e o seguinte é visto (a imagem mostra como fica ao se conectar a partir do netcat):

Vemos que ele escuta quando o executamos, mas quando um cliente se conecta, a conexão fecha e temos um Shell para nós.

Poderíamos também fazer um código que se conecte a nossa máquina, que colocaremos para escutar em uma determinada porta, em geral existem muitas possibilidades, agora você tem que investigar e "brincar" com o netcat, o que como você viu pode ajudar nós em muitos momentos.

Gostou e ajudou este tutorial?Você pode recompensar o autor pressionando este botão para dar a ele um ponto positivo

Você vai ajudar o desenvolvimento do site, compartilhando a página com seus amigos

wave wave wave wave wave