Host name resolution without modifying the hosts f

2019-04-29 00:44发布

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?

标签: c# ip hostname
5条回答
够拽才男人
2楼-- · 2019-04-29 00:56

It looks like the simplest way to solve this is to create a service with the rights to modify the host file, then invoke that service from the main program. The service runs a single command and exits. Since a service can have elevated status, you can essentially encapsulate admin rights inside a standard user program.

查看更多
Viruses.
3楼-- · 2019-04-29 00:59

If you're making an HTTP request, then you don't need to resolve the hostname; use the IP address in the URL and pass the host header in your HTTP request.

HttpWebRequest.Host Property

Update: sorry didn't see the certificates requirements. I think you should be able to modify the hosts file during installation (because installation usually happens under admin rights). Add the host name you're interested in to point to 127.0.0.1 (local machine). Then, your app can open a listening socket and act as a proxy, channeling the data to the actual Web server. This may or may not work depending on the client having a firewall enabled.

查看更多
Emotional °昔
4楼-- · 2019-04-29 01:06

this worked for me:

Step 1. Open your Windows start menu, search for the notepad application and then right click the notepad icon.

Step 2. Choose “Run as administrator” and then, while inside notepad, browse to folder (/windows/system32/drivers/etc) that contains the hosts file.

查看更多
别忘想泡老子
5楼-- · 2019-04-29 01:17

Simple answer: Nope.

(Unfortunately the answer is too simple and small for SO).

查看更多
太酷不给撩
6楼-- · 2019-04-29 01:21
   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;
        }
    }
查看更多
登录 后发表回答