{"id":489228,"date":"2026-07-30T17:48:22","date_gmt":"2026-07-30T17:48:22","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=489228"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=489228","title":{"rendered":"\u0418 \u0435\u0449\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u0438\u0437 \u043c\u0438\u0440\u0430 \u043f\u0440\u043e\u043a\u0441\u0438 \u0438 VPN"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0416\u0438\u0437\u043d\u044c \u0434\u0438\u0441\u0441\u0438\u0434\u0435\u043d\u0442\u0430-\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u0442\u043e\u0440\u0430 \u043d\u0435 \u0441\u0438\u0434\u0438\u0442 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435, \u0430 \u043a\u043e\u043f\u0438\u043b\u043a\u0430 \u0431\u0435\u0437\u0443\u043c\u043d\u044b\u0445 \u043d\u0430\u0445\u043e\u0434\u043e\u043a \u043f\u043e\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u0443\u0441\u043f\u0435\u0432\u0430\u0435\u0448\u044c \u043f\u0440\u043e \u043d\u0438\u0445 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c. \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0442\u043e, \u043d\u0430 \u0447\u0435\u043c \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438\u0441\u044c <a href=\"https:\/\/habr.com\/ru\/articles\/1036100\" rel=\"noopener noreferrer nofollow\">\u0432 \u043f\u0440\u043e\u0448\u043b\u044b\u0439 \u0440\u0430\u0437 &#8212; \u0442\u0443\u043d\u043d\u0435\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 ICMP, DNS \u0438 serverless-\u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/a> \u044d\u0442\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0445\u043e\u0440\u043e\u0448\u043e, \u043d\u043e \u0432\u043e\u0442 \u0432\u0430\u043c \u0435\u0449\u0435 \u0442\u0440\u0438 \u0441\u0432\u0435\u0436\u0438\u0435 \u043d\u0430\u0445\u043e\u0434\u043a\u0438: \u0442\u0443\u043d\u043d\u0435\u043b\u044c \u0447\u0435\u0440\u0435\u0437 \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e, \u0447\u0442\u043e \u0443\u043c\u0435\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0444\u0430\u0439\u043b\u044b, \u0442\u0443\u043d\u043d\u0435\u043b\u044c \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u044f\u0449\u0438\u043a, \u0438 \u0440\u0435\u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0434\u0440\u0435\u0432\u043d\u0435\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u043e\u0431\u0445\u043e\u0434\u0430 \u0447\u0435\u0440\u0435\u0437 CDN \u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u0432\u0441\u0435 \u0437\u0430\u0431\u044b\u043b\u0438.<\/p>\n<h2>File Tunnel<\/h2>\n<p>\u0418\u0434\u0435\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0438 \u043e\u0442 \u0442\u043e\u0433\u043e \u0433\u0435\u043d\u0438\u0430\u043b\u044c\u043d\u0430\u044f: \u0435\u0441\u043b\u0438 \u0434\u0432\u0430 \u0445\u043e\u0441\u0442\u0430 \u0438\u043c\u0435\u044e\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u0438 \u0442\u043e\u043c\u0443 \u0436\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u043c\u0443 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0443, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 \u044d\u0442\u0438\u043c\u0438 \u0445\u043e\u0441\u0442\u0430\u043c\u0438. <a href=\"https:\/\/github.com\/fiddyschmitt\/File-Tunnel\" rel=\"noopener noreferrer nofollow\"><strong>File-Tunnel<\/strong><\/a> \u0441\u043b\u0443\u0448\u0430\u0435\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 TCP-\u043f\u043e\u0440\u0442, \u0438 \u043a\u043e\u0433\u0434\u0430 \u043d\u0430 \u043d\u0435\u0433\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435, \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b. \u0422\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u0444\u0430\u0439\u043b \u0447\u0438\u0442\u0430\u0435\u0442 \u0434\u0440\u0443\u0433\u0430\u044f \u043a\u043e\u043f\u0438\u044f File-Tunnel \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435, \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0438\u0437 \u043d\u0435\u0433\u043e TCP-\u043f\u043e\u0442\u043e\u043a \u0438 \u043f\u0440\u043e\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u0434\u0430\u043b\u044c\u0448\u0435, \u043a\u0443\u0434\u0430 \u0441\u043a\u0430\u0436\u0443\u0442. \u0412 \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0434\u0430\u043d\u043d\u044b\u0435 \u043b\u0435\u0442\u044f\u0442 \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 \u0432\u0442\u043e\u0440\u043e\u0439 \u0444\u0430\u0439\u043b. \u0418 \u0447\u0442\u043e\u0431\u044b \u0444\u0430\u0439\u043b\u044b \u043d\u0435 \u0440\u043e\u0441\u043b\u0438 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043e\u043d \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u0447\u0438\u0449\u0430\u044e\u0442\u0441\u044f\/\u0440\u043e\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f.<\/p>\n<p>\u201c\u0424\u0430\u0439\u043b\u043e\u0432\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435, \u0434\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0434\u043e\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043e\u0431\u0430 \u0445\u043e\u0441\u0442\u0430&#187; \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0447\u0435\u043c \u0443\u0433\u043e\u0434\u043d\u043e: \u0440\u0430\u0441\u0448\u0430\u0440\u0435\u043d\u043d\u0430\u044f \u043f\u0430\u043f\u043a\u0430 \u043f\u043e SMB \u0438\u043b\u0438 NFS, FTP-\u0441\u0435\u0440\u0432\u0435\u0440, \u0434\u0438\u0441\u043a, \u043f\u0440\u043e\u0431\u0440\u043e\u0448\u0435\u043d\u043d\u044b\u0439 \u0432\u043d\u0443\u0442\u0440\u044c RDP \u0438\u043b\u0438 Citrix-\u0441\u0435\u0441\u0441\u0438\u0438, VirtualBox shared folder, WSL, Docker volume, Dropbox.\u00a0<\/p>\n<p>\u041d\u043e \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u0441\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u0434\u0430\u0432\u043d\u043e: \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043d\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 S3 \u0438 WebDAV. \u0418 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0441\u0435 \u044d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u043f\u043b\u043e\u0445\u043e.<\/p>\n<p>\u0418 \u0432\u043e\u0442 \u0442\u0443\u0442 \u043a\u0440\u043e\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0435 \u0432\u0430\u0436\u043d\u043e\u0435: S3-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u043a\u0442\u043e, \u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0437\u0430 \u043e\u0447\u0435\u043d\u044c \u0432\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0435 \u0434\u0435\u043d\u044c\u0433\u0438 (\u0430 \u0447\u0430\u0441\u0442\u043e \u0438 \u0434\u0430\u044e\u0442 \u0447\u0442\u043e-\u0442\u043e \u0442\u0438\u043f\u0430 1 \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442\u0430 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0433\u043e \u0442\u0430\u0440\u0438\u0444\u0430) &#8212; \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0437\u0430\u0432\u0435\u0441\u0442\u0438 \u0431\u0430\u043a\u0435\u0442 \u0443 \u043b\u044e\u0431\u043e\u0433\u043e \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u043f\u0440\u0438\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430, \u0438 \u0443 \u0432\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442 \u0434\u043b\u044f \u0442\u0443\u043d\u043d\u0435\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043d\u0430\u0440\u0443\u0436\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u0441\u0430\u043c\u044b\u0435 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e\u043c\u0443 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0443.<\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u0432\u0441\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<br \/>\u0421\u0442\u043e\u0440\u043e\u043d\u0430 A:<\/p>\n<p><code>ft.exe --s3 --bucket mybucket --region ru-moscow-1 --access-key XXXXXXXX --secret-key XXXXXXXX\u00a0 -L 5000:192.168.1.20:3389<\/code><\/p>\n<p>\u0421\u0442\u043e\u0440\u043e\u043d\u0430 B:<\/p>\n<p><code>ft.exe --s3 --bucket mybucket --region ru-moscow-1 --access-key XXXXXXXX --secret-key XXXXXXXX\u00a0<\/code><\/p>\n<p>\u0418 \u0434\u043b\u044f \u043d\u0435-AWS \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c &#8212;endpoint. \u041a\u043b\u044e\u0447\u0438 \u043c\u043e\u0436\u043d\u043e (\u0438 \u043d\u0443\u0436\u043d\u043e) \u043d\u0435 \u0441\u0432\u0435\u0442\u0438\u0442\u044c \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435, \u0430 \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f FT_S3_ACCESS_KEY \/ FT_S3_SECRET_KEY.\u00a0<\/p>\n<p>\u0421 WebDAV \u0432\u0441\u0435 \u0435\u0449\u0435 \u043f\u0440\u043e\u0449\u0435 &#8212; \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 \u0434\u0430\u0436\u0435\u2026 Mail.ru Cloud:<\/p>\n<p><code>ft.exe --webdav --url https:\/\/yoururl.com\/path -u foo -p bar -L 5000:192.168.1.20:3389<\/code><\/p>\n<h2>True IMAP Tunnel (Secure)<\/h2>\n<p>\u041f\u043e\u043c\u043d\u0438\u0442\u0435 <a href=\"https:\/\/github.com\/noiseonwires\/yac-ws-bridge\" rel=\"noopener noreferrer nofollow\">Bridge To Freedom<\/a> \u0438\u0437 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 &#8212; \u0442\u0443\u043d\u043d\u0435\u043b\u044c \u0447\u0435\u0440\u0435\u0437 \u0432\u0435\u0431\u0441\u043e\u043a\u0435\u0442\u044b \u0432 \u042f\u043d\u0434\u0435\u043a\u0441 Serverless Functions? \u0423 \u0435\u0433\u043e \u0430\u0432\u0442\u043e\u0440\u0430 \u0432\u044b\u0448\u0435\u043b \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0441\u043d\u0430\u0440\u044f\u0434 \u0432 \u0442\u0443 \u0436\u0435 \u0441\u0442\u0435\u043f\u044c, \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f&#8230; \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0430\u044f \u043f\u043e\u0447\u0442\u0430. \u0412\u0441\u0442\u0440\u0435\u0447\u0430\u0439\u0442\u0435: <a href=\"https:\/\/github.com\/noiseonwires\/true-imap-tunnel\" rel=\"noopener noreferrer nofollow\"><strong>True IMAP Tunnel (Secure)<\/strong><\/a>.<\/p>\n<p>\u0418\u0434\u0435\u044f \u0432 \u043b\u043e\u0431: \u043e\u0431\u0430 \u043a\u043e\u043d\u0446\u0430 \u0442\u0443\u043d\u043d\u0435\u043b\u044f \u043b\u043e\u0433\u0438\u043d\u044f\u0442\u0441\u044f \u0432 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 IMAP-\u0430\u043a\u043a\u0430\u0443\u043d\u0442 \u043d\u0430 \u043f\u043e\u0447\u0442\u043e\u0432\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 (\u0438\u043b\u0438 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u044f), \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043f\u043e \u0434\u0432\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0430\u043f\u043a\u0438 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 &#8212; \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0438 \u0432 \u0434\u0440\u0443\u0433\u0443\u044e. \u041f\u0430\u043a\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c, \u0444\u0440\u0435\u0439\u043c \u0437\u0430\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0447\u0435\u0440\u043d\u043e\u0432\u0438\u043a \u043f\u0438\u0441\u044c\u043c\u0430 \u0438 \u043a\u043b\u0430\u0434\u0435\u0442\u0441\u044f \u0432 \u043f\u0430\u043f\u043a\u0443 \u0447\u0435\u0440\u0435\u0437 APPEND. \u041d\u0438 \u043e\u0434\u043d\u043e \u0438\u0437 \u044d\u0442\u0438\u0445 &#171;\u043f\u0438\u0441\u0435\u043c&#187; \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0443\u0445\u043e\u0434\u0438\u0442 \u043f\u043e SMTP \u0438 \u043d\u0438\u043a\u043e\u043c\u0443 \u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f &#8212; \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0431\u0430\u0439\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u043e\u0447\u0442\u043e\u0432\u043e\u0433\u043e \u044f\u0449\u0438\u043a\u0430, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0435 \u0441 \u043e\u0431\u0435\u0438\u0445 \u0441\u0442\u043e\u0440\u043e\u043d. \u041f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c \u0447\u0435\u0440\u0435\u0437 IDLE (\u043b\u0438\u0431\u043e \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 polling, \u0435\u0441\u043b\u0438 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 IDLE) \u0432\u0438\u0434\u0438\u0442 \u043d\u043e\u0432\u044b\u0439 \u0447\u0435\u0440\u043d\u043e\u0432\u0438\u043a, \u0432\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u0442 \u0438\u0437 \u043d\u0435\u0433\u043e \u0444\u0440\u0435\u0439\u043c, \u0434\u043e\u0441\u0442\u0430\u0435\u0442 \u0438\u0437 \u043d\u0435\u0433\u043e \u0434\u0430\u043d\u043d\u044b\u0435, \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442 \u043f\u0438\u0441\u044c\u043c\u043e \u043a\u0430\u043a \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0438 \u043f\u043e\u0437\u0436\u0435 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 EXPUNGE \u043f\u0430\u0447\u043a\u043e\u0439. \u0412 \u043e\u0431\u0449\u0435\u043c, \u043e\u0431\u044b\u0447\u043d\u044b\u0439 TCP \u043f\u043e \u0441\u0432\u043e\u0435\u0439 \u0441\u0443\u0442\u0438, \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u043e\u043a\u0435\u0442\u0430 &#8212; \u043f\u0430\u043f\u043a\u0430 \u043d\u0430 \u043f\u043e\u0447\u0442\u043e\u0432\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435.<\/p>\n<p>\u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u0432\u0441\u0435 \u0444\u0440\u0435\u0439\u043c\u044b \u043c\u043e\u0436\u043d\u043e \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c AES-256-GCM \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u043a\u043b\u0430\u0441\u0442\u044c \u0432 \u044f\u0449\u0438\u043a (\u043f\u0443\u0441\u0442\u043e\u0439 passphrase \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435), \u0430 \u0435\u0449\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c, \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e &#171;\u043f\u0438\u0441\u044c\u043c\u043e&#187; \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u043a\u0442\u043e \u0432\u0434\u0440\u0443\u0433 \u043e\u0442\u043a\u0440\u043e\u0435\u0442 \u044d\u0442\u0443 \u043f\u0430\u043f\u043a\u0443 \u0432 \u043e\u0431\u044b\u0447\u043d\u043e\u043c \u043f\u043e\u0447\u0442\u043e\u0432\u043e\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u0435 &#8212; \u0442\u0435\u043c\u0443, \u0432\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u0435\u043a\u0441\u0442\u0430, \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435, \u0447\u0442\u043e\u0431\u044b \u0442\u0443\u043d\u043d\u0435\u043b\u044c \u043d\u0435 \u0442\u0430\u043a \u0441\u0438\u043b\u044c\u043d\u043e \u0431\u0440\u043e\u0441\u0430\u043b\u0441\u044f \u0432 \u0433\u043b\u0430\u0437\u0430.<\/p>\n<p>\u0410\u0432\u0442\u043e\u0440 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0432\u0441\u0435 \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430\u043c\u0438: Gmail, Outlook, Seznam, Mail.ru, Yandex, Timeweb, Rambler &#8212; \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e, \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c.<\/p>\n<p>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 &#8212; \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 Go-\u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a \u0434\u043b\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0442\u0443\u043d\u043d\u0435\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 TCP: SOCKS5 (\u0442\u043e\u0442 \u0436\u0435 Dante), VLESS (Xray\/sing-box), SSH &#8212; \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e. <br \/>\u0410 \u0435\u0449\u0435 \u044d\u0442\u043e \u0432\u0441\u0435 \u0434\u0435\u043b\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u0430\u043a \u043f\u043b\u0430\u0433\u0438\u043d Shadowsocks (SIP003), \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u0434 Shadowsocks Android, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u043e\u0436\u043d\u043e \u0438 \u0441 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430.<\/p>\n<p>\u0412 README \u0430\u0432\u0442\u043e\u0440 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u043c\u0438\u0433\u0438\u0432\u0430\u0435\u0442: \u0430\u0431\u0431\u0440\u0435\u0432\u0438\u0430\u0442\u0443\u0440\u0430 \u201cTrue IMAP Tunnel (Secure)\u201d \u0431\u044b\u043b\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u0430 \u043d\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e.<\/p>\n<h2>Meek<\/h2>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u0431 \u043e\u043b\u0434\u0441\u043a\u0443\u043b\u044c\u043d\u044b\u0445 \u0438\u0434\u0435\u044f\u0445. XHTTP &#8212; \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e, \u043e\u043d \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u0435\u043d \u0438 \u043f\u0440\u043e\u043b\u0435\u0437\u0430\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u043c\u043d\u043e\u0433\u0438\u0435 CDN. \u0410 \u0447\u0435\u0440\u0435\u0437 \u043c\u043d\u043e\u0433\u0438\u0435 \u043d\u0435 \u043f\u0440\u043e\u043b\u0435\u0437\u0430\u0435\u0442 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 CDN \u043d\u0435 \u043b\u044e\u0431\u0438\u0442 \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u043b\u0433\u043e \u0432\u0438\u0441\u044f\u0449\u0438\u0435 HTTP-\u0441\u0435\u0441\u0441\u0438\u0438 \u0441 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u0443, \u0438\u043b\u0438 \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435). \u0414\u0430 \u0438 CDN \u0432 \u043c\u0438\u0440\u0435 \u0438 \u0432 \u0441\u0442\u0440\u0430\u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435 \u0442\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u044f\u043c \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043d\u044b\u0445. \u0418 \u0442\u0443\u0442 \u0441\u0430\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043f\u0440\u043e \u0442\u043e, \u0447\u0435\u043c \u0435\u0449\u0435 \u0434\u0435\u0434\u044b \u043f\u0440\u043e\u0431\u0438\u0432\u0430\u043b\u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438: <a href=\"https:\/\/gitlab.torproject.org\/tpo\/anti-censorship\/pluggable-transports\/meek\" rel=\"noopener noreferrer nofollow\"><strong>Meek<\/strong><\/a> \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 Tor.<\/p>\n<p>\u0412 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441 XHTTP, \u0442\u0430\u043c \u0432\u0441\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u043e \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430: \u043a\u043b\u0438\u0435\u043d\u0442 \u0448\u043b\u0435\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 HTTP POST-\u0437\u0430\u043f\u0440\u043e\u0441\u044b (\u0442\u0435\u043b\u043e \u0434\u043e 64 \u041a\u0411) \u043d\u0430 URL, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a X-Session-Id, \u0447\u0442\u043e\u0431\u044b \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u043e\u043d\u0438\u043c\u0430\u043b, \u043a\u0430\u043a\u043e\u043c\u0443 TCP-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044e \u044d\u0442\u0438 \u0431\u0430\u0439\u0442\u044b \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442. \u0421\u0435\u0440\u0432\u0435\u0440 \u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 &#171;X-Session-Id -&gt; \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0435 TCP-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435&#187;, \u043f\u0438\u0448\u0435\u0442 \u0442\u0443\u0434\u0430 \u043f\u0440\u0438\u0448\u0435\u0434\u0448\u0438\u0435 \u0431\u0430\u0439\u0442\u044b, \u043d\u0435\u0434\u043e\u043b\u0433\u043e \u0436\u0434\u0435\u0442, \u043d\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0432 \u043e\u0442\u0432\u0435\u0442, \u0438 \u043e\u0442\u0434\u0430\u0435\u0442 \u044d\u0442\u043e \u0432 \u0442\u0435\u043b\u0435 HTTP-\u043e\u0442\u0432\u0435\u0442\u0430. \u0415\u0441\u043b\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u043d\u0435\u0447\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c, \u043e\u043d \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0441\u043b\u0430\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u0435 POST-\u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e HTTP &#8212; \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0441 \u0438\u043d\u0438\u0446\u0438\u0430\u0442\u0438\u0432\u043e\u0439 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430; \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b polling-\u0430 \u043f\u043b\u0430\u0432\u043d\u043e \u0440\u0430\u0441\u0442\u0435\u0442 \u0441 100 \u043c\u0441 \u0434\u043e 5 \u0441\u0435\u043a\u0443\u043d\u0434 \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0435.\u00a0<\/p>\n<p>\u0418 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0435, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Meek \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f (\u044a\u043e\u0442\u044c \u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430\u043c\u0438) \u0434\u0430\u0436\u0435 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 CDN, \u043d\u043e \u0438 \u0447\u0435\u0440\u0435\u0437 \u0442\u0443\u043f\u044b\u0435 shared-\u0445\u043e\u0441\u0442\u0438\u043d\u0433\u0438 &#8212; \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0447\u0442\u043e\u0431\u044b \u0442\u0430\u043c \u0431\u044b\u043b\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 PHP \u0438\u043b\u0438 Python \u0441\u043a\u0440\u0438\u043f\u0442 (\u0432 meek \u043e\u043d\u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f reflectors \u0438 \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 <a href=\"https:\/\/gitlab.torproject.org\/tpo\/anti-censorship\/pluggable-transports\/meek\" rel=\"noopener noreferrer nofollow\">\u0440\u0435\u043f\u0435<\/a> meek).<\/p>\n<p>Meek \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a pluggable transport \u0434\u043b\u044f Tor, \u043d\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043c\u043e\u0436\u043d\u043e \u0435\u0433\u043e \u043e\u0431\u043c\u0430\u043d\u0443\u0442\u044c \u0438 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u0431\u0435\u0437 Tor. meek-client \u0438 meek-server \u043e\u0436\u0438\u0434\u0430\u044e\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u043d\u0430\u0431\u043e\u0440 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u0430 TOR_PT_*, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 Tor \u043e\u0431\u044b\u0447\u043d\u043e \u0441\u0430\u043c \u043f\u043e\u0434\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u043c\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0433\u043e \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u0430. \u0415\u0441\u043b\u0438 \u0437\u0430\u043c\u043e\u043a\u0430\u0442\u044c \u044d\u0442\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0440\u0443\u043a\u0430\u043c\u0438, \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u0434\u0432\u0430 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c \u043f\u043e HTTPS, \u0438 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 Tor, \u043d\u0438\u043a\u0430\u043a\u0438\u0435 \u0431\u0440\u0438\u0434\u0436-\u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u0443\u0442 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u044e\u0442. Meek-client \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 SOCKS \u043d\u0430 \u0432\u0445\u043e\u0434\u0435, \u043d\u043e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 destination &#8212; \u043a\u043e\u0440\u043e\u0447\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u044d\u0442\u043e \u0432\u0441\u0435 \u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 TCP-\u0442\u0443\u043d\u043d\u0435\u043b\u044c, \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430 Python, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0441\u0435 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u043d\u0430\u0434\u043e:<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">#!\/usr\/bin\/env python3\"\"\"Expose meek-client's ephemeral SOCKS listener as a fixed raw TCP port.\"\"\"import argparseimport osfrom pathlib import Pathimport signalimport socketimport subprocessimport sysimport tempfileimport threadingdef parse_address(value):    if value.startswith(\"[\"):        host, separator, port = value[1:].partition(\"]:\")    else:        host, separator, port = value.rpartition(\":\")    if not separator or not host or not port:        raise ValueError(f\"invalid address: {value}\")    return host, int(port)def recv_exact(sock, length):    data = bytearray()    while len(data) &lt; length:        chunk = sock.recv(length - len(data))        if not chunk:            raise ConnectionError(\"unexpected EOF\")        data.extend(chunk)    return bytes(data)def open_meek_tunnel(socks_address):    sock = socket.create_connection(socks_address)    try:        sock.sendall(b\"\\x05\\x01\\x00\")        if recv_exact(sock, 2) != b\"\\x05\\x00\":            raise ConnectionError(\"meek SOCKS listener rejected no-auth mode\")        # meek-client ignores the requested destination. The real destination        # is fixed by TOR_PT_ORPORT on meek-server.        host = b\"ignored.invalid\"        request = b\"\\x05\\x01\\x00\\x03\" + bytes([len(host)]) + host + b\"\\x00\\x01\"        sock.sendall(request)        response = recv_exact(sock, 10)        if response[:2] != b\"\\x05\\x00\":            raise ConnectionError(f\"meek SOCKS CONNECT failed: {response.hex()}\")        return sock    except Exception:        sock.close()        raisedef pump(source, destination):    try:        while True:            data = source.recv(65536)            if not data:                break            destination.sendall(data)    except OSError:        pass    finally:        try:            destination.shutdown(socket.SHUT_WR)        except OSError:            passdef relay(local, remote):    try:        threads = [            threading.Thread(target=pump, args=(local, remote), daemon=True),            threading.Thread(target=pump, args=(remote, local), daemon=True),        ]        for thread in threads:            thread.start()        for thread in threads:            thread.join()    finally:        local.close()        remote.close()def start_meek_client(args):    state = Path(args.state or Path(tempfile.gettempdir()) \/ \"meek-client-state\")    state = state.resolve()    state.mkdir(parents=True, exist_ok=True)    env = os.environ.copy()    env.update(        {            \"TOR_PT_MANAGED_TRANSPORT_VER\": \"1\",            \"TOR_PT_STATE_LOCATION\": str(state),            \"TOR_PT_CLIENT_TRANSPORTS\": \"meek\",        }    )    for name in (        \"TOR_PT_SERVER_TRANSPORTS\",        \"TOR_PT_SERVER_BINDADDR\",        \"TOR_PT_SERVER_TRANSPORT_OPTIONS\",        \"TOR_PT_ORPORT\",        \"TOR_PT_EXTENDED_SERVER_PORT\",        \"TOR_PT_AUTH_COOKIE_FILE\",        \"TOR_PT_EXIT_ON_STDIN_CLOSE\",    ):        env.pop(name, None)    command = [args.meek_client, f\"--url={args.url}\"]    if args.front:        command.append(f\"--front={args.front}\")    if args.utls:        command.append(f\"--utls={args.utls}\")    if args.helper:        command.append(f\"--helper={args.helper}\")    if args.proxy:        command.append(f\"--proxy={args.proxy}\")    if args.log:        command.append(f\"--log={args.log}\")    process = subprocess.Popen(        command,        env=env,        stdin=subprocess.DEVNULL,        stdout=subprocess.PIPE,        text=True,        bufsize=1,    )    socks_address = None    assert process.stdout is not None    for raw_line in process.stdout:        line = raw_line.strip()        print(f\"[meek control] {line}\", file=sys.stderr)        fields = line.split()        if len(fields) == 4 and fields[:3] == [\"CMETHOD\", \"meek\", \"socks5\"]:            socks_address = parse_address(fields[3])        elif line.startswith((\"ENV-ERROR \", \"VERSION-ERROR \", \"CMETHOD-ERROR \")):            process.terminate()            raise RuntimeError(line)        elif line == \"CMETHODS DONE\":            break    if socks_address is None:        return_code = process.poll()        raise RuntimeError(            f\"meek-client did not announce a SOCKS listener; exit={return_code}\"        )    return process, socks_addressdef main():    parser = argparse.ArgumentParser()    parser.add_argument(\"--meek-client\", required=True)    parser.add_argument(\"--url\", required=True)    parser.add_argument(\"--listen\", default=\"127.0.0.1:7000\")    parser.add_argument(\"--front\")    parser.add_argument(\"--utls\")    parser.add_argument(\"--helper\")    parser.add_argument(\"--proxy\")    parser.add_argument(\"--state\")    parser.add_argument(\"--log\")    parser.add_argument(\"--once\", action=\"store_true\", help=argparse.SUPPRESS)    args = parser.parse_args()    if args.helper and args.utls:        parser.error(\"--helper and --utls are mutually exclusive\")    process, socks_address = start_meek_client(args)    listen_address = parse_address(args.listen)    listener = socket.create_server(listen_address)    stop = threading.Event()    def request_stop(_signum, _frame):        stop.set()        listener.close()    signal.signal(signal.SIGINT, request_stop)    signal.signal(signal.SIGTERM, request_stop)    print(        f\"raw TCP {listener.getsockname()} -&gt; meek SOCKS {socks_address}\",        file=sys.stderr,    )    try:        while not stop.is_set():            try:                local, _peer = listener.accept()            except OSError:                break            try:                remote = open_meek_tunnel(socks_address)            except Exception as error:                print(f\"opening meek tunnel: {error}\", file=sys.stderr)                local.close()                continue            thread = threading.Thread(                target=relay, args=(local, remote), daemon=not args.once            )            thread.start()            if args.once:                thread.join()                break    finally:        listener.close()        process.terminate()        try:            process.wait(timeout=5)        except subprocess.TimeoutExpired:            process.kill()            process.wait()if __name__ == \"__main__\":    main()<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<p><code>python meek_tcp_frontend.py--meek-client meek-client.exe --url https:\/\/reflector.example\/meek--utls HelloFirefox_Auto --listen 127.0.0.1:2222<\/code><\/p>\n<p>\u041d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 (\u0442\u0443\u0442 \u0442\u0443\u043d\u043d\u0435\u043b\u044c \u0432\u0435\u0434\u0435\u0442 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 SSH):<\/p>\n<p><code>TOR_PT_MANAGED_TRANSPORT_VER=1<\/code><\/p>\n<p><code>TOR_PT_STATE_LOCATION=\/var\/lib\/meek-state<\/code><\/p>\n<p><code>TOR_PT_SERVER_TRANSPORTS=meek<\/code><\/p>\n<p><code>TOR_PT_SERVER_BINDADDR=meek-127.0.0.1:7002<\/code><\/p>\n<p><code>TOR_PT_ORPORT=127.0.0.1:22<\/code><\/p>\n<p><code>.\/meek-server --disable-tls<\/code><\/p>\n<p>\u0418 \u0432 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u043f\u043e\u0440\u0442 2222 \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u043d\u0430 \u043f\u043e\u0440\u0442 22 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435.<\/p>\n<p>\u0410 \u0435\u0441\u043b\u0438 \u043d\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0437\u0430\u043c\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u044d\u0442\u0438\u043c &#8212; meek \u0435\u0449\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 <a href=\"https:\/\/www.v2fly.org\/en_US\/v5\/config\/stream\/meek.html\" rel=\"noopener noreferrer nofollow\">V2ray<\/a> (\u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432 \u0441\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0444\u043e\u0440\u043a\u043d\u0443\u043b\u0441\u044f \u0432\u0441\u0435\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0438 \u0434\u0430\u043b\u0435\u043a\u043e \u0443\u0448\u0435\u0434\u0448\u0438\u0439 \u043e\u0442 \u043f\u0440\u0430\u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f XRay), \u043d\u043e \u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u044f \u043d\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b.<\/p>\n<h2>ntptun<\/h2>\n<p>\u0420\u0430\u0437 \u0443\u0436 \u0432 \u043f\u0440\u043e\u0448\u043b\u044b\u0439 \u0440\u0430\u0437 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440 \u0437\u0430\u0448\u0435\u043b \u043f\u0440\u043e ICMP \u0438 DNS \u043a\u0430\u043a \u043d\u0435\u0441\u0443\u0449\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0434\u043b\u044f \u0442\u0443\u043d\u043d\u0435\u043b\u044f, \u0443 \u043d\u0438\u0445 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0441\u044f \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043c\u0430\u043b\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0440\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u0438\u043a &#8212; NTP. \u0412\u0441\u0442\u0440\u0435\u0447\u0430\u0439\u0442\u0435\u00a0 <a href=\"https:\/\/gitlab.com\/shadow_contributor\/ntptun\" rel=\"noopener noreferrer nofollow\"><strong>ntptun<\/strong><\/a>: IP-over-NTP \u0438 UDP-over-NTP \u0442\u0443\u043d\u043d\u0435\u043b\u044c \u043d\u0430 C++.<\/p>\n<p>\u0418\u0434\u0435\u044f: \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 (\u0446\u0435\u043b\u044b\u0439 IP-\u043f\u0430\u043a\u0435\u0442 \u0438\u0437 TUN-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u043b\u0438\u0431\u043e UDP-\u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u0430) \u0437\u0430\u043f\u0435\u0447\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 extension field NTP-\u043f\u0430\u043a\u0435\u0442\u0430 \u0438 \u0443\u043b\u0435\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0439 NTP mode-3 \u0437\u0430\u043f\u0440\u043e\u0441. \u0421\u0435\u0440\u0432\u0435\u0440 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u0435\u0442, \u0434\u043e\u0441\u0442\u0430\u0435\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442, \u043e\u0442\u0434\u0430\u0435\u0442 \u0435\u0433\u043e \u0432 \u0441\u0432\u043e\u0439 TUN (\u0438\u043b\u0438 \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 udp_target), \u0430 \u043e\u0442\u0432\u0435\u0442 \u043f\u0440\u0438\u043b\u0435\u0442\u0430\u0435\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u0432 \u0442\u0435\u043b\u0435 mode-4 NTP-\u043e\u0442\u0432\u0435\u0442\u0430.\u00a0<\/p>\n<p>\u0415\u0441\u0442\u044c \u0434\u0432\u0430 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u0430. <strong>tun<\/strong> &#8212; \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 IP-over-NTP, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434 Linux (\u043d\u0443\u0436\u0435\u043d \/dev\/net\/tun): \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0435 \u0441\u0435\u0431\u0435 tun0, \u0432\u0435\u0448\u0430\u0435\u0442\u0435 \u043d\u0430 \u043d\u0435\u0433\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0430\u0434\u0440\u0435\u0441 \u043f\u043e \u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0438 \u0447\u0435\u0440\u0435\u0437 \u0442\u0443\u043d\u043d\u0435\u043b\u044c \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0445\u043e\u0434\u0438\u0442\u044c \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0435\u0441\u044c IP-\u0442\u0440\u0430\u0444\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u0442\u0443\u0434\u0430 \u0437\u0430\u0432\u0435\u0440\u043d\u0435\u0442\u0435, \u0445\u043e\u0442\u044c ping 10.9.0.1 \u0433\u043e\u043d\u044f\u0439. \u0418 \u0435\u0441\u0442\u044c <strong>UDP<\/strong>-\u0440\u0435\u0436\u0438\u043c (\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0434 Windows): \u043a\u043b\u0438\u0435\u043d\u0442 \u0441\u043b\u0443\u0448\u0430\u0435\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 UDP-\u043f\u043e\u0440\u0442 (udp_listen), \u0441\u0435\u0440\u0432\u0435\u0440 \u0441\u043b\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 \u043e\u0434\u0438\u043d \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 udp_target, \u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c UDP-\u0441\u043e\u043a\u0435\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u043c\u0443 \u043f\u043e\u0440\u0442\u0443 udp_base_port + client_id.<\/p>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u0430\u043c\u043e\u0435 \u0432\u043a\u0443\u0441\u043d\u043e\u0435 &#8212; \u043a\u0443\u0434\u0430 \u044d\u0442\u043e \u0432\u0441\u0435 \u043f\u0440\u0438\u0441\u0442\u0440\u043e\u0438\u0442\u044c. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442 \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b KCP \u043f\u043e\u0432\u0435\u0440\u0445 NTP \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f <a href=\"https:\/\/gost.run\/en\/\" rel=\"noopener noreferrer nofollow\">GOST<\/a>, \u0442\u0430\u043a \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 HTTP\/SOCKS5-\u043f\u0440\u043e\u043a\u0441\u0438 GOST-\u0430 \u0438 \u0437\u0430\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0435\u0433\u043e KCP- \u0438\u043b\u0438 DTLS-\u0442\u0440\u0430\u0444\u0438\u043a \u043f\u0440\u044f\u043c\u043e \u0432 udp-\u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442 ntptun:<\/p>\n<p>\u0441\u0435\u0440\u0432\u0435\u0440: gost -L &#8216;http+kcp:\/\/:8443?kcp.mtu=1250&#8217;<\/p>\n<p>\u043a\u043b\u0438\u0435\u043d\u0442: gost -L http:\/\/127.0.0.1:18080 -F &#8216;http+kcp:\/\/127.0.0.1:9000?kcp.mtu=1250&#8217;<\/p>\n<p>\u0430 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u0443\u0436\u0435 \u0442\u0440\u0443\u0434\u0438\u0442\u0441\u044f ntptun, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044d\u0442\u0438 KCP\/DTLS-\u043f\u0430\u043a\u0435\u0442\u044b \u043f\u0440\u044f\u0447\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u044c NTP.<\/p>\n<p>\u041f\u0440\u043e \u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u0442\u043e\u0436\u0435 \u043f\u043e\u0434\u0443\u043c\u0430\u043b\u0438 \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0443\u0435\u0442. Downstream (\u0441\u0435\u0440\u0432\u0435\u0440 -&gt; \u043a\u043b\u0438\u0435\u043d\u0442) \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u0434\u0432\u0443\u0445 \u0440\u0435\u0436\u0438\u043c\u0430\u0445. <strong>poll<\/strong> (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e) \u0434\u0435\u0440\u0436\u0438\u0442 \u0447\u0435\u0441\u0442\u043d\u0443\u044e \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0443 NTP \u0437\u0430\u043f\u0440\u043e\u0441\/\u043e\u0442\u0432\u0435\u0442 &#8212; \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0448\u043b\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u043e\u0433\u043e, \u0430 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u043f\u043e\u043b\u0435\u0442\u0435 \u043f\u0430\u0447\u043a\u0443 \u043f\u0443\u0441\u0442\u044b\u0445 \u043f\u043e\u043b\u043b\u043e\u0432 (poll_window), \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u043a\u0443\u0434\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u043e\u0442\u0432\u0435\u0442, \u043a\u043e\u0433\u0434\u0430 \u0442\u043e\u0442 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f &#8212; \u0442\u0440\u0430\u0444\u0438\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u0434\u0438\u043d \u0432 \u043e\u0434\u0438\u043d \u043a\u0430\u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e NTP-\u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u043d\u043e \u0437\u0430 \u0441\u0447\u0435\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u043b\u043e\u0432 \u0435\u0441\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e CPU \u0438 \u043f\u043e\u043b\u043e\u0441\u044b \u0434\u0430\u0436\u0435 \u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u0435. <strong>push<\/strong> \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u044d\u0442\u0443 \u0447\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u044c &#8212; \u0441\u0435\u0440\u0432\u0435\u0440 \u0448\u043b\u0435\u0442 \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u0443 \u0441\u0440\u0430\u0437\u0443, \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043d\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c, \u0431\u0435\u0437 \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0430 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0437\u0440\u0435\u0434\u043a\u0430 \u0441\u0442\u0443\u0447\u0438\u0442\u0441\u044f keepalive-\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c NAT-\u043c\u0430\u043f\u043f\u0438\u043d\u0433: \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435, \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043d\u0438\u0436\u0435, \u043d\u043e \u043d\u0435\u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u044b\u0435 mode-4 \u043f\u0430\u043a\u0435\u0442\u044b &#8212; \u044d\u0442\u043e \u0442\u043e, \u0447\u0435\u0433\u043e \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 NTP-\u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u0438\u0434\u0438\u0440\u0447\u0438\u0432\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0442\u0430\u043a\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0442.<\/p>\n<p>\u0410 \u0435\u0449\u0435 \u0435\u0441\u0442\u044c \u0437\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 active probing (\u0447\u0435\u043c-\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0430\u044f \u043d\u0430 XTLS-Reality): \u0435\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u043f\u043e\u0448\u043b\u0435\u0442 \u043d\u0430 \u0432\u0430\u0448 &#171;\u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u0440\u0435\u043c\u0435\u043d\u0438&#187; \u043e\u0431\u044b\u0447\u043d\u044b\u0439 NTP-\u0437\u0430\u043f\u0440\u043e\u0441 (\u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0439\u0441\u044f \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c \u0442\u0443\u043d\u043d\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u0430\u043a\u0435\u0442\u043e\u043c, \u043b\u0438\u0431\u043e \u0441 \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u043c \u043a\u043b\u044e\u0447\u043e\u043c), ntptun \u043d\u0435 \u043f\u0440\u043e\u043c\u043e\u043b\u0447\u0438\u0442 \u0438 \u043d\u0435 \u043e\u0442\u0432\u0435\u0442\u0438\u0442 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u043e\u0439, \u0430 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 upstream NTP-\u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0432\u0435\u0440\u043d\u0435\u0442 \u043f\u0440\u043e\u0431\u0443\u044e\u0449\u0435\u043c\u0443 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043e\u0442\u0432\u0435\u0442 &#8212; \u0441 \u0440\u0435\u0439\u0442-\u043b\u0438\u043c\u0438\u0442\u043e\u043c \u0438 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u043a \u0430\u043c\u043f\u043b\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430.<\/p>\n<p>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e: <code>cmake -S . -B build &amp;&amp; cmake --build build -j<\/code>, \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a &#8212; build\/ntptun, \u043a\u043e\u043d\u0444\u0438\u0433 &#8212; \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 key = value. \u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f GPLv2.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1065064\/\">https:\/\/habr.com\/ru\/articles\/1065064\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0416\u0438\u0437\u043d\u044c \u0434\u0438\u0441\u0441\u0438\u0434\u0435\u043d\u0442\u0430-\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u0442\u043e\u0440\u0430 \u043d\u0435 \u0441\u0438\u0434\u0438\u0442 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435, \u0430 \u043a\u043e\u043f\u0438\u043b\u043a\u0430 \u0431\u0435\u0437\u0443\u043c\u043d\u044b\u0445 \u043d\u0430\u0445\u043e\u0434\u043e\u043a \u043f\u043e\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u0443\u0441\u043f\u0435\u0432\u0430\u0435\u0448\u044c \u043f\u0440\u043e \u043d\u0438\u0445 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c. \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0442\u043e, \u043d\u0430 \u0447\u0435\u043c \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438\u0441\u044c \u0432 \u043f\u0440\u043e\u0448\u043b\u044b\u0439 \u0440\u0430\u0437 &#8212; \u0442\u0443\u043d\u043d\u0435\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 ICMP, DNS \u0438 serverless-\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u044d\u0442\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0445\u043e\u0440\u043e\u0448\u043e, \u043d\u043e \u0432\u043e\u0442 \u0432\u0430\u043c \u0435\u0449\u0435 \u0442\u0440\u0438 \u0441\u0432\u0435\u0436\u0438\u0435 \u043d\u0430\u0445\u043e\u0434\u043a\u0438: \u0442\u0443\u043d\u043d\u0435\u043b\u044c \u0447\u0435\u0440\u0435\u0437 \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e, \u0447\u0442\u043e \u0443\u043c\u0435\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0444\u0430\u0439\u043b\u044b, \u0442\u0443\u043d\u043d\u0435\u043b\u044c \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u044f\u0449\u0438\u043a, \u0438 \u0440\u0435\u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0434\u0440\u0435\u0432\u043d\u0435\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u043e\u0431\u0445\u043e\u0434\u0430 \u0447\u0435\u0440\u0435\u0437 CDN \u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u0432\u0441\u0435 \u0437\u0430\u0431\u044b\u043b\u0438.File Tunnel\u0418\u0434\u0435\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0438 \u043e\u0442 \u0442\u043e\u0433\u043e \u0433\u0435\u043d\u0438\u0430\u043b\u044c\u043d\u0430\u044f: \u0435\u0441\u043b\u0438 \u0434\u0432\u0430 \u0445\u043e\u0441\u0442\u0430 \u0438\u043c\u0435\u044e\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u0438 \u0442\u043e\u043c\u0443 \u0436\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u043c\u0443 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0443, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 \u044d\u0442\u0438\u043c\u0438 \u0445\u043e\u0441\u0442\u0430\u043c\u0438. File-Tunnel \u0441\u043b\u0443\u0448\u0430\u0435\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 TCP-\u043f\u043e\u0440\u0442, \u0438 \u043a\u043e\u0433\u0434\u0430 \u043d\u0430 \u043d\u0435\u0433\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435, \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b. \u0422\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u0444\u0430\u0439\u043b \u0447\u0438\u0442\u0430\u0435\u0442 \u0434\u0440\u0443\u0433\u0430\u044f \u043a\u043e\u043f\u0438\u044f File-Tunnel \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435, \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0438\u0437 \u043d\u0435\u0433\u043e TCP-\u043f\u043e\u0442\u043e\u043a \u0438 \u043f\u0440\u043e\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u0434\u0430\u043b\u044c\u0448\u0435, \u043a\u0443\u0434\u0430 \u0441\u043a\u0430\u0436\u0443\u0442. \u0412 \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0434\u0430\u043d\u043d\u044b\u0435 \u043b\u0435\u0442\u044f\u0442 \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 \u0432\u0442\u043e\u0440\u043e\u0439 \u0444\u0430\u0439\u043b. \u0418 \u0447\u0442\u043e\u0431\u044b \u0444\u0430\u0439\u043b\u044b \u043d\u0435 \u0440\u043e\u0441\u043b\u0438 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043e\u043d \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u0447\u0438\u0449\u0430\u044e\u0442\u0441\u044f\/\u0440\u043e\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f.\u201c\u0424\u0430\u0439\u043b\u043e\u0432\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435, \u0434\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0434\u043e\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043e\u0431\u0430 \u0445\u043e\u0441\u0442\u0430&#187; \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0447\u0435\u043c \u0443\u0433\u043e\u0434\u043d\u043e: \u0440\u0430\u0441\u0448\u0430\u0440\u0435\u043d\u043d\u0430\u044f \u043f\u0430\u043f\u043a\u0430 \u043f\u043e SMB \u0438\u043b\u0438 NFS, FTP-\u0441\u0435\u0440\u0432\u0435\u0440, \u0434\u0438\u0441\u043a, \u043f\u0440\u043e\u0431\u0440\u043e\u0448\u0435\u043d\u043d\u044b\u0439 \u0432\u043d\u0443\u0442\u0440\u044c RDP \u0438\u043b\u0438 Citrix-\u0441\u0435\u0441\u0441\u0438\u0438, VirtualBox shared folder, WSL, Docker volume, Dropbox.\u00a0\u041d\u043e \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u0441\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u0434\u0430\u0432\u043d\u043e: \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043d\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 S3 \u0438 WebDAV. \u0418 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0441\u0435 \u044d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u043f\u043b\u043e\u0445\u043e.\u0418 \u0432\u043e\u0442 \u0442\u0443\u0442 \u043a\u0440\u043e\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0435 \u0432\u0430\u0436\u043d\u043e\u0435: S3-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u043a\u0442\u043e, \u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0437\u0430 \u043e\u0447\u0435\u043d\u044c \u0432\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0435 \u0434\u0435\u043d\u044c\u0433\u0438 (\u0430 \u0447\u0430\u0441\u0442\u043e \u0438 \u0434\u0430\u044e\u0442 \u0447\u0442\u043e-\u0442\u043e \u0442\u0438\u043f\u0430 1 \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442\u0430 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0433\u043e \u0442\u0430\u0440\u0438\u0444\u0430) &#8212; \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0437\u0430\u0432\u0435\u0441\u0442\u0438 \u0431\u0430\u043a\u0435\u0442 \u0443 \u043b\u044e\u0431\u043e\u0433\u043e \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u043f\u0440\u0438\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430, \u0438 \u0443 \u0432\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442 \u0434\u043b\u044f \u0442\u0443\u043d\u043d\u0435\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043d\u0430\u0440\u0443\u0436\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u0441\u0430\u043c\u044b\u0435 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e\u043c\u0443 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0443.\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u0432\u0441\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:\u0421\u0442\u043e\u0440\u043e\u043d\u0430 A:ft.exe &#8212;s3 &#8212;bucket mybucket &#8212;region ru-moscow-1 &#8212;access-key XXXXXXXX &#8212;secret-key XXXXXXXX\u00a0 -L 5000:192.168.1.20:3389\u0421\u0442\u043e\u0440\u043e\u043d\u0430 B:ft.exe &#8212;s3 &#8212;bucket mybucket &#8212;region ru-moscow-1 &#8212;access-key XXXXXXXX &#8212;secret-key XXXXXXXX\u00a0\u0418 \u0434\u043b\u044f \u043d\u0435-AWS \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c &#8212;endpoint. \u041a\u043b\u044e\u0447\u0438 \u043c\u043e\u0436\u043d\u043e (\u0438 \u043d\u0443\u0436\u043d\u043e) \u043d\u0435 \u0441\u0432\u0435\u0442\u0438\u0442\u044c \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435, \u0430 \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f FT_S3_ACCESS_KEY \/ FT_S3_SECRET_KEY.\u00a0\u0421 WebDAV \u0432\u0441\u0435 \u0435\u0449\u0435 \u043f\u0440\u043e\u0449\u0435 &#8212; \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 \u0434\u0430\u0436\u0435\u2026 Mail.ru Cloud:ft.exe &#8212;webdav &#8212;url https:\/\/yoururl.com\/path -u foo -p bar -L 5000:192.168.1.20:3389True IMAP Tunnel (Secure)\u041f\u043e\u043c\u043d\u0438\u0442\u0435 Bridge To Freedom \u0438\u0437 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 &#8212; \u0442\u0443\u043d\u043d\u0435\u043b\u044c \u0447\u0435\u0440\u0435\u0437 \u0432\u0435\u0431\u0441\u043e\u043a\u0435\u0442\u044b \u0432 \u042f\u043d\u0434\u0435\u043a\u0441 Serverless Functions? \u0423 \u0435\u0433\u043e \u0430\u0432\u0442\u043e\u0440\u0430 \u0432\u044b\u0448\u0435\u043b \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0441\u043d\u0430\u0440\u044f\u0434 \u0432 \u0442\u0443 \u0436\u0435 \u0441\u0442\u0435\u043f\u044c, \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f&#8230; \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0430\u044f \u043f\u043e\u0447\u0442\u0430. \u0412\u0441\u0442\u0440\u0435\u0447\u0430\u0439\u0442\u0435: True IMAP Tunnel (Secure).\u0418\u0434\u0435\u044f \u0432 \u043b\u043e\u0431: \u043e\u0431\u0430 \u043a\u043e\u043d\u0446\u0430 \u0442\u0443\u043d\u043d\u0435\u043b\u044f \u043b\u043e\u0433\u0438\u043d\u044f\u0442\u0441\u044f \u0432 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 IMAP-\u0430\u043a\u043a\u0430\u0443\u043d\u0442 \u043d\u0430 \u043f\u043e\u0447\u0442\u043e\u0432\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 (\u0438\u043b\u0438 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u044f), \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043f\u043e \u0434\u0432\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0430\u043f\u043a\u0438 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 &#8212; \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0438 \u0432 \u0434\u0440\u0443\u0433\u0443\u044e. \u041f\u0430\u043a\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c, \u0444\u0440\u0435\u0439\u043c \u0437\u0430\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0447\u0435\u0440\u043d\u043e\u0432\u0438\u043a \u043f\u0438\u0441\u044c\u043c\u0430 \u0438 \u043a\u043b\u0430\u0434\u0435\u0442\u0441\u044f \u0432 \u043f\u0430\u043f\u043a\u0443 \u0447\u0435\u0440\u0435\u0437 APPEND. \u041d\u0438 \u043e\u0434\u043d\u043e \u0438\u0437 \u044d\u0442\u0438\u0445 &#171;\u043f\u0438\u0441\u0435\u043c&#187; \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0443\u0445\u043e\u0434\u0438\u0442 \u043f\u043e SMTP \u0438 \u043d\u0438\u043a\u043e\u043c\u0443 \u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f &#8212; \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0431\u0430\u0439\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u043e\u0447\u0442\u043e\u0432\u043e\u0433\u043e \u044f\u0449\u0438\u043a\u0430, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0435 \u0441 \u043e\u0431\u0435\u0438\u0445 \u0441\u0442\u043e\u0440\u043e\u043d. \u041f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c \u0447\u0435\u0440\u0435\u0437 IDLE (\u043b\u0438\u0431\u043e \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 polling, \u0435\u0441\u043b\u0438 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 IDLE) \u0432\u0438\u0434\u0438\u0442 \u043d\u043e\u0432\u044b\u0439 \u0447\u0435\u0440\u043d\u043e\u0432\u0438\u043a, \u0432\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u0442 \u0438\u0437 \u043d\u0435\u0433\u043e \u0444\u0440\u0435\u0439\u043c, \u0434\u043e\u0441\u0442\u0430\u0435\u0442 \u0438\u0437 \u043d\u0435\u0433\u043e \u0434\u0430\u043d\u043d\u044b\u0435, \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442 \u043f\u0438\u0441\u044c\u043c\u043e \u043a\u0430\u043a \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0438 \u043f\u043e\u0437\u0436\u0435 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 EXPUNGE \u043f\u0430\u0447\u043a\u043e\u0439. \u0412 \u043e\u0431\u0449\u0435\u043c, \u043e\u0431\u044b\u0447\u043d\u044b\u0439 TCP \u043f\u043e \u0441\u0432\u043e\u0435\u0439 \u0441\u0443\u0442\u0438, \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u043e\u043a\u0435\u0442\u0430 &#8212; \u043f\u0430\u043f\u043a\u0430 \u043d\u0430 \u043f\u043e\u0447\u0442\u043e\u0432\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435.\u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u0432\u0441\u0435 \u0444\u0440\u0435\u0439\u043c\u044b \u043c\u043e\u0436\u043d\u043e \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c AES-256-GCM \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u043a\u043b\u0430\u0441\u0442\u044c \u0432 \u044f\u0449\u0438\u043a (\u043f\u0443\u0441\u0442\u043e\u0439 passphrase \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435), \u0430 \u0435\u0449\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c, \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e &#171;\u043f\u0438\u0441\u044c\u043c\u043e&#187; \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u043a\u0442\u043e \u0432\u0434\u0440\u0443\u0433 \u043e\u0442\u043a\u0440\u043e\u0435\u0442 \u044d\u0442\u0443 \u043f\u0430\u043f\u043a\u0443 \u0432 \u043e\u0431\u044b\u0447\u043d\u043e\u043c \u043f\u043e\u0447\u0442\u043e\u0432\u043e\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u0435 &#8212; \u0442\u0435\u043c\u0443, \u0432\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u0435\u043a\u0441\u0442\u0430, \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435, \u0447\u0442\u043e\u0431\u044b \u0442\u0443\u043d\u043d\u0435\u043b\u044c \u043d\u0435 \u0442\u0430\u043a \u0441\u0438\u043b\u044c\u043d\u043e \u0431\u0440\u043e\u0441\u0430\u043b\u0441\u044f \u0432 \u0433\u043b\u0430\u0437\u0430.\u0410\u0432\u0442\u043e\u0440 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0432\u0441\u0435 \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430\u043c\u0438: Gmail, Outlook, Seznam, Mail.ru, Yandex, Timeweb, Rambler &#8212; \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e, \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c.\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 &#8212; \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 Go-\u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a \u0434\u043b\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0442\u0443\u043d\u043d\u0435\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 TCP: SOCKS5 (\u0442\u043e\u0442 \u0436\u0435 Dante), VLESS (Xray\/sing-box), SSH &#8212; \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e. \u0410 \u0435\u0449\u0435 \u044d\u0442\u043e \u0432\u0441\u0435 \u0434\u0435\u043b\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u0430\u043a \u043f\u043b\u0430\u0433\u0438\u043d Shadowsocks (SIP003), \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u0434 Shadowsocks Android, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u043e\u0436\u043d\u043e \u0438 \u0441 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430.\u0412 README \u0430\u0432\u0442\u043e\u0440 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u043c\u0438\u0433\u0438\u0432\u0430\u0435\u0442: \u0430\u0431\u0431\u0440\u0435\u0432\u0438\u0430\u0442\u0443\u0440\u0430 \u201cTrue IMAP Tunnel (Secure)\u201d \u0431\u044b\u043b\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u0430 \u043d\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e.Meek\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u0431 \u043e\u043b\u0434\u0441\u043a\u0443\u043b\u044c\u043d\u044b\u0445 \u0438\u0434\u0435\u044f\u0445. XHTTP &#8212; \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e, \u043e\u043d \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u0435\u043d \u0438 \u043f\u0440\u043e\u043b\u0435\u0437\u0430\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u043c\u043d\u043e\u0433\u0438\u0435 CDN. \u0410 \u0447\u0435\u0440\u0435\u0437 \u043c\u043d\u043e\u0433\u0438\u0435 \u043d\u0435 \u043f\u0440\u043e\u043b\u0435\u0437\u0430\u0435\u0442 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 CDN \u043d\u0435 \u043b\u044e\u0431\u0438\u0442 \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u043b\u0433\u043e \u0432\u0438\u0441\u044f\u0449\u0438\u0435 HTTP-\u0441\u0435\u0441\u0441\u0438\u0438 \u0441 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u0443, \u0438\u043b\u0438 \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435). \u0414\u0430 \u0438 CDN \u0432 \u043c\u0438\u0440\u0435 \u0438 \u0432 \u0441\u0442\u0440\u0430\u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435 \u0442\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u044f\u043c \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043d\u044b\u0445. \u0418 \u0442\u0443\u0442 \u0441\u0430\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043f\u0440\u043e \u0442\u043e, \u0447\u0435\u043c \u0435\u0449\u0435 \u0434\u0435\u0434\u044b \u043f\u0440\u043e\u0431\u0438\u0432\u0430\u043b\u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438: Meek \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 Tor.\u0412 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441 XHTTP, \u0442\u0430\u043c \u0432\u0441\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u043e \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430: \u043a\u043b\u0438\u0435\u043d\u0442 \u0448\u043b\u0435\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 HTTP POST-\u0437\u0430\u043f\u0440\u043e\u0441\u044b (\u0442\u0435\u043b\u043e \u0434\u043e 64 \u041a\u0411) \u043d\u0430 URL, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a X-Session-Id, \u0447\u0442\u043e\u0431\u044b \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u043e\u043d\u0438\u043c\u0430\u043b, \u043a\u0430\u043a\u043e\u043c\u0443 TCP-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044e \u044d\u0442\u0438 \u0431\u0430\u0439\u0442\u044b \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442. \u0421\u0435\u0440\u0432\u0435\u0440 \u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 &#171;X-Session-Id -&gt; \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0435 TCP-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435&#187;, \u043f\u0438\u0448\u0435\u0442 \u0442\u0443\u0434\u0430 \u043f\u0440\u0438\u0448\u0435\u0434\u0448\u0438\u0435 \u0431\u0430\u0439\u0442\u044b, \u043d\u0435\u0434\u043e\u043b\u0433\u043e \u0436\u0434\u0435\u0442, \u043d\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0432 \u043e\u0442\u0432\u0435\u0442, \u0438 \u043e\u0442\u0434\u0430\u0435\u0442 \u044d\u0442\u043e \u0432 \u0442\u0435\u043b\u0435 HTTP-\u043e\u0442\u0432\u0435\u0442\u0430. \u0415\u0441\u043b\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u043d\u0435\u0447\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c, \u043e\u043d \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0441\u043b\u0430\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u0435 POST-\u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e HTTP &#8212; \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0441 \u0438\u043d\u0438\u0446\u0438\u0430\u0442\u0438\u0432\u043e\u0439 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430; \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b polling-\u0430 \u043f\u043b\u0430\u0432\u043d\u043e \u0440\u0430\u0441\u0442\u0435\u0442 \u0441 100 \u043c\u0441 \u0434\u043e 5 \u0441\u0435\u043a\u0443\u043d\u0434 \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0435.\u00a0\u0418 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0435, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Meek \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f (\u044a\u043e\u0442\u044c \u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430\u043c\u0438) \u0434\u0430\u0436\u0435 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 CDN, \u043d\u043e \u0438 \u0447\u0435\u0440\u0435\u0437 \u0442\u0443\u043f\u044b\u0435 shared-\u0445\u043e\u0441\u0442\u0438\u043d\u0433\u0438 &#8212; \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0447\u0442\u043e\u0431\u044b \u0442\u0430\u043c \u0431\u044b\u043b\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 PHP \u0438\u043b\u0438 Python \u0441\u043a\u0440\u0438\u043f\u0442 (\u0432 meek \u043e\u043d\u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f reflectors \u0438 \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u0440\u0435\u043f\u0435 meek).Meek \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a pluggable transport \u0434\u043b\u044f Tor, \u043d\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043c\u043e\u0436\u043d\u043e \u0435\u0433\u043e \u043e\u0431\u043c\u0430\u043d\u0443\u0442\u044c \u0438 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u0431\u0435\u0437 Tor. meek-client \u0438 meek-server \u043e\u0436\u0438\u0434\u0430\u044e\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u043d\u0430\u0431\u043e\u0440 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u0430 TOR_PT_*, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 Tor \u043e\u0431\u044b\u0447\u043d\u043e \u0441\u0430\u043c \u043f\u043e\u0434\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u043c\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0433\u043e \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u0430. \u0415\u0441\u043b\u0438 \u0437\u0430\u043c\u043e\u043a\u0430\u0442\u044c \u044d\u0442\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0440\u0443\u043a\u0430\u043c\u0438, \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u0434\u0432\u0430 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c \u043f\u043e HTTPS, \u0438 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 Tor, \u043d\u0438\u043a\u0430\u043a\u0438\u0435 \u0431\u0440\u0438\u0434\u0436-\u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u0443\u0442 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u044e\u0442. Meek-client \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 SOCKS \u043d\u0430 \u0432\u0445\u043e\u0434\u0435, \u043d\u043e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 destination &#8212; \u043a\u043e\u0440\u043e\u0447\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u044d\u0442\u043e \u0432\u0441\u0435 \u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 TCP-\u0442\u0443\u043d\u043d\u0435\u043b\u044c, \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430 Python, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0441\u0435 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u043d\u0430\u0434\u043e:\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442#!\/usr\/bin\/env python3&#8243;&#187;&#187;Expose meek-client&#8217;s ephemeral SOCKS listener as a fixed raw TCP port.&#187;&#187;&#187;import argparseimport osfrom pathlib import Pathimport signalimport socketimport subprocessimport sysimport tempfileimport threadingdef parse_address(value):    if value.startswith(&#171;[&#171;):        host, separator, port = value[1:].partition(&#171;]:&#187;)    else:        host, separator, port = value.rpartition(&#171;:&#187;)    if not separator or not host or not port:        raise ValueError(f&#187;invalid address: {value}&#187;)    return host, int(port)def recv_exact(sock, length):    data = bytearray()    while len(data) &lt; length:        chunk = sock.recv(length &#8212; len(data))        if not chunk:            raise ConnectionError(&#171;unexpected EOF&#187;)        data.extend(chunk)    return bytes(data)def open_meek_tunnel(socks_address):    sock = socket.create_connection(socks_address)    try:        sock.sendall(b&#187;\\x05\\x01\\x00&#8243;)        if recv_exact(sock, 2) != b&#187;\\x05\\x00&#8243;:            raise ConnectionError(&#171;meek SOCKS listener rejected no-auth mode&#187;)        # meek-client ignores the requested destination. The real destination        # is fixed by TOR_PT_ORPORT on meek-server.        host = b&#187;ignored.invalid&#187;        request = b&#187;\\x05\\x01\\x00\\x03&#8243; + bytes([len(host)]) + host + b&#187;\\x00\\x01&#8243;        sock.sendall(request)        response = recv_exact(sock, 10)        if response[:2] != b&#187;\\x05\\x00&#8243;:            raise ConnectionError(f&#187;meek SOCKS CONNECT failed: {response.hex()}&#187;)        return sock    except Exception:        sock.close()        raisedef pump(source, destination):    try:        while True:            data = source.recv(65536)            if not data:                break            destination.sendall(data)    except OSError:        pass    finally:        try:            destination.shutdown(socket.SHUT_WR)        except OSError:            passdef relay(local, remote):    try:        threads = [            threading.Thread(target=pump, args=(local, remote), daemon=True),            threading.Thread(target=pump, args=(remote, local), daemon=True),        ]        for thread in threads:            thread.start()        for thread in threads:            thread.join()    finally:        local.close()        remote.close()def start_meek_client(args):    state = Path(args.state or Path(tempfile.gettempdir()) \/ &#171;meek-client-state&#187;)    state = state.resolve()    state.mkdir(parents=True, exist_ok=True)    env = os.environ.copy()    env.update(        {            &#171;TOR_PT_MANAGED_TRANSPORT_VER&#187;: &#171;1&#187;,            &#171;TOR_PT_STATE_LOCATION&#187;: str(state),            &#171;TOR_PT_CLIENT_TRANSPORTS&#187;: &#171;meek&#187;,        }    )    for name in (        &#171;TOR_PT_SERVER_TRANSPORTS&#187;,        &#171;TOR_PT_SERVER_BINDADDR&#187;,        &#171;TOR_PT_SERVER_TRANSPORT_OPTIONS&#187;,        &#171;TOR_PT_ORPORT&#187;,        &#171;TOR_PT_EXTENDED_SERVER_PORT&#187;,        &#171;TOR_PT_AUTH_COOKIE_FILE&#187;,        &#171;TOR_PT_EXIT_ON_STDIN_CLOSE&#187;,    ):        env.pop(name, None)    command = [args.meek_client, f&#187;&#8212;url={args.url}&#187;]    if args.front:        command.append(f&#187;&#8212;front={args.front}&#187;)    if args.utls:        command.append(f&#187;&#8212;utls={args.utls}&#187;)    if args.helper:        command.append(f&#187;&#8212;helper={args.helper}&#187;)    if args.proxy:        command.append(f&#187;&#8212;proxy={args.proxy}&#187;)    if args.log:        command.append(f&#187;&#8212;log={args.log}&#187;)    process = subprocess.Popen(        command,        env=env,        stdin=subprocess.DEVNULL,&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-489228","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/489228","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=489228"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/489228\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=489228"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=489228"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=489228"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}