Python: minhas portas TCP e UDP abertas

Vamos supor que queremos descobrir quais portas de TCP e UDP estão abertas em nosso computador. Isso é importante porque essas portas estão esperando por comunicações.

English version: Click Here

Quando estão nesse estado significa que estão prontas para receber mensagens de outros lugares.

Uma breve explicação sobre como funciona as portas TCP e UDP

Quando outra máquina tenta se conectar à nossa, ela pode enviar uma mensagem especial chamada SYN para uma de nossas portas TCP.

Dessa forma, se uma das nossas portas está aberta e pronta para conexão, a gente responde com uma mensagem especial chamada SYN+ACK, mostrando que estamos prontos para conversar.

Isso é como um “aperto de mão” entre computadores antes de começarem a trocar informações. Essa conversa entre as portas tem 3 passos e é chamada de “three way handshake”.

Como mostrar as portas UDP no python?

Para as portas UDP, não temos uma conexão inicial. Portanto, as portas UDP abertas ficam aguardando segmentos UDP serem enviados diretamente sem nenhum “aperto de mão” inicial.

Vale ressaltar que quando usamos estamos enviando dados para uma porta UDP aberta, temos duas possibilidades: A primeira é a porta UDP do destino estar aberta e consequentemente aceitar os dados que enviamos.

E a outra possibilidade é a porta de destino estar fechada e consequentemente o destino não receberia os dados.

Então, usando o Python, podemos descobrir nossas portas abertas e verificar quais serviços (coisas que rodam no computador, como um servidor web) estão esperando para conversar com outros computadores.

É uma maneira de entender o que está acontecendo na máquina e quais programas estão prontos para se comunicar com outros pela internet.

Instalando as bibliotecas do python?

Para fazer nosso programa, precisamos instalar uma ferramenta especial chamada “biblioteca psutil“. Essa biblioteca é útil porque nos ajuda a fazer várias coisas legais com computadores que usam sistemas Windows, Linux ou macOS.

No nosso exemplo, vamos usar o Linux Ubuntu. Primeiro, vamos instalar uma ferramenta chamada “pip“. O pip é um jeito de baixar e instalar outras ferramentas, como o psutil, de maneira fácil.

Para instalar o pip, vamos abrir um terminal e digitar o comando abaixo.

sudo apt install python3-pip

Instalando a biblioteca python psutil

Depois disso, vamos usar o pip para instalar o psutil. O psutil é uma biblioteca do python que nos ajuda a fazer muitas coisas interessantes com o computador!

Para instalar o psutil, vamos abrir o terminal e digitar o comando abaixo.

pip install psutil

Nota. Em nosso código, vamos usar também a biblioteca socket que vem instalada na maioria das vezes com o python. Portanto, não precisamos instalar essa biblioteca.

O código python para mostrar nossas portas TCP e UDP

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

nano myports_tcp_udp.py

Depois disso, copie o texto a seguir e cole no arquivo chamado myports_tcp_udp.py. Esse arquivo tem comentários que explicam cada passo do código, o que vai te ajudar a entender melhor o que está acontecendo.

#importando bibliotecas
import psutil
import socket

# coletando informações sobre TCP e UDP
connectall = psutil.net_connections(kind='inet')
only_udp = [conn for conn in psutil.net_connections(kind='inet') if conn.type == socket.SOCK_DGRAM]

# Separando informações sobre portas TCP
only_tcp_listening_ports = [conn.laddr.port for conn in connectall if conn.status == psutil.CONN_LISTEN]
# Separando informações sobre portas UDP
only_udp_listening_ports = [conn.laddr.port for conn in only_udp]

# removendo portas repetidas da lista
only_tcp_listening_ports = list(set(only_tcp_listening_ports))
only_udp_listening_ports = list(set(only_udp_listening_ports))

# organizando as portas da menor para a maior
only_tcp_listening_ports.sort()
only_udp_listening_ports.sort()

# Mostrando apenas portas TCP
for port in only_tcp_listening_ports:
    print(f"TCP port = {port} Open")

print("\n")

#Mostrando apenas portas UDP
for port in only_udp_listening_ports:
    print(f"UDP port = {port} Open")

Executando o programa para mostrar as portas TCP e UDP

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_tcp_udp.py

Podemos verificar na figura acima que o programa mostrou as portas TCP e UDP que estão abertas em nossa máquina.

Verificando nosso programa em python

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 -nltu

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 -ntul” encontrou.

Como instalar netstat

Se você estiver em uma máquina Linux sem o netstat, você pode instalar com o comando abaixo.

sudo apt install net-tools

E posteriormente usar o comando abaixo.

netstat -nltu

Ou você pode usar o comando abaixo.

ss -ntul

Nesse caso, usando o comando ss também podemos ver as mesmas portas que nosso programa em python mostrou.

Veja mais:

Python: mostrar portas TCP abertas

Projeto para Portifólio: Sua primeira API com Python e MySQL

O que é protocolo de roteamento ?

Como funciona a camada de rede

O que é NAT ?

Livros Indicados:

E-Books de Redes e Segurança

Juliana Mascarenhas

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

Instalar Ubuntu VirtualBox

Vamos ensinar como instalar o Ubuntu no VirtualBox. Para isso, vamos realizar uma instalação simples…
Ler mais

Mais links relacionados ao assunto:

Protocolos TCP/IP

https://www.python.org/doc/