import sys
import os
import platform
from PyQt5 import QtWidgets, QtGui, QtCore
class ResetHostsApp(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.init_ui()
self.blocked_websites = []
def init_ui(self):
self.setWindowTitle('CGResetHost')
self.setFixedSize(600, 400)
self.setStyleSheet("background-color: #2e2e2e;")
title_label = QtWidgets.QLabel('CGResetHost', self)
title_label.setGeometry(100, 20, 400, 80)
title_label.setAlignment(QtCore.Qt.AlignCenter)
title_label.setStyleSheet("""
font-size: 36px;
font-weight: bold;
color: white;
padding: 10px;
""")
self.reset_button = QtWidgets.QPushButton('🔄 Hostları Sıfırla', self)
self.reset_button.setGeometry(50, 250, 130, 50)
self.reset_button.setStyleSheet("background-color: #007bff; color: white; font-size: 14px; font-weight: bold; border-radius: 5px;")
self.reset_button.clicked.connect(self.reset_hosts)
self.modify_button = QtWidgets.QPushButton('✏️ Hostları Düzenle', self)
self.modify_button.setGeometry(200, 250, 130, 50)
self.modify_button.setStyleSheet("background-color: #28a745; color: white; font-size: 14px; font-weight: bold; border-radius: 5px;")
self.modify_button.clicked.connect(self.modify_hosts)
self.block_button = QtWidgets.QPushButton('🚫 Site Engelle', self)
self.block_button.setGeometry(350, 250, 130, 50)
self.block_button.setStyleSheet("background-color: #dc3545; color: white; font-size: 14px; font-weight: bold; border-radius: 5px;")
self.block_button.clicked.connect(self.block_website)
self.unblock_button = QtWidgets.QPushButton('🔓 Site Engelini Kaldır', self)
self.unblock_button.setGeometry(150, 310, 300, 50)
self.unblock_button.setStyleSheet("background-color: #17a2b8; color: white; font-size: 14px; font-weight: bold; border-radius: 5px;")
self.unblock_button.clicked.connect(self.unblock_website)
self.info_label = QtWidgets.QLabel(self)
self.info_label.setGeometry(50, 200, 500, 30)
self.info_label.setStyleSheet("color: white; font-size: 12px; font-weight: bold;")
self.info_label.setAlignment(QtCore.Qt.AlignCenter)
def reset_hosts(self):
try:
reset_hosts_file()
self.info_label.setText("Hosts dosyası başarıyla sıfırlandı.")
except PermissionError:
self.info_label.setText("Yönetici izni gerekmektedir!")
except Exception as e:
self.info_label.setText(f"Hata: {str(e)}")
def modify_hosts(self):
hosts_path = get_hosts_path()
try:
website, ok = QtWidgets.QInputDialog.getText(self, 'Host Düzenleme', 'Düzenlemek istediğiniz websiteyi girin:')
if ok and website:
new_entry, ok2 = QtWidgets.QInputDialog.getText(self, 'Yeni Host', 'Yeni IP adresi girin (örneğin 127.0.0.1):')
if ok2 and new_entry:
with open(hosts_path, "r") as file:
lines = file.readlines()
with open(hosts_path, "w") as file:
for line in lines:
if website in line:
file.write(f"{new_entry} {website}\n")
else:
file.write(line)
flush_dns_cache()
self.info_label.setText(f"{website} başarıyla güncellendi.")
else:
self.info_label.setText("Geçersiz IP adresi.")
else:
self.info_label.setText("Website ismi girilmedi.")
except Exception as e:
self.info_label.setText(f"Hata: {str(e)}")
def block_website(self):
hosts_path = get_hosts_path()
try:
website, ok = QtWidgets.QInputDialog.getText(self, 'Website Bloklama', 'Bloklamak istediğiniz websiteyi girin:')
if ok and website:
with open(hosts_path, "a") as file:
file.write(f"\n127.0.0.1 {website} # Rhanta Remove Host tarafından bloklandı.")
self.blocked_websites.append(website)
flush_dns_cache()
self.info_label.setText(f"{website} başarıyla engellendi.")
else:
self.info_label.setText("Website ismi girilmedi.")
except Exception as e:
self.info_label.setText(f"Hata: {str(e)}")
def unblock_website(self):
hosts_path = get_hosts_path()
try:
website, ok = QtWidgets.QInputDialog.getText(self, 'Website Engel Kaldırma', 'Engelini kaldırmak istediğiniz websiteyi girin:')
if ok and website:
with open(hosts_path, "r") as file:
lines = file.readlines()
with open(hosts_path, "w") as file:
for line in lines:
if website not in line:
file.write(line)
flush_dns_cache()
self.info_label.setText(f"{website} engel kaldırıldı.")
if website in self.blocked_websites:
self.blocked_websites.remove(website)
else:
self.info_label.setText("Website ismi girilmedi.")
except Exception as e:
self.info_label.setText(f"Hata: {str(e)}")
def get_hosts_path():
system = platform.system()
if system == "Windows":
return r"C:\Windows\System32\drivers\etc\hosts"
elif system == "Linux" or system == "Darwin":
return "/etc/hosts"
else:
raise Exception(f"{system} işletim sistemi desteklenmiyor!")
def reset_hosts_file():
default_hosts_content = """# Copyright (c) 1993-2009 Microsoft Corp.
#
# Bu, Microsoft TCP/IP için kullanılan bir örnek HOSTS dosyasıdır.
#
# Bu dosya, IP adreslerinin host adlarına eşlendiği içerikleri barındırır. Her
# giriş ayrı bir satırda tutulmalıdır. IP adresi ilk sütuna yerleştirilmelidir
# ve ardından karşılık gelen host adı gelmelidir. IP adresi ve host adı en az bir
# boşlukla ayrılmalıdır.
#
# Ayrıca, bu dosyada (bu şekilde) bireysel satırlara veya '#' sembolüyle
# belirtilen makine adı sonrasında yorumlar eklenebilir.
#
# Örneğin:
#
# 102.54.94.97 rhino.acme.com # kaynak sunucu
# 38.25.63.10 x.acme.com # x istemci hostu
#
# localhost adı çözümlemesi DNS ile işlenir.
# 127.0.0.1 localhost
# ::1 localhost
"""
hosts_path = get_hosts_path()
with open(hosts_path, "w") as file:
file.write(default_hosts_content)
def flush_dns_cache():
system = platform.system()
if system == "Windows":
os.system("ipconfig /flushdns")
elif system == "Linux":
os.system("sudo systemctl restart systemd-resolved")
elif system == "Darwin":
os.system("sudo killall -HUP mDNSResponder")
print("DNS önbelleği temizlendi.")
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
reset_app = ResetHostsApp()
reset_app.show()
sys.exit(app.exec_())