ნედლი Python სოკეტი არ აწარმოებს მოლაპარაკებას პროქსიზე მხოლოდ იმიტომ, რომ არსებობს http_proxy. აპლიკაციისთვის, რომელიც საკუთარ TCP პროტოკოლზე საუბრობს, გამოიყენეთ კონექტორი, რომელსაც ესმის სერვისი პროქსის ბოლო წერტილში.

როცა PySocks უკვე ხელმისაწვდომია, შექმენით კავშირი ცხადად:

import socks

with socks.socksocket() as connection:
    connection.set_proxy(socks.SOCKS5, '203.0.113.10', 1080)
    connection.settimeout(10)
    connection.connect(('example.com', 12345))
    # Exchange the destination protocol here.

შეცვალეთ დოკუმენტაციის მისამართი და დანიშნულების პორტი. დაშვებული საჯარო დანიშნულებისთვის აირჩიეთ კანდიდატი SOCKS5 პროქსების სიიდან მხოლოდ მას შემდეგ, რაც შეამოწმებთ, რომ ის ნებას რთავს აპლიკაციის სამიზნე პორტს. შეამოწმეთ დაყენებული პაკეტი, მხარდაჭერილი მეთოდები და ბოლო წერტილის მოთხოვნები PySocks-ის ინტერფეისის მიხედვით.

აპლიკაციის დარჩენილი ნაწილი თავის პროტოკოლს ამ დამყარებულ კავშირზე ცვლის. თუ ეს პროტოკოლი იყენებს TLS-ს, დაიწყეთ ის პროქსის მოლაპარაკების შემდეგ და დაადასტურეთ დანიშნულების ნამდვილი ჰოსტის სახელი. პროქსის ავთენტიფიკაცია ამყარებს მარშრუტს; ის არ უზრუნველყოფს დანიშნულებაზე შესვლას ან დაშიფვრას.

SOCKS მსმენელს SOCKS მოლაპარაკება სჭირდება. HTTP სერვისს სჭირდება CONNECT-ის უნარის მქონე კონექტორი თვითნებური TCP დანიშნულებისთვის და შეიძლება უარყოს მისი პორტი. აირჩიეთ კონექტორი რეალურად შეთავაზებული სერვისის მიხედვით, ნაცვლად იმისა, რომ შეცვალოთ მისამართი და დატოვოთ არასწორი ხელის ჩამორთმევა.

შენაცვლება ადგილობრივად შეინახეთ. კლასის socket.socket-ზე მინიჭებამ შეიძლება იმოქმედოს დაუკავშირებელ იმპორტებსა და ბიბლიოთეკებზე. თუ სოკეტის შექმნას სხვა ბიბლიოთეკა ფლობს, გამოიყენეთ მისი დოკუმენტირებული კავშირის ქარხანა ან პროქსის პარამეტრი; ლექსიკონი, რომელსაც ის არასოდეს კითხულობს, ვერ შეცვლის ამ კავშირს.

დაკავშირებული სტატიები