Scripter de Redes: Testando Portas Abertas em um IP com Python

Scripter de Redes: Testando Portas Abertas em um IP com Python

Verificar o status de portas de rede em um endereço IP é fundamental para diagnósticos de conectividade e auditorias básicas de segurança. Utilizando o módulo nativo socket do Python, você consegue testar a abertura de conexões TCP em portas específicas sem a necessidade de instalar bibliotecas externas.

Python
import socket

def escanear_portas(ip_alvo: str, portas: list) -> dict:
    resultados = {}
    
    # Percorre cada porta especificada na lista
    for porta in portas:
        # Cria um socket IPv4 (AF_INET) usando o protocolo TCP (SOCK_STREAM)
        with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
            # Define o tempo limite de espera em segundos para evitar travamentos
            s.settimeout(1.0)
            
            # connect_ex retorna 0 se a conexão for bem-sucedida (porta aberta)
            resultado = s.connect_ex((ip_alvo, porta))
            resultados[porta] = "Aberta" if resultado == 0 else "Fechada"
            
    return resultados

# Exemplo prático de uso
if __name__ == "__main__":
    ip = "127.0.0.1"  # Localhost para testes
    portas_para_testar = [21, 22, 80, 443, 8080]
    
    print(f"Iniciando escaneamento no IP: {ip}...")
    status_portas = escanear_portas(ip, portas_para_testar)
    
    for porta, status in status_portas.items():
        print(f"Porta {porta}: {status}")

Pontos-chave

  • Vantagem do connect_ex(): Diferente do método connect(), que lança uma exceção quando a conexão falha, o connect_ex() retorna diretamente um código de erro numérico (0 para sucesso), tornando o controle de fluxo mais limpo e rápido.

  • Configuração de Timeout (settimeout): Definir um tempo limite de resposta curto (ex: 1.0 segundo) é crítico para impedir que o script fique preso indefinidamente aguardando pacotes em portas filtradas por firewalls.

  • Sobrecarga de Redes (Uso Responsável): Executar um varredura sequencial em um número elevado de portas pode ser lento. Para listas grandes de portas, recomenda-se o uso de concorrência com threading ou asyncio.

  • Legalidade e Ética: Tentar abrir conexões TCP contra IPs ou infraestruturas sem autorização prévia pode ser interpretado como um ataque ou tentativa de invasão pelos sistemas de detecção de intrusão (IDS/IPS).

Comentários

Postagens mais visitadas deste blog

Gerando Relatórios em PDF com Python (ReportLab e FPDF)

Python para Computação Quântica: Introdução com Qiskit

C# e Banco de Dados: Como Conectar e Realizar Operações com SQL Server