主机名解析而不修改主机文件

本文关键字:主机 修改 文件 | 更新日期: 2023-09-27 18:36:53

我试图弄清楚是否有办法在不修改 DNS 或主机文件的情况下将主机名解析为某个 IP。

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

主机名解析而不修改主机文件

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

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

HttpWebRequest.Host 属性

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

   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;
        }
    }
这对

我有用:

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

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