Как я могу изменить файл hosts в программе Windows? - PullRequest
7 голосов
/ 30 июня 2011

Как программа в C ++ / C / C # программе изменит содержимое файла C:\Windows\System32\drivers\etc\hosts в Windows?Я знаю, это звучит как фишинг, если честно, нет.

Ответы [ 6 ]

12 голосов
/ 30 июня 2011

Файл Hosts имеет очень простой формат, в котором каждая строка может содержать записи «ip host».

Все, что вам нужно, это добавление обычного файла:

using (StreamWriter w = File.AppendText(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "drivers/etc/hosts")))
{
    w.WriteLine("123.123.123.123 FQDN");
}

Остерегайтесь того, что по умолчаниюнужны повышенные привилегии для записи в файл hosts ...

Чтобы вернуться обратно, лучше сделайте резервную копию файла и восстановите его, как только закончите.

11 голосов
/ 30 июня 2011

Сначала вы должны запросить административного разрешения от пользователя.Вы можете сделать это через класс вашей программы в вашем приложении.Приведенный ниже код запросит у пользователя административный доступ, после чего у пользователя будет возможность разрешить или запретить его.Если они это отрицают, в этом примере приложение не запускается.

После запуска приложения в административном режиме его обычный текст с простым форматированием.Вам даже не нужны все комментарии Microsoft, включенные в файл, и простой синтаксический анализ строки будет работать хорошо.Комментарии MSFT в файле HOSTS - это вся документация, которая вам действительно нужна для самого файла HOSTS.

namespace Setup {
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Windows.Forms;
    using Setup.Forms;
    using System.Security.Principal;
    using System.Diagnostics;

    static class Program {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main() {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            WindowsPrincipal principal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
            bool administrativeMode = principal.IsInRole(WindowsBuiltInRole.Administrator);

            if (!administrativeMode) {
                ProcessStartInfo startInfo = new ProcessStartInfo();
                startInfo.Verb = "runas";
                startInfo.FileName = Application.ExecutablePath;
                try {
                    Process.Start(startInfo);
                }
                catch {
                    return;
                }
                return;
            }

            Application.Run(new ShellForm());
        }
    }
}
9 голосов
/ 30 июня 2011

Файл обычно находится в C:\Windows\System32\drivers\etc\hosts.Вместо жесткого кодирования части C:\Windows вы должны использовать Environment.GetEnvironmentVariable("SystemRoot") для безопасного определения корневого каталога системы.

В противном случае вы можете записывать в него, как и любой другой файл, при условии, что у вас есть соответствующие разрешения.1006 *

4 голосов
/ 30 июня 2011

Файл hosts - это просто текст.Формат каждой строки содержит IP-адрес и имя хоста, к которому должен обращаться IP-адрес, разделенные пробелом.# обозначает комментарий.

Пример:

# This is a comment-
127.0.0.1    mysuperhost.com

Файл находится здесь: C:\Windows\system32\drivers\etc\hosts.Вам (по уважительной причине) потребуются права администратора для записи в него.

3 голосов
/ 20 июня 2013

Самый точный способ определить местоположение файла HOSTS - прочитать ключ реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DataBasePath и добавить hosts в конец.

Это всегда будет указывать на правильное местоположение для текущей конфигурации машины и работает для всех платформ на базе Windows NT начиная с Windows NT 4.0.

1 голос
/ 12 августа 2015

Как парень, который боролся с этой проблемой, легко выходите, скопируйте файл hosts во временную папку, измените его и скопируйте обратно с перезаписью.Запуск приложения от имени администратора, будет лучшим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...