Python ile URL Disabler (url engelleyici) Uygulaması

Merhabalar,URL Engelleme Uygulaması Yapacağız. Platformlar Arası Uyumlu URL Engelleme ve Engellemeyi Kaldırma Gibi Özellikleri Olacak. (Github) (My Blog)

Windows Ekran Görüntüsü:
url_windows

Linux Ekran Görüntüsü
url_linux

Gerekli Kütüphaneler.

Tkinter

$ sudo apt-get install python3-tk

ttkthemes

$ pip install ttkthemes

Kodlamaya Başlayalım

py Dosyamızı Oluşturalım

$ touch url.py

py Dosyamızı Düzenleyelim

$ nano url.py

Kodları Yazalım

import ctypes
import sys
import os
import platform
import tkinter as tk
from tkinter import ttk, messagebox
from ttkthemes import ThemedTk  # Tema desteği

# Yönetici izinleri kontrolü
def check_admin():
    system_platform = platform.system()
    if system_platform == 'Windows':
        try:
            if ctypes.windll.shell32.IsUserAnAdmin() != 1:
                ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, " ".join(sys.argv), None, 1)
                sys.exit()
        except Exception as e:
            messagebox.showerror("Hata", f"Yönetici izinleri alınamadı: {e}")
            sys.exit()
    elif system_platform in ['Linux', 'Darwin']:
        if os.geteuid() != 0:
            messagebox.showerror("Hata", "Bu uygulama yönetici (sudo) izni gerektiriyor.")
            sys.exit()

# URL engelleme işlemi
def block_url():
    url = url_entry.get()
    if not url:
        messagebox.showwarning("Hata", "Bir URL girin!")
        return

    system_platform = platform.system()
    hosts_path = ""
    redirect = "127.0.0.1"

    if system_platform == 'Windows':
        hosts_path = r"C:\Windows\System32\drivers\etc\hosts"
    elif system_platform in ['Darwin', 'Linux']:
        hosts_path = "/etc/hosts"

    try:
        with open(hosts_path, "r+") as file:
            lines = file.readlines()
            if any(url in line for line in lines):
                messagebox.showinfo("Bilgi", f"{url} zaten engellenmiş.")
                return

            file.write(f"\n{redirect} {url}")
        
        listbox.insert(tk.END, url)
        with open("engellenen_url.txt", "a") as f:
            f.write(f"{url}\n")
        messagebox.showinfo("Başarılı", f"{url} başarıyla engellendi.")
    except PermissionError:
        messagebox.showerror("Hata", "Yazma izniniz yok. Yönetici izinleri gerekebilir.")
    except Exception as e:
        messagebox.showerror("Hata", f"Hata oluştu: {e}")

# URL kaldırma işlemi
def unblock_url():
    try:
        selected_url = listbox.get(listbox.curselection())  # Listbox'dan seçilen URL
    except IndexError:
        messagebox.showwarning("Hata", "Kaldırmak için bir URL seçin!")
        return

    system_platform = platform.system()
    hosts_path = ""

    if system_platform == 'Windows':
        hosts_path = r"C:\Windows\System32\drivers\etc\hosts"
    elif system_platform in ['Darwin', 'Linux']:
        hosts_path = "/etc/hosts"

    try:
        with open(hosts_path, "r") as file:
            lines = file.readlines()

        with open(hosts_path, "w") as file:
            for line in lines:
                if selected_url not in line:
                    file.write(line)

        # Listbox ve dosyadan URL'yi kaldır
        listbox.delete(listbox.curselection())
        if os.path.exists("engellenen_url.txt"):
            with open("engellenen_url.txt", "r") as f:
                urls = f.readlines()
            with open("engellenen_url.txt", "w") as f:
                for line in urls:
                    if selected_url not in line.strip("\n"):
                        f.write(line)
        messagebox.showinfo("Başarılı", f"{selected_url} başarıyla kaldırıldı.")
    except PermissionError:
        messagebox.showerror("Hata", "Yazma izniniz yok. Yönetici izinleri gerekebilir.")
    except Exception as e:
        messagebox.showerror("Hata", f"Hata oluştu: {e}")

# Engellenen URL'leri yükle
def load_blocked_urls():
    if os.path.exists("engellenen_url.txt"):
        with open("engellenen_url.txt", "r") as file:
            for line in file:
                listbox.insert(tk.END, line.strip())

# Yönetici kontrolü
check_admin()

# GUI Tasarımı
root = ThemedTk(theme="arc")
root.title("URL Disabler")
root.geometry("500x400")

url_label = ttk.Label(root, text="Engellemek veya kaldırmak istediğiniz URL'yi girin:")
url_label.pack(pady=10)

url_entry = ttk.Entry(root, width=50)
url_entry.pack(pady=5)

block_button = ttk.Button(root, text="URL'yi Engelle", command=block_url)
block_button.pack(pady=10)

unblock_button = ttk.Button(root, text="URL'yi Kaldır", command=unblock_url)
unblock_button.pack(pady=10)

listbox_label = ttk.Label(root, text="Engellenen URL'ler:")
listbox_label.pack(pady=10)

listbox = tk.Listbox(root, width=60, height=10)
listbox.pack(pady=5)

# Engellenen URL'leri yükle
load_blocked_urls()

root.mainloop()

Kayıt Edelim

CTRL + O
CTRL + X

Doğrudan Çalıştırmak İçin

$ python3 url.py

Derlemek İçin

Linux Terminal

$ pyinstaller --onefile --windowed url.py

Windows VSCode Terminal

$ pyinstaller --onefile --noconsole url.py

MacOS VSCode Terminal

$ pyinstaller --onefile --noconsole url.py

NOT: Derlemek İçin pyinstaller Kurulu Olmalıdır.
Kurmak İçin:
$ pip install pyinstaller

Saygılar

6 Beğeni

Hocam seri üretime geçtin maşallah :rofl:

4 Beğeni

Biraz Boş Vaktim Vardı Faydalı Olayım Dedim. :sweat_smile:

4 Beğeni

merhabalar küçük bir tavsiye verebilirmiyim engellenenler ve izin verilenler diye 2 tane messagebox eklense daha olmazmı hangisini engelledik hangisine izin verdik daha rahat görmek için.

5 Beğeni

Merhaba, Elbette Mümkün hatta daha da şık durur, fakat burdaki mantık zaten engellenenler listede gözüküyor engeli kaldırdığınızda listeden siliniyor.
biraz basit mantık kullandım

3 Beğeni