2012-06-11 44 views
5

我想弄清楚如果有一种方法可以使主机名解析为某个IP,而无需DNS或主机文件修改。我正在做一个客户端到服务器的请求,但我必须在请求中使用主机名,这样证书才能正确验证请求。但是,我的程序是为了在没有管理员权限的情况下运行的,所以我无法修改主机文件。我有正确的IP和主机名,有没有其他方法可以让计算机将主机名解析为IP?主机名解析无需修改主机文件

+1

机器使用的DNS服务器有什么问题,它不会自动将主机名解析为正确的IP? – cadrell0

+0

服务器不在DNS上,因此解决方案不可能。 – akroy

回答

2

看起来最简单的解决方法是创建一个具有修改主机文件权限的服务,然后从主程序中调用该服务。该服务运行一个命令并退出。由于服务可以具有较高的状态,因此您可以将管理权限封装在标准用户程序中。

0

简单的回答:没有。

(不幸的是,答案太简单了,而且太小了)。

1

如果您正在发出HTTP请求,那么您不需要解析主机名;使用URL中的IP地址并在HTTP请求中传递主机头。

HttpWebRequest.Host Property

更新:遗憾没有看到证书要求。我想你应该能够在安装过程中修改主机文件(因为安装通常在管理员权限下发生)。添加您感兴趣的主机名称以指向127.0.0.1(本地机器)。然后,您的应用程序可以打开侦听套接字并充当代理,将数据传输到实际的Web服务器。这可能会或可能不会工作,具体取决于启用了防火墙的客户端。

+1

如果他这样做,那么SSL证书验证将失败,因为证书上的名称可能具有实际的DNS名称,而该名称与“Host”属性中使用的IP不匹配。这是他想要避免的。 – CodingGorilla

+0

我正在使用RasDial进行连接,所以它看起来像(我不是RAS专家)我可以给一个“电话号码”,这是一个IP或主机名。除非我使用主机名作为电话号码,否则连接认证将不起作用。 – akroy

+0

@CodingGorilla请参阅最新的帖子。 –

-3

这个工作对我来说:

步骤1:打开你的Windows开始菜单,搜索记事本应用程序,然后右键单击记事本图标。

第2步。选择“以管理员身份运行”,然后在记事本内部浏览到包含hosts文件的文件夹(/ windows/system32/drivers/etc)。

+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不想修改主机文件 –