Как я могу указать IP и порты для имени хоста в файле хостов Windows?


18

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

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

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

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


1
Файл HOSTS связывает имена только с IP-адресами, а не с IP-адресами + портами. Однако проверьте superuser.com, описав больше деталей того, что вы пытаетесь сделать (это для веб-сервера и т. Д. И т. Д.), Так как существует много способов достижения этого типа отображения, но всегда в зависимости от специфики под рукой.

Вам нужен HTTP-сервер NGNIX или Apache в качестве прокси-сервера для пересылки http-запросов в соответствующее приложение -> которое прослушивает определенный порт
Musa

Ответы:


18

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

192.168.2.50  example.com

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

http://example.com:5555/

hostsФайл можно найти по адресу:

Linux /etc/hosts

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


Будет полезно добавить как путь, так и имя файла для редактирования.
nyedidikeke

@nyedidikeke спасибо за комментарий, я исправил это
devi

1
Можете ли вы обновить с указанием причины НЕ указывать номер порта при редактировании файла в C:\Windows\System32\drivers\etc\hosts?
nyedidikeke

Это описано в других ответах.
Скотт

17

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

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

7
Хорошее предложение для технических пользователей. Просто чтобы прояснить: 1) Сначала установите Fiddler 2) Затем откройте его и перейдите в меню «Правила» и выберите пункт «Настройка правил» (или нажмите Ctrl + R в окнах). Это откроет файл JS в блокноте. 3) Найдите статическую функцию OnBeforeRequest и вставьте скрипт, предложенный @John, в его тело. Также HostNameIs не будет работать, это должны быть HostnameIs. Надеюсь это поможет.
Риз

Вам известна какая-либо альтернатива с открытым исходным кодом (james, owasp zap или другая), которая может использоваться для того же эффекта?
23 марта

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

Сценарий типичной проблемы

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

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

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

Вы можете обойти это, используя Windows Networking Network 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.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.