2012-06-11 15 views
5

Próbuję ustalić, czy istnieje sposób na sprawdzenie nazwy hosta dla określonego adresu IP bez zmiany nazwy DNS lub pliku hosta.Rozpoznawanie nazw hosta bez modyfikowania pliku hosts

Używając C#, robię żądanie od klienta do serwera, ale muszę użyć nazwy hosta w żądaniu, aby certyfikaty poprawnie uwierzytelniły żądanie. Jednak mój program ma działać bez uprawnień administratora, więc nie mogę zmodyfikować pliku hosta. Mam poprawny adres IP i nazwę hosta, czy jest jakiś inny sposób, aby komputer rozwiązać nazwę hosta do IP?

+1

Co jest nie tak z serwerem DNS, z którego korzysta maszyna, że ​​automatycznie nie zmienia nazwy hosta na właściwy adres IP? – cadrell0

+0

Serwer nie jest w systemie DNS, więc nie ma możliwości jego rozwiązania. – akroy

Odpowiedz

2

Wygląda na to, że najprostszym sposobem rozwiązania tego problemu jest utworzenie usługi z uprawnieniami do modyfikowania pliku hosta, a następnie wywołanie tej usługi z głównego programu. Usługa uruchamia jedno polecenie i kończy działanie. Ponieważ usługa może mieć podwyższony status, można zasadniczo zawrzeć prawa administratora w standardowym programie użytkownika.

0

Prosta odpowiedź: Nie.

(Niestety odpowiedź jest zbyt prosta i mała dla SO).

1

Jeśli wysyłasz żądanie HTTP, nie musisz rozwiązywać nazwy hosta; użyj adresu IP w adresie URL i przekaż nagłówek hosta w żądaniu HTTP.

HttpWebRequest.Host Property

Aktualizacja: Niestety nie zobaczyć wymagania certyfikatów. Myślę, że powinieneś móc modyfikować plik hosts podczas instalacji (ponieważ instalacja zazwyczaj odbywa się na prawach administratora). Dodaj nazwę hosta, który Cię interesuje, aby wskazywać 127.0.0.1 (komputer lokalny). Następnie aplikacja może otworzyć gniazdo nasłuchiwania i działać jako serwer proxy, przekazując dane do rzeczywistego serwera WWW. To może, ale nie musi działać w zależności od klienta, który ma włączoną zaporę.

+1

Jeśli to zrobi, walidacja certyfikatu SSL nie powiedzie się, ponieważ nazwa na certyfikacie prawdopodobnie zawiera rzeczywistą nazwę DNS, która nie będzie zgodna z adresem IP używanym w właściwości 'Host'. Tego właśnie próbuje uniknąć. – CodingGorilla

+0

Używam RasDial do nawiązania połączenia, więc wygląda na to (nie jestem ekspertem od RAS) Mogę podać "numer telefonu", który jest albo adresem IP, albo nazwą hosta. Certyfikacja połączenia nie zadziała, dopóki nie użyję nazwy hosta jako numeru telefonu. – akroy

+0

@CodingGorilla zobacz zaktualizowany wpis. –

-3

ten pracował dla mnie:

Krok 1. Otwórz menu Start systemu Windows, wyszukiwania dla aplikacji Notatnik, a następnie kliknij prawym przyciskiem myszy ikonę Notatnika.

Krok 2. Wybierz "Uruchom jako administrator", a następnie, podczas gdy wewnątrz notatnika, przejdź do folderu (/ windows/system32/drivers/etc), który zawiera plik hosts.

+0

To nie jest programowe i używa uprawnień administratora ... – 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

Proszę podać wyjaśnienie, dlaczego ten kod pomaga OP. Pomoże to w uzyskaniu odpowiedzi, z której przyszli widzowie mogą się uczyć.Aby uzyskać więcej informacji, patrz [odpowiedź]. –

+0

OP nie chce modyfikować pliku hosts –

Powiązane problemy