import tkinter as tk
from tkinter import ttk, messagebox, filedialog
import random
import threading
from datetime import datetime
import csv
class ProxyGeneratorApp:
def __init__(self, root):
self.root = root
self.root.title('🌐 Proxy Generator - youmean25 | Light/Dark Mode')
self.root.geometry('1100x800')
self.generated_proxies = []
self.dark_mode = False
self.colors = {'light': {'bg': '#f0f4ff', 'header_bg': '#0066ff', 'header_fg': 'white', 'text': '#000000', 'primary': '#0066ff', 'secondary': '#e6f2ff', 'accent': '#0099ff'}, 'dark': {'bg': '#1a1a2e', 'header_bg': '#16213e', 'header_fg': '#e0e0ff', 'text': '#ffffff', 'primary': '#7c3aed', 'secondary': '#2d1b4e', 'accent': '#c77dff'}}
self.show_welcome_screen()
def get_colors(self):
return self.colors['dark' if self.dark_mode else 'light']
def clear_screen(self):
for w in list(self.root.winfo_children()):
w.destroy()
def show_welcome_screen(self):
"""Hoşgeldiniz Ekranı"""
self.clear_screen()
colors = self.get_colors()
self.root.configure(bg=colors['bg'])
main = tk.Frame(self.root, bg=colors['bg'])
main.pack(fill=tk.BOTH, expand=True)
theme_btn_frame = tk.Frame(self.root, bg=colors['bg'])
theme_btn_frame.pack(fill=tk.X, padx=20, pady=10)
theme_text = '🌙 Dark Mode' if not self.dark_mode else '☀️ Light Mode'
tk.Button(theme_btn_frame, text=theme_text, command=self.toggle_theme, bg=colors['primary'], fg=colors['header_fg'], font=('Arial', 10, 'bold'), padx=20, pady=8, cursor='hand2', bd=0).pack(side=tk.RIGHT)
tk.Frame(main, bg=colors['bg'], height=30).pack()
tk.Label(main, text='👋', bg=colors['bg'], font=('Arial', 100)).pack()
tk.Label(main, text='Hoşgeldiniz youmean25!', bg=colors['bg'], fg=colors['primary'], font=('Arial', 32, 'bold')).pack(pady=20)
tk.Label(main, text='🌐 Proxy Generator v1.0\n📊 4 Proxy Türü Desteği', bg=colors['bg'], fg=colors['accent'], font=('Arial', 14)).pack()
tk.Label(main, text='HTTP • HTTPS • SOCKS4 • SOCKS5\n\nMüthiş bir proxy generator deneyimi için hazır mısın?', bg=colors['bg'], fg=colors['text'], font=('Arial', 12), justify=tk.CENTER).pack(pady=40)
btn = tk.Button(main, text='🚀 BAŞLAYALIM!', command=self.show_generator_screen, bg=colors['primary'], fg=colors['header_fg'], font=('Arial', 16, 'bold'), padx=50, pady=20, cursor='hand2', activebackground=colors['accent'], bd=0)
btn.pack(pady=50)
tk.Label(self.root, text='💙 youmean25 için özel olarak yapıldı | Light/Dark Mode', bg=colors['bg'], fg=colors['accent'], font=('Arial', 10)).pack(side=tk.BOTTOM, pady=20)
def show_generator_screen(self):
"""Ana Ekran"""
self.clear_screen()
colors = self.get_colors()
self.root.configure(bg=colors['bg'])
header = tk.Frame(self.root, bg=colors['header_bg'])
header.pack(fill=tk.X)
header_inner = tk.Frame(header, bg=colors['header_bg'])
header_inner.pack(fill=tk.X, padx=20, pady=10)
tk.Label(header_inner, text='🌐 Proxy Generator | 👀 youmean25', bg=colors['header_bg'], fg=colors['header_fg'], font=('Arial', 14, 'bold')).pack(side=tk.LEFT)
theme_text = '🌙 Dark' if not self.dark_mode else '☀️ Light'
tk.Button(header_inner, text=theme_text, command=self.toggle_theme, bg=colors['primary'], fg=colors['header_fg'], font=('Arial', 10, 'bold'), padx=15, pady=5, cursor='hand2', bd=0).pack(side=tk.RIGHT)
stats = tk.Frame(self.root, bg=colors['secondary'])
stats.pack(fill=tk.X, padx=10, pady=10)
tk.Label(stats, text='📊 İSTATİSTİKLER', bg=colors['secondary'], fg=colors['primary'], font=('Arial', 11, 'bold')).pack(anchor=tk.W, padx=10, pady=5)
stat_row = tk.Frame(stats, bg=colors['secondary'])
stat_row.pack(fill=tk.X, padx=15, pady=10)
self.label_total = tk.Label(stat_row, text='📋 Toplam: 0', bg=colors['secondary'], fg=colors['primary'], font=('Arial', 10, 'bold'))
self.label_total.pack(side=tk.LEFT, padx=15)
self.label_http = tk.Label(stat_row, text='🔵 HTTP: 0', bg=colors['secondary'], fg='#0099ff', font=('Arial', 10, 'bold'))
self.label_http.pack(side=tk.LEFT, padx=15)
self.label_https = tk.Label(stat_row, text='🟢 HTTPS: 0', bg=colors['secondary'], fg='#00aa00', font=('Arial', 10, 'bold'))
self.label_https.pack(side=tk.LEFT, padx=15)
self.label_socks4 = tk.Label(stat_row, text='🟡 SOCKS4: 0', bg=colors['secondary'], fg='#ffaa00', font=('Arial', 10, 'bold'))
self.label_socks4.pack(side=tk.LEFT, padx=15)
self.label_socks5 = tk.Label(stat_row, text='🟣 SOCKS5: 0', bg=colors['secondary'], fg='#aa00ff', font=('Arial', 10, 'bold'))
self.label_socks5.pack(side=tk.LEFT, padx=15)
settings = tk.Frame(self.root, bg=colors['bg'])
settings.pack(fill=tk.X, padx=10, pady=10)
tk.Label(settings, text='⚙️ AYARLAR', bg=colors['bg'], fg=colors['primary'], font=('Arial', 11, 'bold')).pack(anchor=tk.W, padx=5, pady=5)
type_box = tk.Frame(settings, bg=colors['secondary'], relief=tk.RIDGE, bd=2)
type_box.pack(fill=tk.X, padx=10, pady=10)
tk.Label(type_box, text='🔧 PROXY TİPİ SEÇ (Tıklayarak seç):', bg=colors['secondary'], fg=colors['primary'], font=('Arial', 11, 'bold')).pack(anchor=tk.W, padx=15, pady=10)
cb_row = tk.Frame(type_box, bg=colors['secondary'])
cb_row.pack(fill=tk.X, padx=30, pady=10)
self.proxy_type_vars = {}
cb_colors = {'HTTP': '#0099ff', 'HTTPS': '#00aa00', 'SOCKS4': '#ffaa00', 'SOCKS5': '#aa00ff'}
for ptype, color in cb_colors.items():
var = tk.BooleanVar(value=True)
self.proxy_type_vars[ptype] = var
tk.Checkbutton(cb_row, text=f'{ptype} ✓', variable=var, bg=colors['secondary'], fg=color, selectcolor=colors['bg'], activebackground=colors['secondary'], font=('Arial', 12, 'bold'), cursor='hand2').pack(side=tk.LEFT, padx=20)
num_box = tk.Frame(settings, bg=colors['secondary'], relief=tk.RIDGE, bd=2)
num_box.pack(fill=tk.X, padx=10, pady=10)
tk.Label(num_box, text='📝 PROXY SAYISI VE PORT AYARLARI:', bg=colors['secondary'], fg=colors['primary'], font=('Arial', 11, 'bold')).pack(anchor=tk.W, padx=15, pady=10)
num_row = tk.Frame(num_box, bg=colors['secondary'])
num_row.pack(fill=tk.X, padx=30, pady=10)
tk.Label(num_row, text='📝 Kaç Proxy?', bg=colors['secondary'], fg=colors['text'], font=('Arial', 10, 'bold')).pack(side=tk.LEFT, padx=10)
self.count_var = tk.StringVar(value='100')
ttk.Spinbox(num_row, from_=1, to=10000, textvariable=self.count_var, width=10, font=('Arial', 10)).pack(side=tk.LEFT, padx=5)
tk.Label(num_row, text='📍 Port Min:', bg=colors['secondary'], fg=colors['text'], font=('Arial', 10, 'bold')).pack(side=tk.LEFT, padx=10)
self.port_min_var = tk.StringVar(value='80')
ttk.Spinbox(num_row, from_=1, to=65535, textvariable=self.port_min_var, width=10, font=('Arial', 10)).pack(side=tk.LEFT, padx=5)
tk.Label(num_row, text='Max:', bg=colors['secondary'], fg=colors['text'], font=('Arial', 10, 'bold')).pack(side=tk.LEFT, padx=10)
self.port_max_var = tk.StringVar(value='9999')
ttk.Spinbox(num_row, from_=1, to=65535, textvariable=self.port_max_var, width=10, font=('Arial', 10)).pack(side=tk.LEFT, padx=5)
btn_frame = tk.Frame(self.root, bg=colors['bg'])
btn_frame.pack(fill=tk.X, padx=10, pady=10)
btn_colors = {'🎲 OLUŞTUR': (colors['primary'], colors['header_fg']), '🗑️ TEMİZLE': ('#ff6600', 'white'), '💾 KAYDET': ('#00aa00', 'white'), '📋 KOPYALA': ('#aa00ff', 'white'), '👋 GERİ': ('#666666', 'white')}
commands = [self.generate_proxies, self.clear_proxies, self.export_proxies, self.copy_clipboard, self.show_welcome_screen]
for i, (text, (bg, fg)) in enumerate(btn_colors.items()):
tk.Button(btn_frame, text=text, command=commands[i], bg=bg, fg=fg, font=('Arial', 11, 'bold'), padx=20, pady=12, cursor='hand2', bd=0).pack(side=tk.LEFT, padx=5)
list_frame = tk.Frame(self.root, bg=colors['bg'])
list_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)
tk.Label(list_frame, text='📋 PROXY LİSTESİ', bg=colors['bg'], fg=colors['primary'], font=('Arial', 11, 'bold')).pack(anchor=tk.W)
scroll = ttk.Scrollbar(list_frame)
scroll.pack(side=tk.RIGHT, fill=tk.Y)
self.tree = ttk.Treeview(list_frame, columns=('No', 'IP:Port', 'Tip'), height=15, yscrollcommand=scroll.set)
scroll.config(command=self.tree.yview)
self.tree.column('No', width=40)
self.tree.column('IP:Port', width=250)
self.tree.column('Tip', width=150)
self.tree.heading('No', text='#')
self.tree.heading('IP:Port', text='🌐 IP:Port')
self.tree.heading('Tip', text='📊 Tip')
self.tree.pack(fill=tk.BOTH, expand=True)
style = ttk.Style()
style.theme_use('clam')
if self.dark_mode:
style.configure('Treeview', background='#2d1b4e', foreground='#ffffff', fieldbackground='#2d1b4e', font=('Arial', 9))
style.configure('Treeview.Heading', background='#3d2b5e', foreground='#c77dff', font=('Arial', 9, 'bold'))
style.map('Treeview', background=[('selected', '#5b3d8f')])
else:
style.configure('Treeview', background='#ffffff', foreground='#000000', fieldbackground='#ffffff', font=('Arial', 9))
style.configure('Treeview.Heading', background='#0066ff', foreground='white', font=('Arial', 9, 'bold'))
style.map('Treeview', background=[('selected', '#cce5ff')])
self.tree.tag_configure('http', foreground='#0099ff')
self.tree.tag_configure('https', foreground='#00aa00')
self.tree.tag_configure('socks4', foreground='#ffaa00')
self.tree.tag_configure('socks5', foreground='#aa00ff')
def toggle_theme(self):
"""Tema değiştir"""
self.dark_mode = not self.dark_mode
if self.root.winfo_children():
if len(self.root.winfo_children()) > 1:
self.show_generator_screen()
else:
self.show_welcome_screen()
def generate_proxies(self):
try:
count = int(self.count_var.get())
port_min = int(self.port_min_var.get())
port_max = int(self.port_max_var.get())
except:
messagebox.showerror('❌ Hata', 'Lütfen geçerli sayılar girin!')
return None
if count <= 0 or count > 10000:
messagebox.showwarning('⚠️ Uyarı', '1-10000 arasında bir sayı girin!')
return
else:
if port_min > port_max:
messagebox.showerror('❌ Hata', 'Min port Max port\'tan küçük olmalı!')
return
else:
selected = [t for t, v in self.proxy_type_vars.items() if v.get()]
if not selected:
messagebox.showwarning('⚠️ Uyarı', 'En az bir proxy tipi seçin!')
return
else:
self.generated_proxies = []
for item in self.tree.get_children():
self.tree.delete(item)
t = threading.Thread(target=self._worker, args=(count, port_min, port_max, selected))
t.daemon = True
t.start()
def _worker(self, count, port_min, port_max, selected):
# ***<module>.ProxyGeneratorApp._worker: Failure: Compilation Error
for i in range(count):
ip = f'{random.randint(1, 223)}.{random.randint(0, 255)}.{random.randint(0, 255)}.{random.randint(0, 255)}'
port = random.randint(port_min, port_max)
ptype = random.choice(selected)
proxy = f'{ip}:{port}'
self.generated_proxies.append((proxy, ptype))
self.root.after(0, lambda p, t=proxy, n=ptype, i=i + 1: self.tree.insert('', tk.END, values=(n, p, t), tags=(t.lower(),)))
self.root.after(0, self._update_stats)
self.root.after(0, lambda /: messagebox.showinfo('✅ Başarılı', f'🎉 {count} proxy oluşturuldu!'))
def _update_stats(self):
c = {'HTTP': 0, 'HTTPS': 0, 'SOCKS4': 0, 'SOCKS5': 0}
for _, t in self.generated_proxies:
c[t] += 1
self.label_total.config(text=f'📋 Toplam: {len(self.generated_proxies)}')
self.label_http.config(text=f"🔵 HTTP: {c['HTTP']}")
self.label_https.config(text=f"🟢 HTTPS: {c['HTTPS']}")
self.label_socks4.config(text=f"🟡 SOCKS4: {c['SOCKS4']}")
self.label_socks5.config(text=f"🟣 SOCKS5: {c['SOCKS5']}")
def clear_proxies(self):
if messagebox.askyesno('🗑️ Onayla', 'Tüm proxy\'leri silmek istiyorum misin?'):
self.generated_proxies = []
for item in self.tree.get_children():
self.tree.delete(item)
self._update_stats()
def export_proxies(self):
if not self.generated_proxies:
messagebox.showwarning('⚠️ Uyarı', 'Önce proxy oluşturun!')
return
else:
f = filedialog.asksaveasfilename(defaultextension='.txt', filetypes=[('Text', '*.txt'), ('CSV', '*.csv')])
if f:
try:
if f.endswith('.csv'):
with open(f, 'w', newline='', encoding='utf-8') as file:
w = csv.writer(file)
w.writerow(['IP:Port', 'Tip', 'Tarih'])
for p, t in self.generated_proxies:
w.writerow([p, t, datetime.now().strftime('%Y-%m-%d')])
else:
with open(f, 'w', encoding='utf-8') as file:
for p, t in self.generated_proxies:
file.write(f'{p} ({t})\n')
messagebox.showinfo('✅ Başarılı', f'💾 {len(self.generated_proxies)} proxy kaydedildi!')
except Exception as e:
messagebox.showerror('❌ Hata', str(e))
def copy_clipboard(self):
if not self.generated_proxies:
messagebox.showwarning('⚠️ Uyarı', 'Kopyalayacak proxy yok!')
return
else:
txt = '\n'.join([p for p, _ in self.generated_proxies])
self.root.clipboard_clear()
self.root.clipboard_append(txt)
self.root.update()
messagebox.showinfo('✅ Başarılı', f'📋 {len(self.generated_proxies)} proxy panoya kopyalandı!')
if __name__ == '__main__':
root = tk.Tk()
app = ProxyGeneratorApp(root)
root.mainloop()