如何在 Windows 主机文件中为主机名指定 IP 和端口?

25 windows ip-address localhost

我想在 Windowshosts文件中指定具有两个不同端口的主机名。

有没有办法做到这一点?还是Windows本身不允许?

在过去的 8 个小时里,我一直在浪费时间寻找解决方案。

是否可以在主机文件中指定端口hosts?例如:127.0.0.1:80127.0.0.1:9211

gdb*_*ble 21

只需使用没有端口的 IP 地址。例子:

192.168.2.50  example.com
Run Code Online (Sandbox Code Playgroud)

然后,从浏览器(或其他程序)访问 192.168.2.50:5555:

http://example.com:5555/
Run Code Online (Sandbox Code Playgroud)

hosts文件可以在以下位置找到:

Linux /etc/hosts

窗户C:\Windows\System32\drivers\etc\hosts


Joh*_*n T 18

您不能将端口号与映射到主机文件中 IP 的主机名相关联。您可以使用Fiddler实现这一点,但使用 FiddlerScript: 

if (oSession.HostnameIs("somesite.com")){
    oSession.bypassGateway = true;
    oSession["x-overrideHost"] = "1.2.3.4:8080";
}
Run Code Online (Sandbox Code Playgroud)

  • 对技术用户的好建议。只是为了澄清,1)首先安装 Fiddler 2)然后打开它并转到规则菜单并选择自定义规则选项(或在 Windows 上按 Ctrl + R )。这将在记事本中打开一个 JS 文件。3) 找到静态函数 OnBeforeRequest 并将@John 建议的脚本粘贴到其正文中。HostNameIs 也不起作用,它应该是 HostnameIs。希望这可以帮助。 (8认同)

Pau*_*rez 12

  • hosts文件仅用于主机名解析
  • 浏览器,在没有直接指定端口的:即<hostname>:<port>默认端口80

典型问题场景

  1. 应用程序通常将它们的服务器设置为相同的默认 IP 地址,127.0.0.1也就是localhost (在主机文件中定义)
  2. 为避免可能的其他现有/正在运行的服务器之间发生冲突,该应用程序通常允许您更改端口,但不允许更改 IP 地址。

    2a. 如果您可以将服务器 ip 地址更改为回送保留地址空间 中的另一个地址127.0.0.0/8,那么您可能不会尝试在主机文件中设置端口。

可能的解决方案

您可以使用Windows 包含的网络工具netsh作为端口代理来解决此问题。


概述

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:8081
Run Code Online (Sandbox Code Playgroud)

行动

  • 启动您的服务器 localhost:8081
  • hosts 文件中添加“本地 DNS”作为新行
    • 127.65.43.21 example.app
      • 127.0.0.0/8可以使用网络中的任何免费地址。
      • 注意:我假设127.65.43.21:80没有被其他服务占用。
      • 你可以检查 netstat -a -n -p TCP | grep "LISTENING"
  • 使用netsh 命令实用程序 添加以下网络配置
    • netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.65.43.21 connectport=8081 connectaddress=127.0.0.1
  • 访问服务器在 http://example.app

注意:
- 这些命令/文件修改需要以管理员权限执行

- netsh portproxy 需要 ipv6 库,即使只使用 v4tov4,通常它们也会被默认包含,否则使用以下命令安装它们:netsh interface ipv6 install


你可以看到你用命令添加的条目

netsh interface portproxy show v4tov4

您可以使用以下命令删除条目

netsh interface portproxy delete v4tov4 listenport=80 listenaddress=127.65.43.21


资源链接:

注意:这个答案是我在 stackoverflow 上的这个类似问题/答案中讨论的答案的重复