2011-06-29 4 views
8

¿cómo cambiaría un programa en el programa C++/C/C# el contenido de los archivos hosts en Windows? Sé que esto suena como phishing, sinceramente no.¿Cómo cambio el archivo de hosts en un programa de Windows?

+2

¿Qué significa "Su compromiso"? Además ... ¿por qué querrías hacer eso? –

+2

En inglés, por favor? – Jon

+0

no desea hacer eso, lea sobre el uso de DNS para resolver nombres de host – Alex

Respuesta

4

El archivo de hosts es simplemente texto sin formato. El formato en el que cada línea contiene la IP y el nombre de host que debería resolver la IP, separados por espacios en blanco. # denota un comentario.

Ejemplo:

# This is a comment- 
127.0.0.1 mysuperhost.com 

El archivo se encuentra aquí: C:\Windows\system32\drivers\etc\hosts. Deberá (con una buena razón) necesitar privilegios de administrador para escribir en él.

8

El archivo generalmente se encuentra en C:\Windows\System32\drivers\etc\hosts. Sin embargo, en lugar de codificar la parte C:\Windows, debe usar Environment.GetEnvironmentVariable("SystemRoot") para determinar de forma segura el directorio raíz del sistema.

De lo contrario, puede escribir en él como cualquier otro archivo, suponiendo que tenga los permisos adecuados.

10

archivo hosts tiene un formato muy sencillo en el que cada línea puede contener registros "anfitrión" ip

Todo lo que necesita es anexar archivo normal:

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

Ten presente que por defecto que necesita privilegios elevados para escribir en el archivo de hosts ...

Para revertir, mejor hacer una copia de seguridad del archivo y restaurarlo una vez que haya terminado.

+0

¿Cómo eliminar entradas cuando sea necesario? – Volatil3

11

En primer lugar, debe solicitar para el permiso administrativo del usuario. Puede hacer esto a través de su clase de Programa en su aplicación. El siguiente código solicitará al usuario acceso administrativo, luego el usuario tiene la opción de permitirlo o denegarlo. Si lo niegan, este ejemplo no ejecuta la aplicación.

Una vez que la aplicación se ejecuta en modo administrativo, es texto sin formato con formato simple. Ni siquiera necesita todos los comentarios de Microsoft incluidos en el archivo, y el simple análisis de cadenas le irá bien. Los comentarios de MSFT en el archivo HOSTS son toda la documentación que realmente necesita en lo que respecta al archivo HOSTS en sí.

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()); 
     } 
    } 
} 
+2

Tenga en cuenta que al copiar su código aquí se libera efectivamente en CC-Wiki. El bloque de derechos de autor no es efectivo.No estoy seguro de si desea eliminar el bloque de derechos de autor o la respuesta completa ... –

+0

Soy propietario de DCOM Productions y acabo de copiar todo el contenido del archivo para obtener una respuesta rápida. De cualquier manera, no importa, solo usarlo para darle un enfoque a su pregunta. Si no quisiera que él use el código, no lo habría publicado en absoluto. ;) –

+0

Bien. :) Simplemente no quería que, inadvertidamente, liberara su IP bajo una licencia menos restrictiva de lo que esperaba. –

3

La forma más precisa de encontrar la ubicación del archivo HOSTS es leer la clave HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DataBasePath registro, y añadiendo hosts hasta el final.

Esto siempre apuntará a la ubicación correcta para la configuración actual de la máquina y funciona para todas las plataformas basadas en Windows NT desde Windows NT 4.0.

+0

Lamentablemente esto no parece ser el caso con los sistemas operativos más modernos. Específicamente en Windows 7, si cambia el valor de DataBasePath, no usará la nueva ubicación. –

+2

Si cambiar el valor lo afecta (o si Microsoft incluso admite hacerlo) no es un problema. La cuestión era cómo editar el archivo de hosts actual, simplemente di la forma más confiable de encontrar dicho archivo. (Suponiendo que no ha estado jugando en el registro.) Para el propósito indicado, este método es válido desde Windows NT 4.0 hasta Windows 8.1 Update 1 –

0

Como un chico que luchó con este problema, salida fácil, copie el archivo de hosts a la carpeta temporal, modifíquelo y cópielo de nuevo con la sobrescritura. Ejecutar la aplicación como administrador, será lo mejor.

+0

... Esta respuesta es como ir a un foro de reparación de automóviles y diciéndole al OP, "La salida más fácil es comenzar a caminar a sus destinos en lugar de arreglar su automóvil". – Shadoninja

Cuestiones relacionadas