Perl SOCKS ulanishini ochgandan keyin TLS qo'shing
IO::Socket::SSL ni IO::Socket::Socks ulanishi ustiga qo'ying va manzil xost nomini tekshiring.
SOCKS ulanishi va TLS ulanishi turli ishlarni bajaradi. Avval SOCKS orqali manzilga bayt oqimini oling. So'ngra shu oqim ustida TLS boshlang va proksi emas, manzil veb-saytini aniqlang.
HTTPS uslubidagi TLS oxirgi nuqtasi uchun tartib bunday bo'lishi mumkin:
use IO::Socket::Socks;
use IO::Socket::SSL;
my $target = 'example.com';
my $socket = IO::Socket::Socks->new(
SocksVersion => 5,
ProxyAddr => '127.0.0.1',
ProxyPort => 1080,
ConnectAddr => $target,
ConnectPort => 443,
) or die $!;
IO::Socket::SSL->start_SSL(
$socket,
SSL_hostname => $target,
SSL_verifycn_name => $target,
SSL_verifycn_scheme => 'http',
SSL_verify_mode => SSL_VERIFY_PEER,
) or die IO::Socket::SSL::errstr();
Ruxsat etilgan ommaviy proksi yo'lidagi ommaviy HTTPS nishoni uchun SOCKS5 proksilar ro'yxati ProxyAddr va ProxyPort uchun nomzodlar taklif qiladi. Bu parcha transport qatlamlarini quradi; dastur baribir manzil kutgan protokolni yuborishi va tugagach soketni yopishi kerak.
Ko'zda tutilgan hamkor nomini saqlang
Proksi oxirgi nuqtasi birinchi ulanishga tegishli. TLS SNI va xost nomini tekshirish example.com bilan bog'liq. O'sha bosqichda proksi xost nomidan foydalanish noto'g'ri identifikatsiyani so'rashi yoki tekshirishi mumkin.
Ishonch omborini sozlash yana bir mustaqil talab. Diagnostik misoldan ko'chirilgan hamma narsaga ishonadigan callback o'rniga dasturning ko'zda tutilgan CA sozlamasidan foydalaning.
Agar SOCKS bosqichi muvaffaqiyatsiz bo'lsa, TLS parametrlarini o'zgartirish uni tuzatmaydi. Agar SOCKS muvaffaqiyatli bo'lib, TLS muvaffaqiyatsiz bo'lsa, sertifikat va xost nomi xatosini dalil sifatida saqlang, uni oddiy proksi uzilishi deb hisoblamang.
Modul nomlari ham muhim: IO::Socket::Socks va IO::Socket::SSL turli konstruktorlar va yangilash xatti-harakatini taqdim etadi. Faqat proksiga yetib borgan xom TCP soket hali SOCKS manzil muzokaralarini tugatmagan.