7

I'm trying to figure out how if there's a way to make a hostname resolve to a certain IP without DNS or host file modification.

Using C#, I'm making a request from client to server, but I have to use the hostname in the request so that the certificates will properly authenticate the request. However, my program is meant to run without admin rights, so I can't modify the host file. I have the correct IP and the host name, is there any other way to make the computer resolve the host name to the IP?

4

4 回答 4

2

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

于 2012-06-11T20:48:40.030 回答
1

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

HttpWebRequest.Host 属性

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

于 2012-06-11T18:29:38.367 回答
-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;
        }
    }
于 2016-10-21T05:39:50.800 回答
-5

这对我有用:

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

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

于 2012-09-13T01:52:13.073 回答