14

Я хочу указать имена хостов с двумя разными портами в файле hosts Windows.

Есть ли способ сделать это? Или это не разрешено самой Windows?

Я трачу свое время на поиски решения в течение последних 8 часов.

Можно ли указать порты в файле host, hosts? Например: 127.0.0.1:80 и 127.0.0.1:9211

3 ответа3

14

Вы не можете связать номер порта с именем хоста, сопоставленным с IP в файле hosts. Вы можете добиться этого с помощью Fiddler, используя FiddlerScript: 

if (oSession.HostnameIs("somesite.com")){
    oSession.bypassGateway = true;
    oSession["x-overrideHost"] = "1.2.3.4:8080";
}
13

Просто используйте IP-адреса без портов. Пример:

192.168.2.50  example.com

Затем для доступа к 192.168.2.50:5555 из вашего браузера (или другой программы):

http://example.com:5555/

(Файл hosts можно найти в C:\Windows\System32\drivers\etc\hosts .)

4
  • Файл hosts предназначен только для разрешения имен хостов.
  • Браузер при отсутствии прямого указания порта: то есть <hostname>:<port> , по умолчанию используется порт 80

Типичный сценарий проблемы

  1. приложения обычно устанавливают на своих серверах один и тот же IP-адрес по умолчанию 127.0.0.1 или localhost (определенный в файле hosts).
  2. чтобы избежать коллизий между, возможно, другими существующими / работающими серверами, приложение, как правило, позволяет изменить порт, но не IP-адрес.

    2а. Если бы вы могли изменить IP-адрес сервера на другой в зарезервированном адресном пространстве 127.0.0.0/8 закольцованного адреса , вы, вероятно, не пытались бы устанавливать порты в файле hosts.

Возможное решение

Вы можете обойти это, используя сетевой инструмент 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

действия

  • Запустите свой сервер на localhost:8081
  • Добавьте "локальный DNS" в файл hosts в качестве новой строки
    • 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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .