وجود 0.0.0.0:0 در درخواست UDP ASSOCIATE در Indy می‌تواند عمدی باشد. این درخواست نقطه پایانی UDP مورد انتظار سمت کلاینت را توصیف می‌کند و RFC 1928 زمانی که ناشناخته است صفرها را مجاز می‌داند. سرویس نهایی را انتخاب نمی‌کند.

BND.ADDR/BND.PORT در پاسخ، رله‌ای را مشخص می‌کند که کلاینت datagramهای کپسوله‌شده را به آن می‌فرستد.

TCP control: client → SOCKS5 proxy → UDP association reply
UDP payload: client → returned relay address → target service

در Indy، TIdUDPClient.Connect متد OpenUDP پراکسی شفاف را فراخوانی می‌کند. TIdSocksInfo فیلدهای انجمن صفر را تأمین می‌کند. بعداً SendBuffer سرویس مورد نظر را به SendToUDP می‌دهد که سرآیند مقصد UDP در SOCKS را پیش از داده‌های برنامه می‌سازد.

اگر انجمن موفق شود اما ترافیک شکست بخورد، رله برگشتی، مقصد کدشده و مسیر پاسخ UDP را بررسی کنید. NAT/فایروال‌ها می‌توانند تبادل TCP را بپذیرند و در همان حال UDP را مسدود کنند.

اتصال کنترل TCP را باز نگه دارید؛ بستن آن انجمن را پایان می‌دهد. SOCKS4/4a این عملیات را ندارد و نام SOCKS5 به‌تنهایی تضمین نمی‌کند که سرور از UDP پشتیبانی کند.

مقالات مرتبط