fbpx

Comandos Linux – Comando nc

Comando Linux nc

comando nc

Em sistemas operacionais do tipo Unix, o comando nc executa o Netcat, um utilitário para enviar dados brutos através de uma conexão de rede.

Este documento cobre a versão Linux do nc .

Descrição

O Netcat é um utilitário que lê e grava dados nas conexões de rede , usando o protocolo TCP ou UDP . Ele foi projetado para ser uma ferramenta confiável de “back-end” que pode ser usada diretamente ou direcionada por outros programas e scripts . Ao mesmo tempo, é uma ferramenta de depuração e exploração de rede rica em recursos, pois pode criar praticamente qualquer tipo de conexão necessária e possui vários recursos internos interessantes. Os usos comuns incluem:

  • Proxies TCP simples
  • Clientes e servidores HTTP baseados em shell
  • Teste de daemon de rede
  • A Socks ou HTTP ProxyCommand para ssh

Sintaxe

  nc [-46bCDdhklnrStUuvZz] [-I length ] [-i interval ] [-O length ] 
    [-P proxy_username ] [-p source_port ] [-q segundos ] [-s source ] 
    [-T toskeyword ] [-V rtable ] [-w timeout ] [-X proxy_protocol ] 
    [-x proxy_address [: porta ]] [ destino ] [ porta ]

Opções

-4Força o nc a usar apenas endereços IPv4 .
-6Força o nc a usar apenas endereços IPv6 .
-bPermitir transmissão.
-CEnvie CR LF como final de linha.
-DHabilite a depuração no soquete.
-dNão tente ler do stdin .
-hImprime a ajuda nc.
-I comprimentoEspecifica o tamanho do buffer de recebimento do TCP.
intervalo -iEspecifica um intervalo de tempo de atraso entre as linhas de texto enviadas e recebidas. Além disso, causa um tempo de atraso entre as conexões com várias portas.
-kForça o nc a continuar ouvindo outra conexão após a conclusão da conexão atual. É um erro usar esta opção sem a opção -l .
-euUsado para especificar que nc deve escutar uma conexão de entrada em vez de iniciar uma conexão com um host remoto. É um erro usar esta opção em conjunto com as opções -p , -s ou -z . Além disso, qualquer tempo limite especificado com a opção -w é ignorado.
-nNão faça nenhuma pesquisa de DNS ou serviço em nenhum endereço, nome de host ou porta especificado.
-O comprimentoEspecifica o tamanho do buffer de envio TCP.
-P proxy_usernameEspecifica um nome de usuário para apresentar a um servidor proxy que requer autenticação . Se nenhum nome de usuário for especificado, a autenticação não será tentada. Atualmente, a autenticação de proxy é suportada para proxies HTTP CONNECT.
-p source_portEspecifica a porta de origem que a nc deve usar, sujeita a restrições e disponibilidade de privilégios.
-q segundosapós o EOF no stdin, aguarde o número especificado de segundos e saia. Se os segundos forem negativos, espere para sempre.
-rEspecifica que as portas de origem ou destino devem ser escolhidas aleatoriamente em vez de sequencialmente dentro de um intervalo ou na ordem em que o sistema as atribui.
-SAtiva a opção de assinatura RFC 2385 TCP MD5.
-s fonteEspecifica o IP da interface usada para enviar os pacotes . Para soquetes de datagramas do domínio UNIX, especifica o arquivo de soquete temporário local a ser criado e usado para que os datagramas possam ser recebidos. É um erro usar esta opção em conjunto com a opção -l .
-T toskeywordAltere o valor do IPv4 TOS. toskeyword pode ser um de crítico , inetcontrol , lowcost , lowdelay , netcontrol , throughput , confiabilidade ou um dos Pontos de Código DiffServ: ef , af11 … af43 , cs0 … cs7 ; ou um número em hexadecimal ou decimal .
-tFaz com que o nc envie RFC 854 NÃO e NÃO responda às solicitações do RFC 854 DO e WILL. Isso possibilita o uso de nc para criar scripts para sessões de telnet .
-VOCÊEspecifica o uso de soquetes do domínio UNIX.
-vocêUse UDP em vez da opção padrão do TCP. Para soquetes de domínio UNIX, use um soquete de datagrama em vez de um soquete de fluxo. Se um soquete do domínio UNIX for usado, um soquete de recebimento temporário será criado em / tmp, a menos que o sinalizador -s seja fornecido.
-V rtableDefina a tabela de roteamento a ser usada. O padrão é 0.
-vFaça nc dar uma saída mais detalhada .
-w timeoutConexões que não podem ser estabelecidas ou têm tempo limite inativo após segundos de tempo limite. O sinalizador -w não tem efeito na opção -l , ou seja, nc escutará para sempre uma conexão, com ou sem o sinalizador -w . O padrão é sem tempo limite.
-X proxy_protocolSolicita que a nc use o protocolo especificado ao conversar com o servidor proxy. Os protocolos suportados são ” 4 ” (SOCKS v.4), ” 5 ” (SOCKS v.5) e ” connect ” (proxy HTTPS). Se o protocolo não for especificado, o SOCKS versão 5 será usado.
-x proxy_address [: porta]Solicita que o nc deve se conectar ao destino usando um proxy em proxy_address e port . Se a porta não for especificada, a porta conhecida do protocolo proxy será usada (1080 para SOCKS, 3128 para HTTPS).
-ZModo DCCP.
-zEspecifica que nc deve procurar apenas daemons que estão escutando, sem enviar dados para eles. É um erro usar esta opção em conjunto com a opção -l .

O destino pode ser um endereço IP numérico ou um nome de host simbólico (a menos que a opção -n seja fornecida). Em geral, um destino deve ser especificado, a menos que a opção -l seja fornecida (nesse caso, o host local é usado). Para soquetes do domínio UNIX, um destino é necessário e é o caminho do soquete ao qual se conectar (ou escute se a opção -l for fornecida).

A porta pode ser um único inteiro ou um intervalo de portas. As faixas estão no formato nn-mm . Em geral, uma porta de destino deve ser especificada, a menos que a opção -U seja fornecida.

Modelo Cliente / Servidor

É bastante simples criar um modelo cliente / servidor muito básico usando nc . Em um console, inicie o nc escutando em uma porta específica uma conexão. Por exemplo:

  nc -l 1234

Agora o nc está escutando na porta 1234 uma conexão. Em um segundo console (ou uma segunda máquina), conecte-se à máquina e à porta que está sendo ouvida:

  nc 127.0.0.1 1234

Agora deve haver uma conexão entre as portas. Qualquer coisa digitada no segundo console será concatenada para o primeiro e vice-versa. Depois que a conexão foi configurada, a nc realmente não se importa de que lado está sendo usado como ‘servidor’ e de que lado está sendo usado como ‘cliente’. A conexão pode ser terminada usando um EOF (‘ ^ D ‘).

Não há opção -c ou -e no netcat moderno, mas você ainda pode executar um comando após o estabelecimento da conexão redirecionando os descritores de arquivo. Seja cauteloso aqui, pois abrir uma porta e permitir que qualquer pessoa conectada execute um comando arbitrário em seu site é PERIGOSO. Se você realmente precisa fazer isso, aqui está um exemplo:

No lado do ‘servidor’:

  rm -f / tmp / f;  mkfifo / tmp / f
  cat / tmp / f |  / bin / sh -i 2> & 1 |  nc -l 127.0.0.1 1234> / tmp / f

No lado do ‘cliente’:

  nc host.example.com 1234

(prompt do shell de host.example.com)

Ao fazer isso, você cria um fifo em / tmp / f e faz nc escutar na porta 1234 do endereço 127.0.0.1 no lado ‘server’, quando um ‘cliente’ estabelece uma conexão com êxito a essa porta, / bin / sh é executado no lado ‘servidor’ e o prompt do shell é fornecido no lado ‘cliente’.

Quando a conexão é encerrada, o nc também fecha. Use -k se quiser continuar ouvindo, mas se o comando sair dessa opção, não será reiniciado ou continuará executando nc . Além disso, não esqueça de remover o descritor de arquivo quando não precisar mais dele:

  rm -f / tmp / f

Transferência de dados

O exemplo na seção anterior pode ser expandido para criar um modelo básico de transferência de dados. Qualquer entrada de informações em uma extremidade da conexão será enviada para a outra extremidade, e as entradas e saídas podem ser facilmente capturadas para emular a transferência de arquivos .

Comece usando nc para escutar em uma porta específica, com a saída capturada em um arquivo:

  nc -l 1234> filename.out

Usando uma segunda máquina, conecte-se ao processo de escuta nc , alimentando o arquivo a ser transferido:

  nc host.example.com 1234 <nome do arquivo.in

Após a transferência do arquivo, a conexão será fechada automaticamente.

Conversando com Servidores

Às vezes, é útil conversar com os servidores “manualmente” e não através de uma interface do usuário. Pode ajudar na solução de problemas, quando pode ser necessário verificar quais dados um servidor está enviando em resposta aos comandos emitidos pelo cliente. Por exemplo, para recuperar a página inicial de um site:

  printf "GET / HTTP / 1.0 \ r \ n \ r \ n" |  nc host.example.com 80

Observe que isso também exibe os cabeçalhos enviados pelo servidor da web. Eles podem ser filtrados usando uma ferramenta como sed , se necessário.

Exemplos mais complicados podem ser criados quando o usuário conhece o formato das solicitações exigidas pelo servidor. Como outro exemplo, um email pode ser enviado para um servidor SMTP usando:

  nc [-C] localhost 25 << EOF
 HELO host.example.com
 CORREIO DE: < [email protected] >
 RCPT TO: < [email protected] >
 DADOS
 Corpo do email.
 .
 SAIR
 EOF

Digitalização de porta

Pode ser útil saber quais portas estão abertas e executando serviços em uma máquina de destino. O sinalizador -z pode ser usado para dizer ao nc para relatar portas abertas, em vez de iniciar uma conexão. Geralmente, é útil ativar a saída detalhada para stderr usando esta opção em conjunto com a opção -v .

Por exemplo:

  nc -zv host.example.com 20-30
  A conexão com a porta host.example.com 22 [tcp / ssh] foi bem-sucedida!
 Conexão com host.example.com 25 portas [tcp / smtp] concluída com êxito!

O intervalo de portas foi especificado para limitar a pesquisa às portas 20 a 30 e é verificado por ordem crescente.

Você também pode especificar uma lista de portas a serem varridas, por exemplo:

  nc -zv host.example.com 80 20 22
  nc: conectar ao host.example.com 80 (tcp) falhou: conexão recusada 
 nc: conectar ao host.example.com 20 (tcp) falhou: conexão recusada 
 A conexão com a porta host.example.com [tcp / ssh] foi bem-sucedida!

As portas são verificadas pela ordem que você forneceu.

Como alternativa, pode ser útil saber qual software de servidor está sendo executado e quais versões. Essas informações geralmente estão contidas nos banners de saudação. Para recuperá-los, é necessário primeiro fazer uma conexão e depois interromper a conexão quando o banner foi recuperado. Isso pode ser conseguido especificando um pequeno tempo limite com o sinalizador -w ou talvez emitindo um comando “QUIT” para o servidor:

  eco "QUIT" |  nc host.example.com 20-30
  SSH-1.99-OpenSSH_3.6.1p2 Incompatibilidade de protocolo. 
 220 host.example.com Pronto para IMS SMTP Receiver Versão 0.84

Exemplos

  nc -p 31337 -w 5 host.example.com 42

Abre uma conexão TCP à porta 42 de host.example.com , usando a porta 31337 como porta de origem, com um tempo limite de 5 segundos.

  nc -u host.example.com 53

Abre uma conexão UDP à porta 53 de host.example.com .

  nc -s 10.1.2.3 host.exemplo.com 42

Abre uma conexão TCP à porta 42 de host.example.com usando 10.1.2.3 como o IP para o final local da conexão.

  nc -lU / var / tmp / dsocket

Cria e escuta em um soquete de fluxo do domínio UNIX.

  nc -x10.2.3.4: 8080 -Xconnect host.example.com 42

Conecta-se à porta 42 do host.example.com por meio de um proxy HTTP em 10.2.3.4 , porta 8080 . Este exemplo também pode ser usado pelo ssh .

  nc -x10.2.3.4: 8080 -Xconnect -Pruser host.example.com 42

O mesmo que o exemplo acima, mas desta vez ativando a autenticação de proxy com o nome de usuário ” ruser “, se o proxy exigir.

ifconfig – exibe ou modifica a configuração das interfaces de rede.

20 de novembro de 2019

Sobre nós

A Linux Force Brasil é uma empresa que ama a arte de ensinar. Nossa missão é criar talentos para a área de tecnologia e atender com excelência nossos clientes.

CNPJ: 13.299.207/0001-50
SAC:         0800 721 7901

Comercial  Comercial: (11) 3796-5900

Suporte:    (11) 3796-5900

Copyright © Linux Force Security  - Desde 2011.