พร็อกซีทำงานอย่างไร


12

หากฉันต้องการเชื่อมต่อเพื่อพูดว่า IP 100.100.100.100, พอร์ต 80 คอมพิวเตอร์ของฉันจะส่งแพ็คเก็ต tcp พร้อมที่อยู่นี้ลงในสาย

ตอนนี้ถ้าฉันใช้พร็อกซีเซิร์ฟเวอร์บอกว่า 200.200.200.200 พอร์ต 8080 (พร็อกซีชนิดดังกล่าวที่คุณสามารถตั้งค่าใน Internet explorer) กระบวนการนี้เปลี่ยนแปลงอย่างไร

เมื่อฉันยังต้องการเชื่อมต่อกับ IP เดียวกันส่วนหัว IP จะรวม IP ปลายทางหรือ IP พร็อกซีหรือทั้งสองอย่างหรือไม่

ฉันไปแล้วมีหลายร้อยหน้าที่บอกวิธีตั้งค่าพร็อกซี แต่ไม่มีใครอธิบายวิธีการทำงานภายใต้ประทุน

คำตอบ:


13

คำขอ HTTP ถูกส่งจากไคลเอนต์ไปยังพอร์ต 8080 ของ Proxy Server จากนั้นพร็อกซีเซิร์ฟเวอร์เริ่มต้นคำขอ HTTP ใหม่ไปยังไซต์ปลายทาง พร็อกซีขึ้นอยู่กับการกำหนดค่ามักจะเพิ่มส่วนหัว "X-Forwarded-For" ในคำขอ HTTP ล็อกไฟล์บนเว็บไซต์ปลายทางจะแสดงที่อยู่ IP ของพร็อกซี แต่อาจกำหนดค่าหรือไม่ใช้เพื่อบันทึกที่อยู่ "X-Forwarded-For"

นั่นคือการกำหนดค่าทั่วไป แต่ซอฟต์แวร์พร็อกซีจะอนุญาตให้คุณปรับแต่งได้ทุกประเภท

แก้ไข: ฉันควรทราบว่าเมื่อฉันอ่านคำถามของคุณในตอนแรกฉันมีความคิดว่าคุณกำลังถามเกี่ยวกับ HTTP Proxy โดยเฉพาะเช่น squid หรือ nginx มีพร็อกซี่หลายประเภทให้เลือก ใน Internet Explorer คุณมักจะใช้พร็อกซี HTTP แต่มีประเภทอื่น ๆ อีกมากมายเช่นกัน


ใช่มันขึ้นอยู่กับซอฟต์แวร์ที่คุณใช้เป็นพร็อกซีเซิร์ฟเวอร์และวิธีการกำหนดค่า ดูเช่น HttpProxyModule สำหรับ Nginx: wiki.nginx.org/HttpProxyModule
entropo

3
หากคำขอในส่งไปยังพร็อกซีเซิร์ฟเวอร์เท่านั้นพร็อกซีจะทราบที่อยู่ปลายทางที่ฉันต้องการเชื่อมต่อได้อย่างไร พรอกซีทำงานในระดับ http หรือที่ระดับ tcp หรือไม่
ดี้

เบราว์เซอร์ที่ทำการร้องขอไปยังพรอกซีร้องขอ URI แบบเต็ม จากนั้นพร็อกซีเซิร์ฟเวอร์ทำการค้นหา DNS และสร้างคำขอ HTTP ของตัวเองไปยังเว็บไซต์เป้าหมาย
emgee

1
พร็อกซี http เช่น Squid (ซึ่งฉันใช้คำตอบอยู่) ทำงานที่ชั้นแอปพลิเคชัน
emgee

1
@emgee: โปรโตคอล HTTP ยังมีวิธีการเชื่อมต่อดังนั้นจึงเป็นไปได้ที่จะเชื่อมต่อผ่านพร็อกซี HTTP ไปยังเซิร์ฟเวอร์ TCP (หากพร็อกซีอนุญาต) และเซิร์ฟเวอร์ TCP นั้นไม่จำเป็นต้องเป็นเซิร์ฟเวอร์ที่พูด HTTP
vtest

2

HTTP เป็นโปรโตคอล Layer 7 ดังนั้นอย่าสับสน เมื่อคุณใช้พร็อกซี HTTP และพิมพ์ว่า google.com ส่วนหัว HTTP ยังคงเป็น google.com เหมือนกัน แต่ที่อยู่ IP ปลายทางจะเป็นที่อยู่ IP ของพร็อกซีแหล่งที่มาจะเป็นโฮสต์ IP ไปยังหมายเลขพอร์ตที่กำหนดเอง 8080


1

ในการใช้พร็อกซี HTTP คำขอจะถูกส่งจากไคลเอนต์ไปยังที่อยู่ IP ของพร็อกซีเซิร์ฟเวอร์แทนที่จะไปยังเซิร์ฟเวอร์ปลายทาง ให้ผู้รับมอบฉันทะจากนั้นจะต้องอ่านหัว HTTPเพื่อแยกขอ URI request-URI มีชื่อหรือ IP ของเซิร์ฟเวอร์ปลายทางและพร็อกซีเซิร์ฟเวอร์ใช้ข้อมูลนั้นเพื่อส่งต่อคำขอ

จำเพาะ HTTPช่วยให้สายการร้องขอเพื่อยกเว้นชื่อเซิร์ฟเวอร์และพอร์ตเมื่อพร็อกซี่ไม่ได้ใช้ (ตั้งแต่เหล่านี้จะไม่จำเป็นถ้าขอได้รับการส่งโดยตรงไปยังเซิร์ฟเวอร์ที่) แต่ตามข้อกำหนด ...

แบบฟอร์มสัมบูรณ์นั้นจำเป็นต้องมีเมื่อมีการร้องขอไปยังพรอกซี

ดังนั้นเมื่อไม่ใช้พร็อกซีบรรทัดคำขออาจมีลักษณะดังนี้:

GET /robots.txt HTTP/1.1

แต่หากต้องการใช้พร็อกซีบรรทัดจะต้องรวมชื่อเซิร์ฟเวอร์ (และพอร์ตหากไม่ใช่ 80):

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

ด้านการตอบสนองหากการดำเนินการนั้นง่ายกว่าเนื่องจากพร็อกซีเซิร์ฟเวอร์อาจเพียงส่งต่อการตอบสนองคำต่อคำผ่านซ็อกเก็ตคำขอที่สร้างไว้ล่วงหน้า


จาก "HTTP The Definitive Guide", pg. 145: "HTTP / 1.1 ตอนนี้ต้องการเซิร์ฟเวอร์เพื่อจัดการ URIs แบบเต็มสำหรับทั้งคำขอพร็อกซีและเซิร์ฟเวอร์ แต่ในทางปฏิบัติเซิร์ฟเวอร์ที่ปรับใช้จำนวนมากยังคงยอมรับ URIs เพียงบางส่วนเท่านั้น"
nobar

ไม่ใช่วิธีมาตรฐาน แต่พร็อกซีอาจสามารถใช้Hostส่วนหัวเพื่อทำ URI บางส่วนได้หากไม่ได้ระบุ URI แบบสัมบูรณ์ไว้ในบรรทัดคำขอ
nobar

วิธีการนี้ไม่สามารถใช้งานได้หากการเชื่อมต่อมีการเข้ารหัสจากต้นทางถึงปลายทาง (HTTPS) security.stackexchange.com/questions/101721/ …
ดี

-7

ไม่มีสิ่งเช่น "tcp packet" TCP ทำงานกับสตรีมข้อมูล มีแพ็กเก็ต IP

ดูเหมือนว่าคุณขาดความรู้พื้นฐานเกี่ยวกับระบบเครือข่ายฉันแนะนำให้คุณอ่านหนังสือเกี่ยวกับ TCP / IP ดูเหมือนว่าทุกคนที่ชื่นชอบจะเป็น "TCP / IP illustrated" โดย W. Richard Stevens

กลับไปที่คำถามของคุณ

พร็อกซีเป็นคนกลาง:

[คุณ] - [proxy] - [เซิร์ฟเวอร์ที่คุณต้องการเชื่อมต่อ]

ขณะนี้มีการเชื่อมต่อที่ต่างกันสองแบบ:

[คุณ] - (การเชื่อมต่อพร็อกซีของคุณ) - [พร็อกซี] - (การเชื่อมต่อพร็อกซีเซิร์ฟเวอร์) - [เซิร์ฟเวอร์ที่คุณต้องการเชื่อมต่อ]

เมื่อคุณคิดว่าคุณกำลังเชื่อมต่อกับเซิร์ฟเวอร์ผ่านทางพร็อกซีคุณกำลังเชื่อมต่อกับพร็อกซีจริง ๆ และบอกให้คุณต้องการเข้าถึงเซิร์ฟเวอร์ที่แน่นอน จากนั้นพร็อกซีเปิดการเชื่อมต่อที่สองจากตัวเองไปยังเซิร์ฟเวอร์นั้นและทำหน้าที่เป็นคนกลางผ่านข้อมูลในทั้งสองทิศทาง


13
แพ็กเก็ต TCP เป็นแพ็กเก็ต IP ที่มีข้อมูลส่วนหัว TCP อยู่ นี่คือสำนวนทั่วไป โปรดอย่าหยาบคายมากเกินไป มันสะท้อนถึงคุณไม่ดีเท่านั้นเนื่องจากคุณผิดในเวลาเดียวกัน
Phil P
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.