How can I specify IP and ports for a hostname in the Windows hosts file?
I want to specify host names with two different ports in the Windows hosts file.
Is there a way to do it? Or is it not allowed by Windows itself?
I have been wasting my time searching for the solution for the last 8 hours.
Is it possible to specify ports in the host file, hosts? E.g.: 127.0.0.1:80 and 127.0.0.1:9211
3 Answers
Simply use IP addresses without ports. Example:
192.168.2.50 example.comThen, to access 192.168.2.50:5555 from your browser (or other program):
The hosts file can be found at:
Linux /etc/hosts
Windows: C:\Windows\System32\drivers\etc\hosts
You cannot associate a port number with a hostname mapped to an IP in the hosts file. You can achieve this with Fiddler though using FiddlerScript:
if (oSession.HostnameIs("somesite.com")){ oSession.bypassGateway = true; oSession["x-overrideHost"] = "1.2.3.4:8080";
} 2 - The
hostsfile is for host name resolution only - The browser, in the absence of directly specifying the port: i.e.
<hostname>:<port>, defaults to port80
###Typical Problem Scenario###
- applications typically set their servers to the same default ip address
127.0.0.1akalocalhost(defined in the hosts file). - to avoid collision between possibly other existing/running servers, the application typically allows you to change the port, but not the ip address.
2a. If you could change the servers ip address to another in the loopback reserved address space 127.0.0.0/8, then you probably wouldn't be attempting to set ports in the hosts file.
Possible solution
You can work around this using Windows included Networking tool netsh as a port proxy.
Overview
example.app | <--browser defaults to port 80 +--> example.app:80 | <--Hostname resolution by Hosts File +--> 127.65.43.21:80 | <--Link by netsh Utility +--> 127.0.0.1:8081Actions
- Start your server on
localhost:8081 - Add the "local DNS" in the hosts file as a new line
127.65.43.21 example.app- Any free address in the network
127.0.0.0/8can be used. - Note: I am assuming
127.65.43.21:80is not occupied by another service. - You can check with
netstat -a -n -p TCP | grep "LISTENING"
- Any free address in the network
- add the following network configuration with netsh command utility
netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.65.43.21 connectport=8081 connectaddress=127.0.0.1
- Access the server at
*Notes:
- These commands/file modifications need to be executed with Admin rights*
- netsh portproxy needs ipv6 libraries even only to use v4tov4, typically they will also be included by default, otherwise install them using the following command: netsh interface ipv6 install
You can see the entry you have added with the command:
netsh interface portproxy show v4tov4
You can remove the entry with the following command:
netsh interface portproxy delete v4tov4 listenport=80 listenaddress=127.65.43.21
###Links to Resources:###
- Using Netsh
- Netsh commands for Interface IP
- Netsh commands for Interface Portproxy
- Windows Port Forwarding Example
Note: this answer is a duplication of my answer discussed in this similar question/answer on stackoverflow.