Resolución de nombres de host sin modificar el archivo de hosts

Estoy tratando de averiguar cómo, si hay una manera de hacer que un nombre de host se resuelva en una determinada IP sin DNS o modificación del archivo de host.

Con C#, hago una solicitud del cliente al servidor, pero tengo que usar el nombre de host en la solicitud para que los certificados autentiquen correctamente la solicitud. Sin embargo, mi programa está diseñado para ejecutarse sin derechos de administrador, por lo que no puedo modificar el archivo de host. Tengo la IP y el nombre de host correctos, ¿hay alguna otra forma de hacer que la computadora resuelva el nombre de host en la IP?

preguntado el 11 de junio de 12 a las 19:06

¿Qué problema tiene el servidor DNS que utiliza la máquina que no resuelve el nombre de host automáticamente en la dirección IP correcta? -

El servidor no está en DNS, por lo que la resolución allí no es posible. -

4 Respuestas

Parece que la forma más sencilla de resolver esto es crear un servicio con los derechos para modificar el archivo host y luego invocar ese servicio desde el programa principal. El servicio ejecuta un solo comando y sale. Dado que un servicio puede tener un estado elevado, básicamente puede encapsular los derechos de administrador dentro de un programa de usuario estándar.

Respondido el 11 de junio de 12 a las 21:06

Si está realizando una solicitud HTTP, entonces no necesita resolver el nombre de host; use la dirección IP en la URL y pase el encabezado del host en su solicitud HTTP.

Propiedad HttpWebRequest.Host

Actualización: lo siento, no vi los requisitos de los certificados. Creo que debería poder modificar el archivo de hosts durante la instalación (porque la instalación generalmente ocurre bajo derechos de administrador). Agregue el nombre de host que le interesa para que apunte a 127.0.0.1 (equipo local). Luego, su aplicación puede abrir un socket de escucha y actuar como un proxy, canalizando los datos al servidor web real. Esto puede o no funcionar dependiendo de que el cliente tenga un firewall habilitado.

Respondido el 11 de junio de 12 a las 19:06

Si lo hace, la validación del certificado SSL fallará porque el nombre en el certificado probablemente tenga un nombre DNS real, que no coincidirá con la IP utilizada en el Host propiedad. Esto es lo que está tratando de evitar. - CodificaciónGorilla

Estoy usando RasDial para hacer una conexión, por lo que parece (no soy un experto en RAS) que puedo dar un "número de teléfono" que es una IP o un nombre de host. La certificación de la conexión no funcionará a menos que use el nombre de host como número de teléfono. - Cannoliopsida

Hacerlo durante la instalación no funciona (tan directo), porque tengo que solicitar la IP y el nombre de host de una fuente externa durante la ejecución del programa. Fue entonces cuando me di cuenta de la solución (la publiqué como respuesta); una vez que tengo toda la información necesaria, creo un segundo servicio y hago las cosas de administración allí (puede hacerlo en la instalación o en la ejecución, dependiendo de si es o no un servicio de red o qué). - Cannoliopsida

   public bool ModifyHostsFile(string sEntryIPAddr, string sEntryURL)
    {
        try
        {
            using (StreamWriter w = File.AppendText(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), @"drivers\etc\hosts")))
            {
                w.WriteLine(sEntryIPAddr+" "+ sEntryURL);
                return true;
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            return false;
        }
    }

Respondido 21 Oct 16, 06:10

Agregue una explicación de por qué este código ayuda al OP. Esto ayudará a proporcionar una respuesta de la que los futuros espectadores puedan aprender. Ver Cómo responder para más información. - Mono hereje

OP no quiere modificar el archivo de hosts - ray henry

esto funcionó para mí:

Paso 1. Abra el menú de inicio de Windows, busque la aplicación de bloc de notas y luego haga clic con el botón derecho en el icono del bloc de notas.

Paso 2. Elija "Ejecutar como administrador" y luego, dentro del bloc de notas, busque la carpeta (/windows/system32/drivers/etc) que contiene el archivo hosts.

Respondido el 13 de Septiembre de 12 a las 02:09

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.