Иногда возникает необходимость внести изменения в файл hosts в Windows. Вместе с этой потребностью родилась идея создать небольшую утилиту на Python, которая бы упростила процесс редактирования этого файла. В результате появился WindowsHostsManager — инструмент, созданный всего за 30 минут и предназначенный для удобного управления файлом hosts.
Описание программы
WindowsHostsManager — это простая консольная утилита, написанная на Python с использованием стандартных библиотек (os, sys, ctypes и shutil). Она предназначена исключительно для Windows и позволяет добавлять, удалять и просматривать записи в файле hosts, а также создавать резервные копии и восстанавливать файл из них.
Основные команды
add <IP> <hostname> — Добавить запись в файл hosts. Пример:
add 127.0.0.1 example.comremove — Удалить запись по имени хоста. Пример:
remove example.comlist — Показать все текущие записи в файле hosts.
backup — Создать резервную копию файла hosts.
restore — Восстановить файл hosts из резервной копии.
clear — Очистить экран терминала.
help — Показать список доступных команд.
exit — Выйти из программы.
Примеры использования
Добавление записи:
Enter command: add 127.0.0.1 example.com Вывод: Added: 127.0.0.1 example.com
Удаление записи:
Enter command: remove example.com Вывод: Removed entries for: example.com
Просмотр всех записей:
Enter command: list Вывод: Current entries in hosts file: 127.0.0.1 localhost 127.0.0.1 example.com
Создание резервной копии:
Enter command: backup Вывод: Backup created: C:\Windows\System32\drivers\etc\hosts.back
Восстановление файла:
Enter command: restore Вывод: Are you sure you want to restore the hosts file from backup? (yes/no): yes Hosts file restored from backup: C:\Windows\System32\drivers\etc\hosts.back
Важные замечания
Программа WindowsHostsManager автоматически запускается с правами администратора, поскольку для внесения изменений в файл hosts требуется наличие привилегий. В противном случае, программа перезапустится с запросом прав администратора.
Отличия от аналогов
Так как я сначала делаю, а потом думаю, то после проделанной работы я нашёл аналогичные программы. Первая — это HostsMan, вторая — Hosts Manager. Отличие моей программы от этих двух в том, что они имеют графический интерфейс (GUI), а моя утилита является чисто консольной.
Код программы
Программа написан�� всего за 30 минут, но уже обладает всеми необходимыми функциями для базового управления файлом hosts.
import os import sys import ctypes import shutil HOSTS_PATH = r'C:\Windows\System32\drivers\etc\hosts' BACKUP_PATH = HOSTS_PATH + '.back' def is_admin(): try: return os.getuid() == 0 except AttributeError: return ctypes.windll.shell32.IsUserAnAdmin() != 0 def read_hosts(): with open(HOSTS_PATH, 'r') as file: return file.readlines() def write_hosts(lines): with open(HOSTS_PATH, 'w') as file: file.writelines(lines) def add_entry(ip, hostname): lines = read_hosts() entry = f"{ip} {hostname}\n" if entry not in lines: lines.append(entry) write_hosts(lines) print(f"Added: {entry.strip()}") else: print(f"Entry already exists: {entry.strip()}") def remove_entry(hostname): lines = read_hosts() lines = [line for line in lines if not line.endswith(f"{hostname}\n")] write_hosts(lines) print(f"Removed entries for: {hostname}") def list_entries(): lines = read_hosts() if lines: print("Current entries in hosts file:") for line in lines: print(line.strip()) else: print("No entries found in the hosts file.") def print_help(): print("Commands:") print(" add - Add an entry (e.g., add <IP> <hostname>)") print(" remove - Remove an entry (e.g., remove <hostname>)") print(" list - List all entries in the hosts file") print(" backup - Create a backup of the hosts file") print(" restore - Restore the hosts file from backup") print(" clear - Clear the terminal screen") print(" help - Show this help message") print(" exit - Exit the application") def clear_screen(): os.system('cls' if os.name == 'nt' else 'clear') def backup_hosts(): try: shutil.copy2(HOSTS_PATH, BACKUP_PATH) print(f"Backup created: {BACKUP_PATH}") except IOError as e: print(f"Failed to create backup: {e}") def restore_hosts(): if os.path.exists(BACKUP_PATH): confirm = input("Are you sure you want to restore the hosts file from backup? (yes/no): ").strip().lower() if confirm == 'yes': try: shutil.copy2(BACKUP_PATH, HOSTS_PATH) print(f"Hosts file restored from backup: {BACKUP_PATH}") except IOError as e: print(f"Failed to restore hosts file: {e}") else: print("Restore operation canceled.") else: print("No backup file found.") def main(): while True: print("Enter command:", end=' ') command = input().strip().lower() if command.startswith('add'): _, ip, hostname = command.split(maxsplit=2) add_entry(ip, hostname) elif command.startswith('remove'): _, hostname = command.split(maxsplit=1) remove_entry(hostname) elif command == 'list': list_entries() elif command == 'backup': backup_hosts() elif command == 'restore': restore_hosts() elif command == 'help': print_help() elif command == 'clear': clear_screen() elif command == 'exit': print("Exiting the application...") break else: print("Invalid command. Type 'help' for a list of commands.") if __name__ == "__main__": if not is_admin(): print("This script needs to be run with administrator privileges.") ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, " ".join(sys.argv), None, 1) else: main()
Репозиторий на GitHub
Исходный код утилиты WindowsHostsManager доступен в моём репозитории на GitHub. Вы можете скачать, протестировать и при необходимости изменить код под свои нужды. Буду рад, если оставите свои предложения или улучшения в разделе issues или pull requests.
Эта утилита — отличный пример того, как Python позволяет создавать простые, но эффективные инструменты для решения повседневных задач.
