Python: mostrar portas TCP abertas

Vamos usar o python para saber quais portas TCP estão abertas em sua máquina e identificar possíveis serviços que estejam rodando na máquina.

English version: Click

Muitas vezes temos dúvidas sobre quais portas estão sendo usadas para aguardar uma conecção de entrada em uma máquina.

As portas que estão aguardando conexção ficam em um estado de LISTEN e portanto aguardando o recebimento de segmentos TCP com a flag SYN.

Depois de recebido um segmento TCP com a flag SYN a apelicação que está com uma porta aberta em modo LISTEN responde com um segmento TCP com as flags SYN+ACK (segundo estágio do three way handshake).

Python: Como verificar minhas portas TCP ?

Para fazer esse programa vamos precisar instalar a biblioteca psutil.

A bibliotéca psutil pode ser usada em Windows, Linux e macOS.

Neste post vamos usar a bibliotéca psutil no linux ubuntu. Vamos usar o comando abaixo para instalar primeiramente o pip para gerenciar o download do psutil.

sudo apt install python3-pip

Instalando a biblioteca python psutil

Em seguida vamos instalar o psutil com o pip. Essa biblioteca é bem interessante para fazer uma série de medições que vão desde memória até conexões de redes.

Para instalar o psutil, vamos usar o comando abaixo.

pip install psutil

Escrevendo o programa para mostrar as portas TCP

Agora, vamos criar um arquivo com o editor de sua preferência com o nome “myports.py”.

nano myports.py

Em seguida, vamos pegar o texto abaixo e colar no arquivo myports.py.

O arquivo está com comentários que ajudam o entendimento de cada etapa.

#-----------------------------------------------------------------------
#Vamos importar a biblioteca psutil
import psutil

# Pegar todas as conexões da máquina
connections = psutil.net_connections(kind='inet')

# filtrar pelas conexões com portas ouvindo (LISTEN)
my_ports = [conn.laddr.port for conn in connections if conn.status == psutil.CONN_LISTEN]

# Excluir linhas duplicadas
my_ports = list(set(my_ports))

# Ordenar da menor porta para a maior
my_ports.sort()

# Mostrar as portas TCP que estão abertas em modo (LISTENING)
for port in my_ports:
    print(f"Minha porta TCP= {port}  está aberta esperando conexão")
#-----------------------------------------------------------------------

Depois de criar o programa para mostrar as portas TCP locais que estão abertas, vamos executar o programa python com o comando abaixo.

python3 myports.py

Em seguida, vamos ver um resultado como o apresentado abaixo.

Podemos verificar na figura acima que o programa mostrou as portas TCP que estão abertas em modo listening.

Verificando o resultado com o netstat

Uma forma de verificar se o programa que criamos em python está correto é usar o comando “netstat -nlt”. Esse comando citado, permite que possamos ver as portas abertas na máquina local.

netstat -nlt

Podemos ver na figura acima que as mesmas portas abertas que foram encontradas com nosso programa em python também são as mesmas portas que o comando netstat -nlt encontrou.

Aumente seu conhecimento em Redes

Sugestão de livros:

Juliana Mascarenhas

Data Scientist and Master in Computer Modeling by LNCC.
Computer Engineer

Veja mais:

O que é protocolo de roteamento ?

Como funciona a camada de rede

O que é DNS

O que é NAT ?

https://www.python.org/