2012-06-11 2 views
5

Я пытаюсь выяснить, как можно сделать решение хоста для определенного IP-адреса без изменения DNS или хоста.Разрешение имени хоста без изменения файла хостов

Используя C#, я делаю запрос от клиента к серверу, но я должен использовать имя хоста в запросе, чтобы сертификаты правильно аутентифицировали запрос. Однако моя программа предназначена для запуска без прав администратора, поэтому я не могу изменить файл хоста. У меня есть правильный IP-адрес и имя хоста, есть ли другой способ заставить компьютер разрешить имя хоста IP?

+1

Что не так с DNS-сервером, который использует компьютер, так что он не разрешает имя узла автоматически на правильный IP-адрес? – cadrell0

+0

Сервер не находится в DNS, поэтому разрешение невозможно. – akroy

ответ

2

Похоже, что самый простой способ решить эту задачу - создать службу с правами на изменение файла хоста, а затем вызвать эту службу из основной программы. Служба запускает одну команду и завершает работу. Поскольку служба может иметь повышенный статус, вы можете по существу инкапсулировать права администратора внутри стандартной пользовательской программы.

0

Простой ответ: Нет.

(К сожалению, ответ слишком прост и мал для SO).

1

Если вы делаете HTTP-запрос, вам не нужно разрешать имя хоста; используйте IP-адрес в URL-адресе и передайте заголовок узла в своем HTTP-запросе.

HttpWebRequest.Host Property

Update: жаль не видел требования сертификатов. Я думаю, вы должны иметь возможность изменять файл hosts во время установки (поскольку установка обычно происходит под правами администратора). Добавьте имя хоста, которое вас интересует, чтобы указать 127.0.0.1 (локальная машина). Затем ваше приложение может открыть прослушивающий сокет и действовать как прокси-сервер, направляя данные на фактический веб-сервер. Это может работать или не работать в зависимости от клиента, у которого включен брандмауэр.

+1

Если он выполнит эту проверку SSL-сертификата, произойдет сбой, потому что имя сертификата, скорее всего, имеет фактическое имя DNS на нем, которое не будет соответствовать IP-адресу, используемому в свойстве «Host». Это то, чего он пытается избежать. – CodingGorilla

+0

Я использую RasDial, чтобы установить соединение, поэтому он выглядит как (я не эксперт по RAS). Я могу указать «номер телефона», который является IP-адресом или именем хоста. Сертификация по соединению не будет работать, если я не буду использовать имя хоста в качестве номера телефона. – akroy

+0

@CodingGorilla см. Обновленный пост. –

-3

это работало для меня:

Шаг 1. Откройте меню Пуск Windows ваши, искать приложения блокнота, а затем щелкните правой кнопкой мыши на значок блокнота.

Шаг 2. Выберите «Запуск от имени администратора», а затем, находясь внутри блокнота, найдите папку (/ windows/system32/drivers/etc), содержащую файл hosts.

+0

Это не программное обеспечение, и оно использует права администратора ... – 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

Пожалуйста, добавьте некоторое объяснение, почему этот код помогает OP. Это поможет обеспечить ответ, о котором могут узнать будущие зрители.См. [Ответ] для получения дополнительной информации. –

+0

OP не хочет изменять файл hosts –

Смежные вопросы