我想弄清楚如果有一种方法可以使主机名解析为某个IP,而无需DNS或主机文件修改。我正在做一个客户端到服务器的请求,但我必须在请求中使用主机名,这样证书才能正确验证请求。但是,我的程序是为了在没有管理员权限的情况下运行的,所以我无法修改主机文件。我有正确的IP和主机名,有没有其他方法可以让计算机将主机名解析为IP?主机名解析无需修改主机文件
回答
看起来最简单的解决方法是创建一个具有修改主机文件权限的服务,然后从主程序中调用该服务。该服务运行一个命令并退出。由于服务可以具有较高的状态,因此您可以将管理权限封装在标准用户程序中。
简单的回答:没有。
(不幸的是,答案太简单了,而且太小了)。
如果您正在发出HTTP请求,那么您不需要解析主机名;使用URL中的IP地址并在HTTP请求中传递主机头。
更新:遗憾没有看到证书要求。我想你应该能够在安装过程中修改主机文件(因为安装通常在管理员权限下发生)。添加您感兴趣的主机名称以指向127.0.0.1(本地机器)。然后,您的应用程序可以打开侦听套接字并充当代理,将数据传输到实际的Web服务器。这可能会或可能不会工作,具体取决于启用了防火墙的客户端。
如果他这样做,那么SSL证书验证将失败,因为证书上的名称可能具有实际的DNS名称,而该名称与“Host”属性中使用的IP不匹配。这是他想要避免的。 – CodingGorilla
我正在使用RasDial进行连接,所以它看起来像(我不是RAS专家)我可以给一个“电话号码”,这是一个IP或主机名。除非我使用主机名作为电话号码,否则连接认证将不起作用。 – akroy
@CodingGorilla请参阅最新的帖子。 –
这个工作对我来说:
步骤1:打开你的Windows开始菜单,搜索记事本应用程序,然后右键单击记事本图标。
第2步。选择“以管理员身份运行”,然后在记事本内部浏览到包含hosts文件的文件夹(/ windows/system32/drivers/etc)。
这不是程序化的,它使用管理权限... – akroy
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。这将有助于提供未来观众可以从中学习的答案。有关更多信息,请参阅[答案]。 –
OP不想修改主机文件 –
- 1. 无法解析主机名
- 2. 修改Windows主机文件
- 3. 无法解析主机“<url here>”;没有与主机名
- 4. Windows主机名称解析
- 5. WinSock2 getaddrinfo解析主机名
- 6. Graylog不解析主机名
- 7. libcurl return“无法解析主机名”
- 8. 蟒蛇:socket.gethostbyname无法解析主机名
- 9. “主机名无法解析”从“ftp”URL
- 10. Java无法解析主机名
- 11. 无法解析主机名,ping工程
- 12. curl_easy_perform:无法解析主机名
- 13. Kubernetes:Pod无法解析主机名
- 14. Mac SVN E175002:无法解析主机名''
- 15. 树莓无法解析主机名
- 16. MySQL无法解析主机名
- 17. OpenJDK 8:无法解析主机名
- 18. 无法解析主机名(raspbian)
- 19. 剿错误“主机名无法解析”
- 20. http_post_fields()无法解析主机名
- 21. git - 无法解析主机名称
- 22. getaddrinfo无法解析主机
- 23. java.net.unknownhostexception无法解析主机
- 24. Algolia无法解析主机
- 25. Android无法解析主机
- 26. 无法解析主机:>
- 27. 无法解析主机
- 28. 无法解析主机Android
- 29. PHP无法解析主机
机器使用的DNS服务器有什么问题,它不会自动将主机名解析为正确的IP? – cadrell0
服务器不在DNS上,因此解决方案不可能。 – akroy