Índice:

Netcat em Python: 6 etapas
Netcat em Python: 6 etapas

Vídeo: Netcat em Python: 6 etapas

Vídeo: Netcat em Python: 6 etapas
Vídeo: How To Easily Do Asynchronous Programming With Asyncio In Python 2024, Novembro
Anonim
Netcat em Python
Netcat em Python

O que é netcat? A página de manual para netcat diz o seguinte: "o utilitário nc (ou netcat) é usado para quase tudo que envolve soquetes de domínio TCP, UDP ou UNIX. Ele pode abrir conexões TCP, enviar pacotes UDP, ouvir arbitrariamente Portas TCP e UDP, fazem a varredura de portas e lidam com IPv4 e IPv6. Ao contrário de telnet (1), scripts nc muito bem e separa mensagens de erro em erro padrão em vez de enviá-las para a saída padrão, como telnet (1) faz com alguns"

Em essência, o netcat permite que você se conecte a outros servidores usando o protocolo TCP ou UDP. TCP significa Protocolo de Controle de Transmissão e é orientado a conexões. UDP significa Universal Datagram Protocol e não tem conexão. O TCP é comumente usado para aplicativos da Internet, enquanto o UDP é usado para streaming de mídia ou VPNs.

Etapa 1: como começamos?

Como começamos?
Como começamos?

Acima é como o netcat é chamado. Você pode ver que há dois argumentos no final chamados "destino" e "porta". O destino se refere a um nome de host ou endereço IP do servidor ao qual estamos tentando nos conectar, enquanto a porta se refere à porta do servidor ao qual estamos tentando nos conectar.

Etapa 2: vamos começar

Vamos começar
Vamos começar

Acima está algum código python inicial. Como você pode ver, queremos processar os argumentos do programa da mesma forma que o utilitário real o faz. O nome do host será o primeiro argumento após o nome do executável, enquanto a porta será o segundo argumento após o nome do executável na linha de comando.

Etapa 3: Criação de uma conexão

Criando uma conexão
Criando uma conexão

Vamos criar uma função netcat que possamos usar. O que estamos basicamente fazendo aqui é criar um soquete e conectar ao servidor usando os parâmetros fornecidos. Para o comando netcat, os parâmetros atuais são o nome do host e a porta do servidor ao qual estamos tentando nos conectar. O socket contém os parâmetros "socket. AF_INET" e "socket. SOCK_STREAM" porque estamos padronizando para uma conexão TCP para este tutorial.

Etapa 4: vamos enviar algum conteúdo

Vamos enviar algum conteúdo
Vamos enviar algum conteúdo

Estendemos nossa função netcat para receber um terceiro parâmetro, "conteúdo". Há muito conteúdo aqui, então vamos dividi-lo por número de linha.

Linha 14-16: enviamos todo o conteúdo pelo soquete, esperamos um pouco e fechamos o soquete para todos os dados de saída para que o soquete saiba que não há mais dados chegando.

Linha 18-26: criamos um buffer para armazenar a resposta do servidor e, enquanto o soquete está recebendo dados, acrescentamos até 1024 bytes de dados ao resultado, desde que haja dados para ler.

Linha 28-29: queremos que essa conexão netcat seja uma conexão única, portanto, declaramos a conexão fechada e, em seguida, fechamos a conexão.

Linha 31: Esta é uma solicitação HTTP padrão. Se você executar o código com os argumentos de linha de comando "google.com" e "80", verá uma resposta HTTP adequada

Etapa 5: Vamos ter uma conexão aberta

Vamos ter uma conexão aberta
Vamos ter uma conexão aberta

O código acima (localizado abaixo do código da seção anterior) simplesmente nos permite executar vários comandos netcat em uma conexão pseudo-aberta. (Na realidade, cada vez que você executa um comando, ele abre e fecha uma nova conexão TCP, portanto, não emula verdadeiramente o comportamento do netcat, estamos simplesmente fazendo isso para fins de aprendizagem). Vamos dividir isso linha por linha também:

Linha 31: Queremos ler comandos indefinidamente para manter a "interatividade"

Linha 32: Este é o nosso buffer que armazenará o conteúdo da nossa solicitação

Linha 36-45: Leremos no buffer até lermos uma linha vazia

Linha 48: simplesmente chamamos nossa função netcat com o nome do host, a porta e o conteúdo recém-criado (que está devidamente codificado)

Linha 50: se o conteúdo do nosso buffer contiver "Connection: Close" (indicando que queremos encerrar a conexão), simplesmente sairemos do loop

Etapa 6: Conclusão

No final deste tutorial, você deve ter uma implementação mínima de netcat funcional. Vou deixar como um exercício para o usuário implementar recursos como:

1. apoiar outros protocolos

2. corrigir o código para não fechar a conexão todas as vezes

3. adicionar sinalizadores que o netcat já possui para modificar o comportamento

Recomendado: