Exemplo de Portscan em Python
Scaneando portas com Python

Publicado em: 08/12/2016 00:00:00, por IVAN VARGAS

Se você trabalha com redes de computadores ou configurando servidores, por vezes precisou descobrir quais portas TCP/IP estavam abertas em um computador/servidor.

Na falta de um nmap, ou outro programa semelhante, temos que recorrer ao telnet para saber se uma porta está aberta ou fechada.

Pensando nisso, escrevi um pequeno programa em Python que serve justamente para descobrir quais portas - dentro de uma range especificada por você - estão escutando em um dado computador.

Segue o código:

#pyPortScan -  Exemplo de portscan utilzando Python
#Este exemplo didatico e serve unicamente para mostrar como trabalhar com parametros
#enviados pela linha de comando, criar funcoes e utilizar sockets TCP/IP.
import sys;
import socket;

#funcao principal, que realiza o scan
def scan(host, inicio, fim):
	#array que armazenara as portas abertas
	portas = []

	#loop principal
	for p in range(int(PORTA_INICIO), int(PORTA_FIM) + 1): #a funcao range(inicio, fim) retorna todos os valores entre dois numeros
		try:
			print '\rPorta:', p,
			#criamos o socket TCP
			tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM);
			
			#conectamos noss socket ao host e porta especificados
			tcp.connect((HOST,p))
			
			#se nao deu erro, conectou. Adiciono a porta ao array portas[]
			portas.append(p)
			
			#fecho a conexao
			tcp.close()
		except:
			#se deu erro ao abrir a conexao, passo adiante
			pass

	#ao concluir o loop, mostra o array com as portas encontradas
	print '\rScan concluido!'
	if len(portas) > 0:
		print 'Portas abertas:', portas
	else:
		print 'Nenhuma porta aberta :('

#verificamos se foram passados paramatros por linha de comand
if len(sys.argv) == 4:
	#se foram informados os parametros, repasso para variaveis formatando conforme o caso
	HOST         = sys.argv[1]
	PORTA_INICIO = int(sys.argv[2])
	PORTA_FIM    = int(sys.argv[3])
	
	#executo o scan
	scan(HOST, PORTA_INICIO, PORTA_FIM)
else:
	#se nao foram encontrados todos os parametros, mostro a sintaxe do programa
	print "----------------------------------------------------"
    print "pyPortScan - exemplo didatico de portscan com Python"
	print "----------------------------------------------------"
	print "\n\rSintaxe: python %s host porta_inicial porta_final" % sys.argv[0]
	print "\n\rExemplo: python %s 127.0.0.1 20 100" % sys.argv[0]

 

 

Se você chamar o programa sem passar nenhum parâmetro será informado a sintaxe do mesmo.

C:\>python pyPortScan.py
----------------------------------------------------
pyPortScan - exemplo didatico de portscan com Python
----------------------------------------------------

Sintaxe: python pyPortScan.py host porta_inicial porta_final  

Exemplo: python pyPortScan.py 127.0.0.1 20 100

 

No tela a seguir, realizamos o scan no host 192.168.2.249, procurando portas abertas começando em 1 até 100.

C:\>python pyPortScan.py 192.168.2.249 1 100
Scan concluido!
Portas abertas: [22,80]

 

Podemos ver que o programa nos mostra que as portas 22 e 80 estão abertas no host especificado.

 

Este é um exemplo didático para mostrar como o Python trabalha com sockets TCP, passagem de parâmetros por linha de comando, funções, etc. Para ser um portscan de verdade deveríamos utilizar threads e outras tecnicas de conexão - mas isso é assunto para outros posts. Se você quer um sistema profissional, utilize nmap :)

Ok, por enquanto é isso.

 

Att,

Ivan S. Vargas



IS5 TECNOLOGIA

São Lourenço do Sul/RS
Telefone: (53)9963-5721
E-mail: contato@is5.com.br
Facebook: fb.com/is5tecnologia
Skype: ivan_is5
GitHub: github.com/isvargas
O QUE FAZEMOS

Automação Comercial
Desenvolvimento de Sistemas
Hospedagem e Desenvolvimento de Sites
Aplicativos Mobile
Consultoria e Projetos Freelancer
Desenvolvido por is5 tecnologia