Як я можу вказати IP та порти для імені хоста у файлі хостів Windows?


18

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

Чи є спосіб це зробити? Або це не дозволено самою Windows?

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

Чи можна вказати порти у файлі хоста hosts,? Напр .: 127.0.0.1:80і127.0.0.1:9211


1
У файлі HOSTS асоціюються лише імена з IP-адресами, а не IP-адреси + порти. Однак перевірте superuser.com, описавши більше специфіки того, що ви намагаєтеся зробити (чи це для веб-сервера тощо) тощо, оскільки існує багато способів досягнення цього типу відображення, але завжди залежно від конкретних особливостей під рукою.

Вам потрібен сервер NGNIX або Apache HTTP як проксі-сервер для переадресації HT-запитів на відповідне додаток -> яке слухає конкретний порт
Musa

Відповіді:


18

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

192.168.2.50  example.com

Потім, щоб отримати доступ до 192.168.2.50bilje555 зі свого браузера (або іншої програми):

http://example.com:5555/

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

Linux /etc/hosts

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


Буде корисно додати як шлях, так і ім'я файлу, який потрібно редагувати.
nyedidikeke

@nyedidikeke спасибі за коментар, я виправив це
відставці

1
Чи можете ви оновити інформацію про те, що НЕ вказуєте номер порту під час редагування файлу в C:\Windows\System32\drivers\etc\hosts?
nyedidikeke

Це висвітлено в інших відповідях.
Скотт

17

Ви не можете пов'язувати номер порту з ім'ям хоста, відображеним на IP-адресу у файлі хостів. Ви можете досягти цього за допомогою 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. Сподіваюсь, це допомагає.
Різ

Чи знаєте ви будь-яку альтернативу з відкритим кодом (Джеймс, Овасп Зап або інше), яка може бути використана для того ж ефекту?
березня 2118 р.

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

Типовий сценарій проблеми

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

    2а. Якби ви могли змінити 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

Дії

  • Запустіть сервер на localhost:8081
  • Додайте "локальний 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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.