【问题标题】:Host name resolution without modifying the hosts file不修改hosts文件的主机名解析
【发布时间】:2012-06-14 16:15:09
【问题描述】:

我正在尝试弄清楚是否有一种方法可以在不修改 DNS 或主机文件的情况下将主机名解析为特定 IP。

使用 C#,我正在从客户端向服务器发出请求,但我必须在请求中使用主机名,以便证书能够正确验证请求。但是,我的程序是在没有管理员权限的情况下运行的,所以我无法修改主机文件。我有正确的IP和主机名,有没有其他方法可以让电脑将主机名解析为IP?

【问题讨论】:

  • 机器使用的 DNS 服务器有什么问题,没有自动将主机名解析为正确的 IP?
  • 服务器不在DNS上,所以无法解析。

标签: c# ip hostname


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    HttpWebRequest.Host Property

    更新:抱歉没有看到证书要求。我认为您应该能够在安装期间修改主机文件(因为安装通常在管理员权限下进行)。添加您感兴趣的主机名以指向 127.0.0.1(本地计算机)。然后,您的应用程序可以打开一个侦听套接字并充当代理,将数据引导到实际的 Web 服务器。这可能会也可能不会起作用,具体取决于启用了防火墙的客户端。

    【讨论】:

    • 如果他这样做了,SSL 证书验证将失败,因为证书上的名称可能有一个实际的 DNS 名称,它与 Host 属性中使用的 IP 不匹配。这是他试图避免的。
    • 我正在使用 RasDial 建立连接,所以看起来(我不是 RAS 专家)我可以提供一个“电话号码”,它可以是 IP 或主机名。除非我使用主机名作为电话号码,否则连接认证将不起作用。
    • 在安装过程中这样做是行不通的(这么直截了当),因为我必须在程序运行期间从外部源请求 IP 和主机名。那是我意识到解决方案的时候(我将其发布为答案);获得所有必要信息后,我会创建第二个服务,并在那里执行管理工作(您可以在安装或运行中执行此操作,具体取决于它是网络服务还是什么)。
    【解决方案3】:
       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;
            }
        }
    

    【讨论】:

    • 请添加一些解释为什么此代码有助于 OP。这将有助于为未来的观众提供一个可以学习的答案。请参阅How to Answer 了解更多信息。
    • OP不想修改hosts文件
    【解决方案4】:

    这对我有用:

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

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

    【讨论】:

      猜你喜欢
      • 2015-10-10
      • 1970-01-01
      • 2021-03-24
      • 2020-07-01
      • 2014-01-18
      • 2017-09-14
      • 1970-01-01
      • 1970-01-01
      • 2011-04-14
      相关资源
      最近更新 更多