top of page
Foto do escritorLucas Roger - CiberBox

Como criar um port scan com Python

Atualizado: 24 de nov.



Aviso informativo sobre o bom uso das técnicas aprendidas .Portscan e programação em python.

UMA BREVE INTRODUÇÃO


Como já é sabido,o port scan é uma ferramenta essencial para o mundo da cibersegurança. Existem diversos programas gratuitos e bem eficientes que são muito usados em testes de segurança, como o maior exemplo, pode ser citado o Nmap. Caso queira saber um pouco mais sobre o papel das portas e do port scan, aconselhamos dois textos dispostos em nossos materiais: Como máquinas se comunicam e Portscan: explorando seu alvo.


Além de conhecer minimamente o papel das portas nas redes de computadores, será necessário para este pequeno tutorial ter noções básicas de programação com Python. Sem mais delongas, hands on !


Em um primeiro momento estaremos mostrando todo o código e posteriormente vamos destrinchá-lo e explicar linha por linha.



Fonte: Via CiberBox


EXPLICANDO


#1 - Na primeira linha importamos uma biblioteca de baixo nível para trabalharmos com sockets. Se não souber o que é, novamente indicamos o texto Como máquinas se comunicam.

import socket

#2- Nesta etapa criamos uma variável para indicarmos o endereço IP do host que estaremos realizando a análise, ou seja, o nosso alvo. Como o host é local, o nome da variável parece pertinente (Local Host).

LHOST = "192.168.1.128"

#3 - Aqui é criado um laço de repetição que irá escanear as primeiras 1024 portas das totais 65.535, que também são conhecidas como "well know ports" , que em tradução significa "portas bem conhecidas".

for PORT in range(0,1024):

#4 - Nesta etapa é onde começa realmente o nosso portscan. Criamos um objeto na variável port_scan. Este objeto é responsável por criar propriamente dito o socket de conexão que vamos poder chamar os métodos, que nada mais são do que funções atreladas aos objetos da classe socket.

port_scan = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

Se você não tem muita experiência com Python não se preocupe , aqui o que precisamos saber é que a parte socket.(socket.AF_INET, socket.SOCK_STREAM) apenas significa que estamos criando um socket com dois parâmetros: O primeiro indicando a família de IP ,o IPv4 (socket.AF_INET) , e o segundo, o protocolo de transporte que neste caso será o TCP (socket.SOCK_STREAM). É necessário ser o TCP pois ele é orientado à conexão, diferentemente do UDP.


#5 - Aqui nós aplicamos ao nosso objeto port_scan um tempo máximo de espera de resposta de 0.1 segundos. Caso não definamos esse tempo, nosso programa ficará extremamente lento (praticamente inutilizável), pois irá esperar o tempo padrão de conexão.


port_scan.settimeout(0.1)

#6 - Nessa parte nós criamos uma variável para receber e armazenar o retorno do método chamado port_scan.connect_ex(). Este método exige como parâmetro dois valores, a porta em questão, que será icrementada pelo laço de repetição e o nosso alvo, que está armazenado na variável LHOST, que já discutimos na etapa #02. Caso esse método retorne o valor "0" como um inteiro, sabemos que a porta está aberta .


status = port_scan.connect_ex((LHOST, PORT))

#7 - Aqui fazemos uma rápida verificação do valor da variável status. Como mencionado acima, caso o valor seja "0", sabemos que a porta está aberta.


if status == 0:

#8 - Se o valor da variável status for "0" é printado na tela a porta e seu status (aberta) .


print(f"{PORT}/OPEN")

#9 - Se o valor da variável status for qualquer um diferente de "0" é printado na tela a porta e seu status (fechada) .


port_scan.close()


EXECUTANDO


Foto do terminal do computador com o resultado final de todo o código compilado e executado

Fonte: Via CiberBox


Ao executar este exato código tendo em sua rede local um host com o endereço 192.168.1.128 e tendo apenas as portas 80 e 443 abertas dentre as portas bem conhecidas, é muito provável que você tenha esse retorno em seu terminal. É também possível que tenha notado uma pequena demora, principalmente se já tiver experimentado o Nmap, por exemplo. De qualquer forma você concluiu com êxito a criação de um simples port scan que pode ser muito melhorado e adaptado para suas análises.



CONCLUSÃO


Por fim, gostaríamos de incentivar a realização da atividade com pequenas mudanças e adaptações próprias, por isso não vamos disponibilizar o código em texto para copiar e colar. Você poderá compartilhar seu código no nosso fórum ou nos comentários desse post no LinkdIn. Como mencionado, esse código pode ser muito mais eficiente e modificado para ficar bem semelhante ao Nmap. Caso queira um exemplo pode estar deixando nos comentários do post em nosso site ou no LinkedIn.


Para meditação deixamos a frase do excelente livro "A arte da guerra" de Sun Tzu.


Para vencer, deve conhecer perfeitamente a terra (a geografia, o terreno) e os homens (tanto a si mesmo quanto o inimigo). O resto é uma questão de cálculo."

-Sun Tzu

15 visualizações0 comentário

Posts recentes

Ver tudo

Comments

Rated 0 out of 5 stars.
No ratings yet

Add a rating
bottom of page