2012-06-11 20 views
5

Estoy tratando de averiguar cómo 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.Resolución del nombre de host sin modificar el archivo de hosts

Usando C#, estoy realizando una solicitud de cliente a 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á destinado a ejecutarse sin derechos de administrador, por lo que no puedo modificar el archivo de host. Tengo la IP correcta y el nombre de host, ¿hay alguna otra forma de que la computadora resuelva el nombre de host en la IP?

+1

¿Qué hay de malo en el servidor DNS de la máquina está utilizando que no es resolver el nombre de host automáticamente a la IP correcta? – cadrell0

+0

El servidor no está en DNS, por lo que la resolución no es posible. – akroy

Respuesta

2

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

0

Respuesta simple: No.

(Lamentablemente, la respuesta es demasiado simple y pequeña para SO).

1

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

HttpWebRequest.Host Property

Actualización: lo siento no ver los requisitos de 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 señalar 127.0.0.1 (máquina local). Luego, su aplicación puede abrir un puerto de escucha y actuar como un proxy, canalizando los datos al servidor web real. Esto puede funcionar o no dependiendo de si el cliente tiene un firewall habilitado.

+1

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

+0

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

+0

@CodingGorilla, por favor vea la publicación actualizada. –

-3

Esto funcionó para mí:

Paso 1. Abrir el menú de inicio de Windows, busque la aplicación Bloc de notas y haga clic en el icono del Bloc de notas.

Paso 2. Seleccione "Ejecutar como administrador" y luego, mientras está dentro del bloc de notas, vaya a la carpeta (/ windows/system32/drivers/etc) que contiene el archivo de hosts.

+0

Esto no es programático, y usa derechos de administrador ... – akroy

-1
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; 
     } 
    } 
+0

Agregue algunas explicaciones de por qué este código ayuda al OP. Esto ayudará a proporcionar una respuesta que los futuros televidentes pueden aprender.Ver [respuesta] para más información. –

+0

OP no quiere modificar el archivo de hosts –

Cuestiones relacionadas