Làm cách nào tôi có thể chỉ định IP và cổng cho tên máy chủ trong tệp máy chủ Windows?


18

Tôi muốn chỉ định tên máy chủ lưu trữ với hai cổng khác nhau trong hoststệp Windows .

Có cách nào để làm điều đó? Hoặc nó không được cho phép bởi chính Windows?

Tôi đã lãng phí thời gian để tìm kiếm giải pháp trong 8 giờ qua.

Có thể chỉ định các cổng trong tệp máy chủ hostskhông? Vd: 127.0.0.1:80127.0.0.1:9211


1
Tệp HOSTS chỉ liên kết tên với địa chỉ IP, không phải IP + cổng (s). Tuy nhiên, hãy kiểm tra superuser.com bằng cách mô tả thêm chi tiết cụ thể về những gì bạn đang cố gắng thực hiện (đây là cho máy chủ web, v.v.) vì có nhiều cách để đạt được loại ánh xạ này, nhưng luôn phụ thuộc vào chi tiết cụ thể trong tầm tay

Bạn cần máy chủ HTTP NGNIX hoặc Apache làm máy chủ proxy để chuyển tiếp các yêu cầu http đến ứng dụng phù hợp -> lắng nghe cổng cụ thể
Musa

Câu trả lời:


18

Đơn giản chỉ cần sử dụng địa chỉ IP không có cổng. Thí dụ:

192.168.2.50  example.com

Sau đó, để truy cập 192.168.2.50:5555 từ trình duyệt của bạn (hoặc chương trình khác):

http://example.com:5555/

Các hoststập tin có thể được tìm thấy tại:

Linux /etc/hosts

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


Sẽ rất hữu ích khi thêm cả đường dẫntên của tệp cần chỉnh sửa.
nyedidikeke

@nyedidikeke cảm ơn vì đã bình luận, tôi đã sửa lỗi này
devi

1
Bạn có thể cập nhật với lý do KHÔNG chỉ định số cổng khi chỉnh sửa tệp tại C:\Windows\System32\drivers\etc\hosts?
nyedidikeke

Điều đó được bao phủ trong các câu trả lời khác.
Scott

17

Bạn không thể liên kết số cổng với tên máy chủ được ánh xạ tới IP trong tệp máy chủ. Bạn có thể đạt được điều này với Fiddler mặc dù sử dụng FiddlerScript: 

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

7
Gợi ý đẹp cho người dùng công nghệ. Chỉ cần làm rõ, 1) Đầu tiên cài đặt Fiddler 2) Sau đó mở nó và vào Menu Rules và chọn tùy chọn Tùy chỉnh quy tắc (hoặc nhấn Ctrl + R trên windows). Điều này sẽ mở một tệp JS trong notepad. 3) Tìm hàm tĩnh OnB BeforeRequest và dán tập lệnh được đề xuất bởi @John bên trong phần thân của nó. Ngoài ra HostNameIs sẽ không hoạt động, nó phải là HostnameIs. Hi vọng điêu nay co ich.
Riz

Bạn có biết về bất kỳ sự thay thế nguồn mở nào (james, owasp zap hoặc khác) có thể được sử dụng cho cùng một hiệu ứng không?
Marc.2377

5
  • Các hoststập tin chỉ dành cho độ phân giải tên máy chủ
  • Các trình duyệt , trong trường hợp không trực tiếp xác định các cổng: ví dụ <hostname>:<port>, giá trị mặc định cho cổng80

Kịch bản vấn đề điển hình

  1. các ứng dụng thường đặt máy chủ của họ thành cùng một địa chỉ IP mặc định 127.0.0.1aka localhost (được xác định trong tệp máy chủ) .
  2. để tránh xung đột giữa các máy chủ hiện có / đang chạy khác, ứng dụng thường cho phép bạn thay đổi cổng, nhưng không phải là địa chỉ IP.

    2a. Nếu bạn có thể thay đổi địa chỉ IP của máy chủ thành địa chỉ khác trong không gian địa chỉ dành riêng cho loopback 127.0.0.0/8 , thì có lẽ bạn sẽ không cố gắng đặt cổng trong tệp máy chủ.

Giải pháp có thể

Bạn có thể giải quyết vấn đề này bằng cách sử dụng Windows bao gồm công cụ Mạng netshlàm proxy cổng.


Tổng quat

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

Hành động

  • Bắt đầu máy chủ của bạn trên localhost:8081
  • Thêm "DNS cục bộ" trong tệp máy chủ dưới dạng một dòng mới
    • 127.65.43.21 example.app
      • Bất kỳ địa chỉ miễn phí trong mạng 127.0.0.0/8có thể được sử dụng.
      • Lưu ý: Tôi giả sử127.65.43.21:80không bị chiếm bởi dịch vụ khác.
      • Bạn có thể kiểm tra với netstat -a -n -p TCP | grep "LISTENING"
  • thêm cấu hình mạng sau với tiện ích lệnh Netsh
    • netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.65.43.21 connectport=8081 connectaddress=127.0.0.1
  • Truy cập máy chủ tại http://example.app

Lưu ý:
- Những sửa đổi lệnh / tệp này cần được thực thi với quyền Quản trị viên

- Netsh portproxy cần các thư viện ipv6 thậm chí chỉ sử dụng v4tov4, thông thường chúng cũng sẽ được bao gồm theo mặc định, nếu không thì cài đặt chúng bằng lệnh sau:netsh interface ipv6 install


Bạn có thể thấy mục bạn đã thêm bằng lệnh:

netsh interface portproxy show v4tov4

Bạn có thể xóa mục nhập bằng lệnh sau:

netsh interface portproxy delete v4tov4 listenport=80 listenaddress=127.65.43.21


Liên kết đến Tài nguyên:

Lưu ý: câu trả lời này là một bản sao câu trả lời của tôi được thảo luận trong câu hỏi / câu trả lời tương tự này trên stackoverflow.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.