Иногда возникает необходимость внести изменения в файл 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 позволяет создавать простые, но эффективные инструменты для решения повседневных задач.
