Làm thế nào chính xác một proxy hoạt động?


11

Nếu tôi muốn kết nối, IP 100.100.100.100, Cổng 80, máy tính của tôi sẽ gửi một gói tcp với địa chỉ này vào dây.

Bây giờ Nếu tôi sử dụng máy chủ proxy, 200.200.200.200 Cổng 8080 (loại proxy mà bạn có thể thiết lập trong trình duyệt internet) thì quá trình này đã thay đổi như thế nào?

Khi tôi vẫn muốn kết nối với cùng một IP, tiêu đề IP sẽ bao gồm IP đích hoặc IP proxy hoặc cả hai?

Tôi đã googled, có hàng trăm trang cho bạn biết cách thiết lập proxy nhưng không có gì giải thích cách hoạt động của nó dưới mui xe.

Câu trả lời:


12

Yêu cầu HTTP được gửi từ Máy khách đến cổng 8080 của Máy chủ Proxy. Proxy Server sau đó tạo một yêu cầu HTTP mới đến trang đích. Proxy, tùy thuộc vào cấu hình, thường sẽ thêm tiêu đề "X-Forwarded-For" vào yêu cầu HTTP. Các tệp nhật ký trên trang web đích sẽ hiển thị địa chỉ IP của proxy, nhưng có thể hoặc không thể được cấu hình để ghi lại địa chỉ "X-Forwarded-For".

Đó là cấu hình điển hình, nhưng phần mềm proxy sẽ cho phép bạn tất cả các loại tùy chỉnh.

EDIT: Tôi nên lưu ý rằng khi ban đầu tôi đọc câu hỏi của bạn, tôi có ý tưởng bạn đang hỏi về Proxy HTTP cụ thể, chẳng hạn như mực hoặc nginx. Có nhiều loại proxy khác nhau có sẵn. Trong Internet Explorer, rất có thể bạn sẽ sử dụng proxy HTTP, nhưng cũng có nhiều loại khác.


Vâng, nó phụ thuộc rất nhiều vào phần mềm bạn đang sử dụng như một máy chủ proxy và cách nó được cấu hình. Xem, ví dụ: httpProxyModule cho Nginx: wiki.nginx.org/HttpProxyModule
entropo

3
Nếu chỉ yêu cầu gửi đến máy chủ proxy, làm thế nào để proxy biết địa chỉ đích tôi muốn kết nối? Proxy có hoạt động ở cấp http hoặc ở cấp tcp không?
cody

Trình duyệt thực hiện yêu cầu tới proxy yêu cầu URI đầy đủ. Sau đó, máy chủ proxy thực hiện tra cứu DNS và khởi tạo yêu cầu HTTP của chính nó đến trang đích.
emgee

1
Một proxy http, như Squid (mà tôi đã dựa vào câu trả lời của mình) hoạt động ở lớp ứng dụng.
emgee

1
@emgee: Giao thức HTTP cũng có phương thức CONNECT, do đó có thể kết nối qua proxy HTTP với máy chủ TCP (nếu proxy cho phép) và máy chủ TCP không phải là máy chủ có thể nói HTTP.
vtest

1

HTTP là một giao thức lớp 7 vì vậy đừng nhầm lẫn. Khi bạn sử dụng proxy HTTP và bạn nhập google.com, tiêu đề HTTP vẫn giống google.com, nhưng địa chỉ IP đích sẽ là địa chỉ IP của Proxy, nguồn sẽ là IP lưu trữ cho số cổng tùy chỉnh 8080.


0

Để sử dụng proxy HTTP, yêu cầu được gửi từ máy khách đến địa chỉ IP của máy chủ proxy thay vì đến máy chủ đích. Sau đó, proxy phải đọc tiêu đề HTTP để giải nén URI yêu cầu . URI yêu cầu bao gồm tên hoặc IP của máy chủ đích và máy chủ proxy sử dụng thông tin đó để chuyển tiếp yêu cầu.

Các Đặc tả HTTP cho phép dòng yêu cầu loại trừ tên máy chủ và cổng khi proxy không được sử dụng (vì chúng sẽ không cần thiết nếu yêu cầu được gửi trực tiếp đến máy chủ đó). Nhưng, theo thông số kỹ thuật ...

Biểu mẫu perfectURI bị BẮT BUỘC khi yêu cầu được gửi tới proxy.

Vì vậy, khi không sử dụng proxy, dòng yêu cầu có thể trông như sau:

GET /robots.txt HTTP/1.1

nhưng để sử dụng proxy, dòng phải bao gồm tên máy chủ (và cổng nếu không phải là 80):

GET http://httpbin.org:80/robots.txt HTTP/1.1

Phía phản hồi nếu hoạt động có thể đơn giản hơn vì máy chủ proxy có thể chỉ đơn giản chuyển tiếp phản hồi nguyên văn thông qua ổ cắm yêu cầu được thiết lập trước.


Từ "HTTP Hướng dẫn dứt khoát", pg. 145: "HTTP / 1.1 hiện yêu cầu máy chủ xử lý URI đầy đủ cho cả yêu cầu proxy và máy chủ, nhưng trên thực tế, nhiều máy chủ được triển khai vẫn chỉ chấp nhận URI một phần."
nobar

Đó không phải là cách tiếp cận tiêu chuẩn, nhưng một proxy cũng có thể sử dụng Host tiêu đề để hoàn thành một URI một phần nếu một URI tuyệt đối không được cung cấp trong dòng yêu cầu.
nobar

Cách tiếp cận này không thể hoạt động nếu kết nối được mã hóa nối đầu (HTTPS). security.stackexchange.com/questions/101721/
nobar

-7

Không có thứ gọi là "gói tcp". TCP hoạt động với các luồng dữ liệu. Có gói IP.

Bạn dường như đang thiếu một số kiến ​​thức cơ bản về mạng, tôi khuyên bạn nên có một cuốn sách hay về TCP / IP. Yêu thích của mọi người dường như là "TCP / IP minh họa" của W. Richard Stevens.

Quay lại câu hỏi của bạn.

Một proxy là một người trung gian:

[bạn] - [proxy] - [máy chủ bạn muốn kết nối]

Bây giờ có hai kết nối khác nhau:

[bạn] - (kết nối của bạn với proxy) - [proxy] - (kết nối của proxy với máy chủ) - [máy chủ bạn muốn kết nối]

Khi bạn nghĩ rằng bạn đang kết nối với máy chủ thông qua proxy, bạn thực sự đang kết nối với proxy và nói với bạn rằng bạn muốn tiếp cận một máy chủ nhất định. Sau đó, proxy mở một kết nối thứ hai từ chính nó đến máy chủ đó và hoạt động như người trung gian truyền dữ liệu theo cả hai hướng.


13
Gói TCP là gói IP có thông tin tiêu đề TCP trong đó. Đây là cách nói chung. Xin đừng quá thô lỗ; nó chỉ phản ánh xấu về bạn, vì bạn cũng đồng thời sai.
Phil P
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.