2012-06-11 14 views
5

Sto cercando di capire come sia possibile risolvere un nome host su un determinato IP senza la modifica del file host o DNS.Risoluzione nome host senza modificare il file hosts

Utilizzando C#, sto facendo una richiesta da client a server, ma devo usare il nome host nella richiesta in modo che i certificati autenticheranno correttamente la richiesta. Tuttavia, il mio programma è pensato per funzionare senza diritti di amministratore, quindi non posso modificare il file host. Ho l'IP corretto e il nome dell'host, c'è un altro modo per fare in modo che il computer risolva il nome dell'host nell'IP?

+1

Cosa c'è di sbagliato nel server DNS che la macchina sta utilizzando che non sta risolvendo il nome host automaticamente sull'IP corretto? – cadrell0

+0

Il server non è su DNS, quindi la risoluzione non è possibile. – akroy

risposta

2

Sembra che il modo più semplice per risolverlo sia creare un servizio con i diritti per modificare il file host, quindi richiamare quel servizio dal programma principale. Il servizio esegue un singolo comando ed esce. Poiché un servizio può avere uno stato elevato, è possibile incapsulare essenzialmente i diritti di amministrazione all'interno di un programma utente standard.

0

Risposta semplice: No.

(Sfortunatamente la risposta è troppo semplice e piccola per SO).

1

Se si sta effettuando una richiesta HTTP, non è necessario risolvere il nome host; utilizzare l'indirizzo IP nell'URL e passare l'intestazione host nella richiesta HTTP.

HttpWebRequest.Host Property

Aggiornamento: mi dispiace non vedere i requisiti certificati. Penso che dovresti essere in grado di modificare il file hosts durante l'installazione (perché l'installazione di solito avviene sotto i diritti di amministratore). Aggiungi il nome host che ti interessa per puntare a 127.0.0.1 (macchina locale). Quindi, l'app può aprire un socket di ascolto e agire da proxy, canalizzando i dati sul server Web effettivo. Questo può o non può funzionare a seconda del client con un firewall abilitato.

+1

Se lo fa, la convalida del certificato SSL avrà esito negativo perché il nome sul certificato probabilmente contiene un nome DNS effettivo, che non corrisponderà all'IP utilizzato nella proprietà 'Host'. Questo è ciò che sta cercando di evitare. – CodingGorilla

+0

Sto usando RasDial per stabilire una connessione, quindi sembra (non sono un esperto di RAS) Posso dare un "numero di telefono" che è un IP o un nome host. La certificazione sulla connessione non funzionerà a meno che non utilizzi il nome host come numero di telefono. – akroy

+0

@CodingGorilla si prega di consultare il post aggiornato. –

-3

questo ha funzionato per me:

Fase 1. Aprire il menu Start di Windows, cercare l'applicazione Blocco note e quindi fare clic destro sull'icona del blocco note.

Passaggio 2. Scegliere "Esegui come amministratore" e quindi, mentre all'interno del blocco note, individuare la cartella (/ windows/system32/drivers/etc) che contiene il file hosts.

+0

Questo non è programmatico e utilizza i diritti di amministratore ... – 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

Si prega di aggiungere alcune spiegazioni sul perché questo codice aiuta l'OP. Questo aiuterà a fornire una risposta da cui i futuri spettatori potranno imparare.Vedi [risposta] per maggiori informazioni. –

+0

OP non vuole modificare il file hosts –

Problemi correlati