Python TCP ସକେଟ ପାଇଁ SOCKS-ସଚେତନ କନେକ୍ଟର
ଏକ ପ୍ରକ୍ସି-ସଚେତନ ସକେଟ କନେକ୍ଟର ବାଛନ୍ତୁ ଏବଂ ଏହାର ପରିସରକୁ Python ର ପ୍ରକ୍ରିୟା-ବ୍ୟାପୀ ସକେଟ କାର୍ଯ୍ୟାନ୍ୱୟନଠାରୁ ଅଲଗା ରଖନ୍ତୁ।
http_proxy ଥିବାରୁ ହିଁ ଏକ ସାଧାରଣ Python ସକେଟ ପ୍ରକ୍ସି ସହିତ ବୁଝାମଣା କରେ ନାହିଁ। ନିଜର 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 ସେବାକୁ ଇଚ୍ଛାଧୀନ TCP ଗନ୍ତବ୍ୟ ପାଇଁ CONNECT ସକ୍ଷମ କନେକ୍ଟର ଆବଶ୍ୟକ ଏବଂ ଏହା ଏହାର ପୋର୍ଟକୁ ଅସ୍ୱୀକାର କରିପାରେ। ଭୁଲ ହ୍ୟାଣ୍ଡସେକ ଛାଡ଼ି ଠିକଣା ବଦଳାଇବା ପରିବର୍ତ୍ତେ, ପ୍ରକୃତରେ ପ୍ରଦାନ କରାଯାଉଥିବା ସେବା ଅନୁସାରେ କନେକ୍ଟର ବାଛନ୍ତୁ।
ପ୍ରତିସ୍ଥାପନକୁ ସ୍ଥାନୀୟ ରଖନ୍ତୁ। socket.socket କୁ ଏକ କ୍ଲାସ ନ୍ୟସ୍ତ କରିବା ଅସମ୍ବନ୍ଧିତ ଇମ୍ପୋର୍ଟ ଏବଂ ଲାଇବ୍ରେରୀକୁ ପ୍ରଭାବିତ କରିପାରେ। ଅନ୍ୟ ଲାଇବ୍ରେରୀ ସକେଟ ସୃଷ୍ଟିର ମାଲିକ ଥିଲେ, ଏହାର ଡକ୍ୟୁମେଣ୍ଟେଡ ସଂଯୋଗ ଫ୍ୟାକ୍ଟ୍ରି କିମ୍ବା ପ୍ରକ୍ସି ବିକଳ୍ପ ବ୍ୟବହାର କରନ୍ତୁ; ଏହା କେବେ ନ ପଢ଼ୁଥିବା ଏକ ଡିକ୍ସିନାରୀ ସେହି ସଂଯୋଗକୁ ବଦଳାଇପାରିବ ନାହିଁ।