-
Notifications
You must be signed in to change notification settings - Fork 0
/
open-close-port-scan-3.py
121 lines (97 loc) · 4.69 KB
/
open-close-port-scan-3.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import subprocess
import tkinter as tk
from tkinter import filedialog, messagebox
import os
import datetime
# Função para varrer e exibir as portas abertas junto com os programas
def varrer_portas():
try:
# Comando para listar as regras de firewall do Windows
result = subprocess.run(['netsh', 'advfirewall', 'firewall', 'show', 'rule', 'name=all'], capture_output=True, text=True)
regras = result.stdout
# Limpar a lista antes de exibir as novas portas e programas
lista_portas.delete(0, tk.END)
programa = ''
porta_tcp = 'N/A'
porta_udp = 'N/A'
# Percorrer as regras linha por linha
for linha in regras.splitlines():
# Verificar se a linha contém o caminho do programa
if "Program:" in linha:
programa = linha.split(":")[1].strip()
# Verificar portas TCP e UDP
if "LocalPort" in linha and "TCP" in linha:
porta_tcp = linha.split(":")[1].strip()
elif "LocalPort" in linha and "UDP" in linha:
porta_udp = linha.split(":")[1].strip()
# Se tivermos programa e porta, exibir as informações
if programa and (porta_tcp != 'N/A' or porta_udp != 'N/A'):
entrada = f"{programa} + UDP: {porta_udp} + TCP: {porta_tcp}"
lista_portas.insert(tk.END, entrada)
log(entrada)
# Resetar variáveis para a próxima entrada
programa = ''
porta_tcp = 'N/A'
porta_udp = 'N/A'
except Exception as e:
messagebox.showerror("Erro", f"Ocorreu um erro: {e}")
# Função para registrar no log
def log(mensagem):
if log_pasta:
log_file = os.path.join(log_pasta, "log_firewall.txt")
with open(log_file, 'a') as f:
f.write(mensagem + '\n')
# Função para definir o caminho do log
def definir_caminho_log():
global log_pasta
log_pasta = filedialog.askdirectory()
entrada_log.delete(0, tk.END)
entrada_log.insert(0, log_pasta)
# Função para abrir uma porta no firewall
def abrir_porta():
porta = entrada_porta.get()
if porta:
subprocess.run(['netsh', 'advfirewall', 'firewall', 'add', 'rule', f'name=AbrirPorta{porta}', 'protocol=TCP', f'localport={porta}', 'action=allow'], capture_output=True, text=True)
subprocess.run(['netsh', 'advfirewall', 'firewall', 'add', 'rule', f'name=AbrirPorta{porta}', 'protocol=UDP', f'localport={porta}', 'action=allow'], capture_output=True, text=True)
messagebox.showinfo("Sucesso", f"Porta {porta} aberta no firewall.")
varrer_portas()
# Função para fechar uma porta no firewall
def fechar_porta():
porta = entrada_porta.get()
if porta:
subprocess.run(['netsh', 'advfirewall', 'firewall', 'delete', 'rule', f'name=AbrirPorta{porta}', 'protocol=TCP', f'localport={porta}'], capture_output=True, text=True)
subprocess.run(['netsh', 'advfirewall', 'firewall', 'delete', 'rule', f'name=AbrirPorta{porta}', 'protocol=UDP', f'localport={porta}'], capture_output=True, text=True)
messagebox.showinfo("Sucesso", f"Porta {porta} fechada no firewall.")
varrer_portas()
# Função para sair do programa
def sair_programa():
janela.quit()
# Criação da janela principal
janela = tk.Tk()
janela.title("Firewall do Windows - Portas Abertas e Programas")
janela.geometry("600x500")
log_pasta = ''
# Lista para exibir as portas abertas com os programas
lista_portas = tk.Listbox(janela, width=80, height=15)
lista_portas.pack(pady=10)
# Caixa de texto para definir o caminho do log
entrada_log = tk.Entry(janela, width=50)
entrada_log.pack(pady=5)
botao_caminho_log = tk.Button(janela, text="Escolher Caminho do Log", command=definir_caminho_log)
botao_caminho_log.pack(pady=5)
# Caixa de texto para especificar a porta
entrada_porta = tk.Entry(janela, width=15)
entrada_porta.pack(pady=5)
# Botões para abrir, fechar, varrer, atualizar e sair
botao_abrir_porta = tk.Button(janela, text="Abrir Porta", command=abrir_porta)
botao_abrir_porta.pack(side=tk.LEFT, padx=10, pady=10)
botao_fechar_porta = tk.Button(janela, text="Fechar Porta", command=fechar_porta)
botao_fechar_porta.pack(side=tk.LEFT, padx=10, pady=10)
botao_varrer = tk.Button(janela, text="Varrer", command=varrer_portas)
botao_varrer.pack(side=tk.LEFT, padx=10, pady=10)
botao_atualizar = tk.Button(janela, text="Atualizar", command=varrer_portas)
botao_atualizar.pack(side=tk.LEFT, padx=10, pady=10)
botao_sair = tk.Button(janela, text="Sair", command=sair_programa)
botao_sair.pack(side=tk.RIGHT, padx=10, pady=10)
# Inicializar a janela
janela.mainloop()