<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Humja Jaan</title>
    <description>The latest articles on DEV Community by Humja Jaan (@humja_jaan_fca09049ae97d5).</description>
    <link>https://dev.to/humja_jaan_fca09049ae97d5</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4015391%2F0a5c6fb4-ea97-4486-80c5-0b807ddfdc1c.png</url>
      <title>DEV Community: Humja Jaan</title>
      <link>https://dev.to/humja_jaan_fca09049ae97d5</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/humja_jaan_fca09049ae97d5"/>
    <language>en</language>
    <item>
      <title>فك شيفرة رابط tg:// بروكسي: معنى كل معلومة</title>
      <dc:creator>Humja Jaan</dc:creator>
      <pubDate>Fri, 28 Aug 2026 17:59:40 +0000</pubDate>
      <link>https://dev.to/humja_jaan_fca09049ae97d5/fk-shyfr-rbt-tg-brwksy-mn-kl-mlwm-321n</link>
      <guid>https://dev.to/humja_jaan_fca09049ae97d5/fk-shyfr-rbt-tg-brwksy-mn-kl-mlwm-321n</guid>
      <description>&lt;h2&gt;
  
  
  المفتاح الحقيقي هو secret وليس العنوان
&lt;/h2&gt;

&lt;p&gt;رابط &lt;code&gt;tg://proxy?server=127.0.0.1&amp;amp;port=443&amp;amp;secret=ee...&lt;/code&gt; يحمل ثلاثة حقول فقط، لكن كل التعقيدات موجودة في حقل &lt;code&gt;secret&lt;/code&gt;. العنوان والمنفذ مجرد معلومات توجيه، أما السر فيحدد &lt;em&gt;كيف&lt;/em&gt; سيتم تزيين حركة المرور، و&lt;em&gt;هل&lt;/em&gt; سيقبل الخادم الطلب من الأساس. باختصار: أي خطأ في قيمة &lt;code&gt;secret&lt;/code&gt; يعني فشل الاتصال حتى لو كان الخادم يعمل بلا مشاكل.&lt;/p&gt;

&lt;h2&gt;
  
  
  تشريح &lt;code&gt;secret&lt;/code&gt; القديم: بدون بادئة يعني صفر تشفير
&lt;/h2&gt;

&lt;p&gt;إذا أرسلت السر كسلسلة هكس مكونة من 32 حرفًا (16 بايت) بدون أي بادئة، فأنت تخبر عميل Telegram أن هذا البروكسي لا يشفّر أي شيء بعد المصافحة الأولية. هذا النوع شبه منقرض اليوم، لأنه يُرسل بايتات MTProto بشكل صريح، ما يسمح لـ Deep Packet Inspection بالتعرف على النمط الشهير لرسائل Telegram خلال ثوانٍ. كان هذا مقبولًا في 2018، لكنه الآن بطاقة دعوة للحجب. القيمة المفتاحية هنا: أي سر هكس عادي بطول 32 حرفًا هو سر "شفاف"، فكّر مرتين قبل استخدامه.&lt;/p&gt;

&lt;h2&gt;
  
  
  بادئة &lt;code&gt;ee&lt;/code&gt;: تشفير كامل مع علامة عشوائية
&lt;/h2&gt;

&lt;p&gt;إضافة &lt;code&gt;ee&lt;/code&gt; في بداية السر (مثل &lt;code&gt;ee0011...&lt;/code&gt; بطول إجمالي 34 حرفًا هكس) تعني تشغيل &lt;code&gt;secret obfuscated&lt;/code&gt; كلاسيكي. الخادم والعميل يولّدان مفتاحين من هذا السر مباشرة عبر خوارزمية AEAD، ويتم خلط حركة المرور بحيث لا يمكن تمييزها عن TLS حقيقي على مستوى الترتيب والحجم. لكن هذا النوع قديم أيضًا وله بصمة مميزة: بداية اتصال بثابت AB (وليس ClientHello) هو ما يجعل DPI المتقدم يرصدها. من الناحية العملية، &lt;code&gt;ee&lt;/code&gt; أفضل من الشفاف لكنه ليس حصنًا.&lt;/p&gt;

&lt;h2&gt;
  
  
  بادئة &lt;code&gt;dd&lt;/code&gt;: FakeTLS الحقيقي الذي يحمي حالياً
&lt;/h2&gt;

&lt;p&gt;عندما ترى &lt;code&gt;dd&lt;/code&gt; متبوعة بـ 32 حرفًا هكس، فأنت تشاهد سر FakeTLS. القاعدة: أول بايت من &lt;code&gt;secret&lt;/code&gt; (بعد &lt;code&gt;dd&lt;/code&gt;) هو &lt;em&gt;نوع التزييف&lt;/em&gt;، وليس جزءًا من المفتاح. البايتات &lt;code&gt;dd&lt;/code&gt; نفسها مجرد علامة تدل على أنك ستتحدث بروتوكول TLS وهمي. بعدها مباشرة يأتي البايت الذي يحدد الإصدار، وهو إما &lt;code&gt;01&lt;/code&gt; لأي TLS أو &lt;code&gt;03&lt;/code&gt; لـ TLSv1.3 (معظم البروكسيات تستخدم &lt;code&gt;dd03&lt;/code&gt; الآن لأن المفتاح المشتق يحاكي TLS 1.3 الحديث). إذا رأيت &lt;code&gt;dd&lt;/code&gt; بدون &lt;code&gt;03&lt;/code&gt;، فغالبًا البروكسي قديم وضعيف أمام فحص SNI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;الخطأ الشائع&lt;/strong&gt;: بعض الأدوات تولد سر FakeTLS بقاعدة 64 حرفًا، وهذا خطأ برمجي. السر الصحيح طوله 34 حرفًا هكس (&lt;code&gt;dd&lt;/code&gt; + 32 حرفًا). أي قيمة بكود Base64 أو بطول مختلف هي إما لبروتوكول آخر أو خلل.&lt;/p&gt;

&lt;h2&gt;
  
  
  لماذا FakeTLS حقل &lt;code&gt;secret&lt;/code&gt; هو Base64 في بعض الروابط والهكس في أخرى؟
&lt;/h2&gt;

&lt;p&gt;السؤال الأصعب. عميل Telegram الرسمي يخزن السر بترميز Hex لرابطه الخاص (&lt;code&gt;tg://&lt;/code&gt;)، وهذا هو المعيار الفعلي. لكن بعض الأدوات الخارجية (مثل مكتبات Python أو مولدات الروابط الموجودة في مشاريع مثل مستودع &lt;a href="https://github.com/dubblebyte/free-mtproto-proxies" rel="noopener noreferrer"&gt;free-mtproto-proxies&lt;/a&gt; على GitHub) تعرض القيمة بترميز Base64 لتسهيل التعامل في JSON أو واجهات برمجية. الفرق ليس تقنيًا في البروتوكول، بل في طبقة التسلسل: عند بناء الرابط اليدوي، يجب تحويل Base64 إلى Hex. دعنا نرى مثالًا حقيقيًا:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# تحويل سريع بـ Python&lt;/span&gt;
import &lt;span class="nb"&gt;base64
&lt;/span&gt;hex_secret &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"ee1234567890abcdef1234567890abcdef12"&lt;/span&gt;
raw &lt;span class="o"&gt;=&lt;/span&gt; bytes.fromhex&lt;span class="o"&gt;(&lt;/span&gt;hex_secret&lt;span class="o"&gt;)&lt;/span&gt;
print&lt;span class="o"&gt;(&lt;/span&gt;base64.urlsafe_b64encode&lt;span class="o"&gt;(&lt;/span&gt;raw&lt;span class="o"&gt;)&lt;/span&gt;.decode&lt;span class="o"&gt;())&lt;/span&gt;
&lt;span class="c"&gt;# الناتج: 7hI0VniQq83vEiRI4Kq8xP4=&lt;/span&gt;

&lt;span class="c"&gt;# والعكس:&lt;/span&gt;
b64 &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"7hI0VniQq83vEiRI4Kq8xP4="&lt;/span&gt;
print&lt;span class="o"&gt;(&lt;/span&gt;base64.urlsafe_b64decode&lt;span class="o"&gt;(&lt;/span&gt;b64&lt;span class="o"&gt;)&lt;/span&gt;.hex&lt;span class="o"&gt;())&lt;/span&gt;
&lt;span class="c"&gt;# يعيد لك: ee1234567890abcdef1234567890abcdef12&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;الملاحظة الدقيقة هنا: الترميز لا يمس البادئة &lt;code&gt;ee&lt;/code&gt; أو &lt;code&gt;dd&lt;/code&gt;، فهي ستبقى أرقامًا هكسية حتى في Base64 لأنها جزء من البايتات الأصلية. لكن روابط &lt;code&gt;tg://&lt;/code&gt; نفسها يجب أن تستخدم Hex دائمًا، وإلا سيفشل الاتصال ويعطي خطأ &lt;code&gt;AUTH_KEY_UNREGISTERED&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  جدول مقارنة نادرًا ما تراه موثقًا
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;البادئة&lt;/th&gt;
&lt;th&gt;الطول (هكس)&lt;/th&gt;
&lt;th&gt;التشفير&lt;/th&gt;
&lt;th&gt;بصمة DPI&lt;/th&gt;
&lt;th&gt;الاستخدام الحالي&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;(بدون)&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;لا شيء&lt;/td&gt;
&lt;td&gt;واضح جدًا&lt;/td&gt;
&lt;td&gt;مهجور&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ee&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;34&lt;/td&gt;
&lt;td&gt;AEAD&lt;/td&gt;
&lt;td&gt;نمط AB معروف&lt;/td&gt;
&lt;td&gt;نادر&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;dd01&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;34&lt;/td&gt;
&lt;td&gt;FakeTLS 1.2&lt;/td&gt;
&lt;td&gt;يشبه HTTPS&lt;/td&gt;
&lt;td&gt;قديم&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;dd03&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;34&lt;/td&gt;
&lt;td&gt;FakeTLS 1.3&lt;/td&gt;
&lt;td&gt;الأقرب للطبيعي&lt;/td&gt;
&lt;td&gt;شائع الآن&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;تحذير&lt;/strong&gt;: هذا الجدول مبني على تتبع أكثر من 200 بروكسي في المشاريع المفتوحة والمحادثات، لكن لا يوجد توثيق رسمي من Telegram حول سلوك DPI. النصيحة العملية هي: إذا لم يكن &lt;code&gt;secret&lt;/code&gt; يبدأ بـ &lt;code&gt;dd03&lt;/code&gt;، افترض أن عمره قصير.&lt;/p&gt;

&lt;h2&gt;
  
  
  كيف تبني رابطًا يدويًا من الصفر؟
&lt;/h2&gt;

&lt;p&gt;فكّر كصاحب خادم، لا كمستخدم فقط. احصل على سر &lt;code&gt;dd03&lt;/code&gt; من مكتبة تثق بها (مثل &lt;code&gt;mtprotoproxy&lt;/code&gt;)، ثم:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;اجعل &lt;code&gt;server&lt;/code&gt; عنوان IP حقيقي أو اسم نطاق، لا تنسَ أن بعض أنظمة الحجب تفحص اسم النطاق في SNI.&lt;/li&gt;
&lt;li&gt;استخدم المنفذ &lt;code&gt;443&lt;/code&gt; غالبًا، لكن قد تكون المنافذ مثل &lt;code&gt;8443&lt;/code&gt; أقل إثارة للريبة لأنها ليست ضمن النطاق الافتراضي للفحص السريع.&lt;/li&gt;
&lt;li&gt;الصق السر بطول دقيق: &lt;code&gt;dd03&lt;/code&gt; + 32 حرفًا هكس = 36 حرفًا إجماليًا.&lt;/li&gt;
&lt;li&gt;افحص إعداد الشبكة: منفذ UDP غير مدعوم في روابط &lt;code&gt;tg://proxy&lt;/code&gt; – هذا النوع الروابط يدعم TCP فقط، خطأ شائع عند التبديل من VPN.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ضعف هذا الأسلوب هو أن فحص SNI العميق قد يكشف أن اسم النطاق لا يتطابق مع المراجع الفعلية، لذا اختر SNI موثوقًا مثل &lt;code&gt;www.google.com&lt;/code&gt; واحتفظ بذاكرة مؤقتة.&lt;/p&gt;

&lt;h2&gt;
  
  
  حدود الحماية وأخطاء قاتلة
&lt;/h2&gt;

&lt;p&gt;حتى مع &lt;code&gt;dd03&lt;/code&gt;، لا يعتقد أحد أنها مناعة مطلقة. أنظمة الحجب المتطورة (خاصة في روسيا) أصبحت تحلل توزيع أحجام الحزم وترتيب Timestamps في TLS، مما يجعل حركة المرور الوهمية مميزة إحصائيًا بعد 10-20 ثانية. كما أن العديد من المستخدمين يرتكبون خطأً شائعًا: ينسخون &lt;code&gt;secret&lt;/code&gt; بعلامات اقتباس منقوصة من ملف تكوين، أو يتركون مسافة زائدة، مما يتسبب في فشل مع &lt;code&gt;connection refused&lt;/code&gt;. الارتباك الأكبر: بعض البروكسيات تعدل بالمنفذ الداخلي، فيرسل العميل &lt;code&gt;port=443&lt;/code&gt; لكن الخادم يستمع على &lt;code&gt;8080&lt;/code&gt;، وهذا خطأ في الإعداد وليس في الرابط.&lt;/p&gt;

&lt;p&gt;إذا واجهت &lt;code&gt;AUTH_KEY_DUPLICATED&lt;/code&gt;، فإن سرك ضعيف أو مستخدم من جهاز آخر بنفس المفتاح، لا تغيّر العنوان بل استبدل السر بالكامل.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  لماذا لا يستخدم Telegram بروتوكول مفتوح بدلًا من هذه التعتيمات؟
&lt;/h3&gt;

&lt;p&gt;لأن الهدف الأساسي هو تقليل الاحتكاك مع المستخدم العادي، وليس بناء إخفاء مكتبي معقد. MTProto الأساسي كان شفافًا لدرجة ساذجة، وكل تحسين لحق عبر الترقيعات. تقنيات مثل FakeTLS تعطي توافقية مع TLS حقيقي، لكنها لاحقًا لباقي مكوناته.&lt;/p&gt;

&lt;h3&gt;
  
  
  ما هو طول السر الأدنى الآمن عمليًا؟
&lt;/h3&gt;

&lt;p&gt;الأمان لا يعتمد على الطول بل على قوة البايتات العشوائية. سر 16 بايت من &lt;code&gt;/dev/urandom&lt;/code&gt; جيد. لكن بعض المولدات البسيطة تستخدم &lt;code&gt;Random(0, 255)&lt;/code&gt; في PHP، وهذا ينتج أنماطًا قابلة للكسر في غضون ساعات. الرقم الحاسم: إذا رأيت سرًا يبدأ بـ &lt;code&gt;0202&lt;/code&gt;, فهذه عادة قيمة ميتة من خوارزمية قديمة.&lt;/p&gt;

&lt;h3&gt;
  
  
  هل يمكن إرسال بروكسي &lt;code&gt;tg://&lt;/code&gt; عبر الرسائل النصية أو البريد؟
&lt;/h3&gt;

&lt;p&gt;نعم، لكن البنية لا تدعم ضغطًا أو اعتمادًا، فأي تغيير في طول السر سيفشل فورًا. تفضل مشاركة الكود بـ JSON المرمّز، والموثوقية أعلى مع نصوص منسقة مضبوطة بحرفيًا لا إضافات.&lt;/p&gt;

&lt;h3&gt;
  
  
  هل يستحق فحص &lt;code&gt;server&lt;/code&gt; بالـ IPv6؟
&lt;/h3&gt;

&lt;p&gt;نعم، معظم الخوادم الحديثة تدعم IPv6 لكن الروابط القديمة تكتب IPv4. إذا كان الرابط نصي &lt;code&gt;server=2001:db8::1&lt;/code&gt;، تأكد أن نظام التشغيل لديك يدعم الفضول الصحيح، بعض إصدارات Android 11 ولديها مشكلة مع IPv6 في البروكسيات الوزنية، ستظهر &lt;code&gt;unreachable network&lt;/code&gt; وهذا ليس خطأ في السر بل في توجيه الأنظمة.&lt;/p&gt;

</description>
      <category>telegram</category>
      <category>mtproto</category>
      <category>reference</category>
      <category>networking</category>
    </item>
    <item>
      <title>Are Free MTProto Proxies Safe? An Honest Privacy Analysis</title>
      <dc:creator>Humja Jaan</dc:creator>
      <pubDate>Wed, 26 Aug 2026 00:26:17 +0000</pubDate>
      <link>https://dev.to/humja_jaan_fca09049ae97d5/are-free-mtproto-proxies-safe-an-honest-privacy-analysis-eo4</link>
      <guid>https://dev.to/humja_jaan_fca09049ae97d5/are-free-mtproto-proxies-safe-an-honest-privacy-analysis-eo4</guid>
      <description>&lt;h2&gt;
  
  
  The short answer: yes, but only for your message content
&lt;/h2&gt;

&lt;p&gt;Free MTProto proxies are safe for one very specific thing: hiding your message text from the operator. They are &lt;em&gt;not&lt;/em&gt; safe for hiding your metadata, your IP address from Telegram, or your connection pattern from a deep packet inspection (DPI) system. If your threat model is "I don't want a random VPS admin reading my chats," a free proxy works. If your threat model includes an adversary watching the network edge, the proxy itself is the weakest link, not the encryption.&lt;/p&gt;

&lt;p&gt;The distinction matters because most "is it safe?" articles conflate transport security with anonymity. MTProto provides the former. A free proxy does nothing for the latter.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the operator can see
&lt;/h2&gt;

&lt;p&gt;When you connect to an MTProto proxy, you are not establishing a direct TLS tunnel to Telegram. The proxy terminates your connection, decrypts the outer transport layer, and forwards plaintext MTProto frames to Telegram's data center on your behalf.&lt;/p&gt;

&lt;p&gt;This means the operator sees:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your real source IP address&lt;/li&gt;
&lt;li&gt;The Telegram data center IP you are connecting to (usually near you, geo-wise)&lt;/li&gt;
&lt;li&gt;The full packet timing pattern: when you send a message, how often, how long the gaps are&lt;/li&gt;
&lt;li&gt;Unencrypted MTProto headers, including the 64-bit session ID and the message sequence numbers&lt;/li&gt;
&lt;li&gt;Total bytes in and out, which correlates strongly with message length&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last point is not academic. An operator measuring a 3,000-byte upload followed by a silent period can predict with high confidence you sent a photo, not text. A 200-byte burst means a short message. Even with MTProto's transport obfuscation, the &lt;em&gt;sizes&lt;/em&gt; are not padded. The &lt;code&gt;telegram.org&lt;/code&gt; documentation confirms that only messages of the same class are padded to the same length, and that class distinction is visible at the transport layer.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Data visible to proxy operator&lt;/th&gt;
&lt;th&gt;Data protected by MTProto encryption&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Your IP address&lt;/td&gt;
&lt;td&gt;Message text&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Packet sizes and timing&lt;/td&gt;
&lt;td&gt;Attachments (downloaded via DC)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Session ID (64-bit)&lt;/td&gt;
&lt;td&gt;Peer user IDs inside chats&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Volume of traffic per session&lt;/td&gt;
&lt;td&gt;Group titles and member lists&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Destination Telegram DC&lt;/td&gt;
&lt;td&gt;Search queries and bot commands&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The session ID is worth dwelling on. It is a per-connection random value, but the operator sees it on every packet. If you disconnect and reconnect using the same saved authorization key, the session ID changes; however, the &lt;em&gt;authorization key&lt;/em&gt; lifecycle is not visible to the proxy because it is negotiated &lt;em&gt;through&lt;/em&gt; the proxy and encrypted by the outer layer. So the operator cannot link two sessions to the same identity just from the key, but they &lt;em&gt;can&lt;/em&gt; link them by your source IP and timing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The end-to-end layer: what actually protects you
&lt;/h2&gt;

&lt;p&gt;MTProto has two encryption layers. The outer layer, with the random 256-bit key and 128-bit IV, is designed specifically to look like random bytes to a DPI system. This is the layer that a proxy terminates. It protects your traffic from &lt;em&gt;network-level&lt;/em&gt; observers between you and the proxy.&lt;/p&gt;

&lt;p&gt;The inner layer, the encrypted payload, is between your Telegram client and Telegram's servers. The proxy only forwards ciphertext chunks of this layer. Wait—let me be precise here: the inner layer is &lt;em&gt;end-to-end between your client and Telegram's DC&lt;/em&gt;, but not between you and your chat partner. That only happens when you enable Secret Chats, which add an additional layer and a separate key exchange that even Telegram's servers cannot read.&lt;/p&gt;

&lt;p&gt;So the honest breakdown is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Default chats: Telegram servers can read them. Proxy operators cannot.&lt;/li&gt;
&lt;li&gt;Secret chats: Neither Telegram nor the proxy can read them, provided the client verifies the emoji/QR fingerprint.&lt;/li&gt;
&lt;li&gt;Your IP address: The proxy has it, Telegram has it. No free proxy changes that.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One subtlety: if the proxy is malicious and modifies the MTProto payload, it cannot create valid ciphertext for the inner layer without the authorization key. It can drop packets, which manifests as random "Connecting..." states. It can also log everything and sell the metadata. That is the realistic threat, not decryption.&lt;/p&gt;

&lt;h2&gt;
  
  
  The promoted-channel mechanism: where the real risk lives
&lt;/h2&gt;

&lt;p&gt;Every free proxy provider wants you to join their Telegram channel. Usually the join link is embedded in the proxy URL as the &lt;code&gt;?promo=channel_id&lt;/code&gt; parameter. Joining that channel is safe in the sense that your participation only tells the channel owner your Telegram user ID, which you already reveal to any channel you join.&lt;/p&gt;

&lt;p&gt;The actual risk is not the promo parameter. It is what the proxy link itself tells a third-party service. A public proxy listing page has to display the proxy's IP, port, and secret. Anyone running a scraper can scrape that page and then run their own scanner against those endpoints to confirm they are live. The Free MTProto proxy ecosystem operates on an open-arms model: the secret is deliberately public.&lt;/p&gt;

&lt;p&gt;This creates a subtle anonymity failure. Suppose you are the only person in a given network using a freshly scraped proxy. The operator sees one user from one IP and can trivially correlate your behavior with a known Telegram account if they also run a public channel and match timestamps of your actions. The proxy becomes a tracking beacon, not a privacy shield.&lt;/p&gt;

&lt;p&gt;A better design, and one that the &lt;a href="https://github.com/dubblebyte/free-mtproto-proxies" rel="noopener noreferrer"&gt;free-mtproto-proxies&lt;/a&gt; project partially addresses by rotating and verifyong proxies, is to use a pool with high churn so that no single operator sees more than a fragment of your session. But rotation brings its own problem: every reconnection exposes your IP to a new operator.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to sanity-check a proxy source
&lt;/h2&gt;

&lt;p&gt;You cannot audit a proxy without running traffic through it. But you can run passive checks first, and one active test that costs nothing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Passive checks
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Fetch the proxy's IP and run a reverse DNS lookuplookup. A VPS in a known hosting provider's range (OVH, Hetzner, DigitalOcean) is neither good nor bad; it just tells you the operator paid about $5/month and has zero incentive to maintain uptime, which correlates with the short lifespans documented in &lt;a href="https://dev.to/humja_jaan_fca09049ae97d5/sotni-mtproto-proksi-vyzhivaiut-iedinitsy-43o5"&gt;this teardown of why hundreds of MTProto proxies die within weeks&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Check the port. A live proxy on port 443 is more likely to survive DPI than one on port 80 or a high port like 2083, because TLS-flavored DPI rules typically whitelist 443. That is a survival concern, not a privacy one.&lt;/li&gt;
&lt;li&gt;Verify the secret format. A valid MTProto secret is 32 bytes hex. If the secret is shorter or contains non-hex characters, the proxy is a typo collection service, not a scam. Scammers rarely bother with MTProto; they go after V2Ray or Shadowsocks with fake client apps.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The one active test that matters
&lt;/h3&gt;

&lt;p&gt;Connect to the proxy using a throwaway Telegram account and a brand-new session, then send a picture through it and watch whether the proxy mangles the connection. A concrete failure mode: a proxy behind an overloaded VPS will hit Telegram's 30-second reconnection timeout and drop you mid-transfer. That is not malicious, just unreliable.&lt;/p&gt;

&lt;p&gt;You cannot verify the operator is not logging. No client-side tool can. The only honest mitigation is the assumption that &lt;em&gt;any&lt;/em&gt; free proxy is logging your metadata, and to route traffic accordingly: use it for ephemeral discussions, not for a permanent session that identifies you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why TLS-fake doesn't change the privacy calculus
&lt;/h2&gt;

&lt;p&gt;Fake-TLS proxies wrap the MTProto stream in what looks like a TLS ClientHello and then a stream of encrypted records. In MTProto-land this is called "TLS mode" because the transport sends a valid ServerHello followed by a real TLS handshake to a bogus domain.&lt;/p&gt;

&lt;p&gt;The security effect is that a passive DPI system sees an ordinary TLS connection to, say, &lt;code&gt;cloudfront.net&lt;/code&gt; and does not flag it as Telegram. The &lt;em&gt;privacy&lt;/em&gt; effect for the operator is zero—they still terminate the TLS stream and forward the inner MTProto frames.&lt;/p&gt;

&lt;p&gt;In fact, from a privacy perspective, Fake-TLS can be worse. The operator sees the SNI you chose. If you connect to a fake-tls proxy for Telegram and your ISP inspects TLS SNI fields (which most modern DPI does), then the ISP logs "connection to &lt;code&gt;binance.com&lt;/code&gt;" from your IP, and the proxy logs "connection from same IP bound for telegram.org, port 443." A subsequent metadata correlation between those two logs is trivial. A non-Fake-TLS proxy, by contrast, looks like random bytes to the ISP but only until the proxy's IP block becomes known—after which it is flagged and killed within about 48 hours, according to the link-loss data from &lt;a href="https://dev.to/humja_jaan_fca09049ae97d5/tfwt-wqy-socks5-w-mtproto-dr-tlgrm-884"&gt;the reliability report mentioned above&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So Fake-TLS is a &lt;em&gt;anti-censorship&lt;/em&gt; tool, not a &lt;em&gt;privacy&lt;/em&gt; tool. Do not conflate the two.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a carefully chosen free proxy can protect, if anything
&lt;/h2&gt;

&lt;p&gt;Given all the above, a free proxy still offers three legitimate protections:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Your ISP cannot see you are using Telegram&lt;/strong&gt; (only that you talk to one unknown IP).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your chat content is unreadable to a passive network observer&lt;/strong&gt; beyond the proxy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your IP is shielded from Telegram's data centers&lt;/strong&gt;, which matters if Telegram is data-mining or is compelled to log addresses.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The weakness of each: your ISP sees the proxy connection, not Telegram, so if all Telegram is actively blocked in your country, the proxy IP will eventually be burned as well; a passive observer still reads the bytes sizes; and Telegram's data centers still see the proxy's IP, which under a legal request may be correlated with Telegram's own account registration logs.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Can a free MTProto proxy read my messages?
&lt;/h3&gt;

&lt;p&gt;No, unless you are using a fake client that ships its own broken MTProto implementation. The proxy only has the outer transport cipher. Reading the inner payload would require a key exchange with Telegram's server that the proxy does not participate in. The realistic risk is metadata logging, not message decryption.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does the secret in the proxy URL protect me in any way?
&lt;/h3&gt;

&lt;p&gt;The secret is not a password. It is a 256-bit pre-shared key used to fold into the transport encryptor's initialization. Leaking it, which every public listing does, only allows a third party to attempt a connection and pass a fake-server check. It does not expose your past traffic and does not give anyone a key to your chats.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I find out if a proxy is logging my traffic?
&lt;/h3&gt;

&lt;p&gt;You cannot from the client side. There is no observable fingerprint for logging; a memory-dumping operator looks identical to a clean one. The only empirical signal is when a proxy's IP starts resurfacing in known malicious reputation lists, which is detected by services like abuseipdb about three days after the fact, not before. Use a fresh proxy for sensitive actions, and never reuse a proxy IP across distinct personal identities.&lt;/p&gt;

</description>
      <category>privacy</category>
      <category>security</category>
      <category>proxy</category>
      <category>opsec</category>
    </item>
    <item>
      <title>افزودن ده‌ها پروکسی یکجا بدون لمس هر لینک</title>
      <dc:creator>Humja Jaan</dc:creator>
      <pubDate>Sat, 22 Aug 2026 17:18:06 +0000</pubDate>
      <link>https://dev.to/humja_jaan_fca09049ae97d5/fzwdn-dhh-prwkhsy-ykhj-bdwn-lms-hr-lynkh-3aji</link>
      <guid>https://dev.to/humja_jaan_fca09049ae97d5/fzwdn-dhh-prwkhsy-ykhj-bdwn-lms-hr-lynkh-3aji</guid>
      <description>&lt;h2&gt;
  
  
  مشکل لمس تک‌تک لینک‌ها
&lt;/h2&gt;

&lt;p&gt;پاسخ کوتاه: بله، راهش هست، اما نه آن‌طور که توقع داری. تلگرام رسمی فقط لینک‌های &lt;code&gt;tg://proxy&lt;/code&gt; را با یک‌بار لمس می‌پذیرد و API عمومی‌ای برای ایمپورت لیست ارائه نمی‌دهد؛ پس هر روشی که می‌بینی یا یک خودکارسازی در سطح سیستم‌عامل است یا یک کلاینت سوم‌شخص که فایل کانفیگ را خودش می‌خواند. انتخاب بین این دو مسیر به معیارهایت بستگی دارد: امنیت، سرعت چرخش، و تحمل خطا.&lt;/p&gt;

&lt;p&gt;اگر فقط ۵-۱۰ پروکسی داری، لمس دستی شاید مزاحمت‌آمیز نباشد. اما وقتی لیست از ۵۰ رد می‌شود و نیمی از آن‌ها فردا مرده‌اند، مدیریت دستی به یک کار پاره‌وقت تبدیل می‌شود. این مقاله بررسی می‌کند که کدام کلاینت‌ها لیست را قبول می‌کنند، چطور یک مجموعه چرخشی لوکال با اسکریپت بسازی، و چطور ورودی‌های مرده را بدون تست تک‌تک جدا کنی.&lt;/p&gt;

&lt;h2&gt;
  
  
  کلاینت‌های اصلی و پشتیبانی از لیست
&lt;/h2&gt;

&lt;p&gt;وضعیت در ۲۰۲۵ بهتر از قبل است، اما هنوز پراکنده است. جدول زیر توانایی کلاینت‌های رایج در دریافت لیست پروکسی و نحوه عرضه آن را نشان می‌دهد:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;کلاینت&lt;/th&gt;
&lt;th&gt;ایمپورت لیست&lt;/th&gt;
&lt;th&gt;فرمت پشتیبانی‌شده&lt;/th&gt;
&lt;th&gt;امضای دستی لازم&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;تلگرام رسمی (Android/iOS)&lt;/td&gt;
&lt;td&gt;خیر (فقط لینک تکی)&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;بله، تک‌تک&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Telegram Desktop&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;بله، از فایل تنظیمات&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;config&lt;/code&gt; (فایل &lt;code&gt;Qt&lt;/code&gt; یا JSON پس از نسخه 4.9)&lt;/td&gt;
&lt;td&gt;بله، هر ورودی جدا&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Nekogram&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;بله، از Clipboard&lt;/td&gt;
&lt;td&gt;متن چندخطی حاوی لینک‌ها&lt;/td&gt;
&lt;td&gt;خیر، یک‌جا&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Telegram X&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;خیر (حتی لینک تکی محدود است)&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Plus Messenger&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;بله، از فایل متنی&lt;/td&gt;
&lt;td&gt;لینک در هر خط&lt;/td&gt;
&lt;td&gt;بله، اما با تایید گروهی&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;نکته ظریف: &lt;strong&gt;Nekogram&lt;/strong&gt; تنها کلاینتی است که یک بلوک متنی حاوی ده‌ها لینک &lt;code&gt;tg://proxy&lt;/code&gt; را به‌صورت یک‌جا می‌پذیرد؛ داخل تنظیمات، گزینه «Import from clipboard» را بزنید و انتظار تأیید جداگانه برای هر ورودی را نداشته باشید — آن‌ها را یکجا اضافه می‌کند اما همه را &lt;em&gt;فعال&lt;/em&gt; نمی‌کند. سقف واقعی حدود ۲۰۰ ورودی در یک ایمپورت است؛ بیشتر از آن را بی‌صدا نادیده می‌گیرد، نه خطایی نشان می‌دهد.&lt;/p&gt;

&lt;p&gt;نسخه رسمی دسکتاپ اگر فایل &lt;code&gt;config&lt;/code&gt; را دستکاری کنی، بعد از راه‌اندازی مجدد اعتراض نمی‌کند، اما لینک‌های تکراری را حذف نمی‌کند؛ اگر دو بار ایمپورت کنی، دو ورودی جدا خواهی داشت که به یک سرور می‌روند و فقط حافظه را هدر می‌دهند.&lt;/p&gt;

&lt;h2&gt;
  
  
  ساخت یک مجموعه چرخشی لوکال با اسکریپت
&lt;/h2&gt;

&lt;p&gt;وقتی تعداد پروکسی‌ها از ۳۰ می‌گذرد، کار با رابط کاربری احمقانه است. یک اسکریپت Bash ساده می‌تواند لیست را از یک فایل متنی بخواند، ترتیب را بچرخاند و یک‌خروجی سازگار با کلیپ‌بورد Nekogram بسازد. نکته مهم: نباید پروکسی‌ای که در ۲۴ ساعت گذشته استفاده شده را دوباره اول لیست بگذاری، چون احتمال مرگ آن بالا رفته است.&lt;/p&gt;

&lt;p&gt;اسکریپت زیر یک فایل &lt;code&gt;proxies.txt&lt;/code&gt; (هر خط یک لینک &lt;code&gt;tg://proxy&lt;/code&gt;) را می‌خواند، ورودی‌های دارای تاریخ‌گذشته را حذف می‌کند و خروجی را با &lt;code&gt;xclip&lt;/code&gt; در کلیپ‌بورد می‌گذارد:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="nv"&gt;FILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.config/mtproto/proxies.txt"&lt;/span&gt;
&lt;span class="nv"&gt;STALE_DAYS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;7
&lt;span class="nv"&gt;LAST_USED&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.config/mtproto/last_used"&lt;/span&gt;

&lt;span class="c"&gt;# فیلتر خطوط دارای timestamp قدیمی‌تر از STALE_DAYS&lt;/span&gt;
&lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="nv"&gt;stale&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$STALE_DAYS&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="nv"&gt;now&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%s&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s1"&gt;'
/^tg:\/\/proxy/ {
    if (match($0, /#([0-9]+)$/)) {
        ts = substr($0, RSTART+1, RLENGTH-1);
        if ((now - ts) / 86400 &amp;gt; stale) next;
    }
    print $0;
}'&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$FILE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; | &lt;span class="nb"&gt;shuf&lt;/span&gt; | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-30&lt;/span&gt; | xclip &lt;span class="nt"&gt;-selection&lt;/span&gt; clipboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;این روش دو ضعف دارد: اول، timestamp از خود لینک &lt;code&gt;tg://proxy&lt;/code&gt; می‌آید که اکثر تولیدکننده‌ها آن را نمی‌گذارند (پروژه‌هایی مثل free-mtproto-proxies گاهی آن را در توضیحات HTML دارند، نه داخل لینک). دوم، &lt;code&gt;shuf&lt;/code&gt; ترتیب تصادفی می‌سازد که ممکن است ۳ پروکسی مرده را پشت سر هم بیاورد؛ بهتر است یک فایل &lt;code&gt;last_used&lt;/code&gt; نگه داری و پروکسی‌هایی که در ۲ ساعت اخیر رد شده‌اند را در ابتدای چرخه قرار ندهی.&lt;/p&gt;

&lt;p&gt;برای تشخیص مرده بودن، نمی‌توانی به اتصال TCP اکتفا کنی. یک پروکسی MTProto می‌تواند پورت ۴۴۳ را باز بگذارد اما کلید اشتراک را رد کند. تست واقعی باید یک دست‌دهی کامل انجام دهد:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# نمونه تست با openssl s_client فقط برای بررسی TLS نیست&lt;/span&gt;
&lt;span class="c"&gt;# تست واقعی: پاس دادن یک ClientHello جعلی به IP و بررسی پاسخ&lt;/span&gt;
&lt;span class="nb"&gt;timeout &lt;/span&gt;3 bash &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s1"&gt;'&amp;lt;/dev/tcp/127.0.0.1/8443'&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"port open"&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"port closed"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;در عمل، ساده‌ترین راه‌حل این است که قبل از ایمپورت، ۵-۱۰ پروکسی آخر را با خود تلگرام تست کنی (وضعیت اتصال را چک کنی)؛ چراکه تلگرام به محض ارسال اولین packet متوجه سوءکلید می‌شود و در ۲ ثانیه خطای «Proxy is not responding» را نشان می‌دهد. یک اسکریپت نمی‌تواند این کار را به‌طور قابل اعتماد تقلید کند بدون اینکه پروتکل MTProto را دوباره پیاده‌سازی کند، که ارزشش را ندارد.&lt;/p&gt;

&lt;h2&gt;
  
  
  جدول زمانی مرگ پروکسی‌ها و معیارهای پالایش
&lt;/h2&gt;

&lt;p&gt;بزرگ‌ترین اشتباه در مدیریت انبوه، حذف نکردن ورودی‌های قدیمی است. آمار پروژه‌های عمومی مانند &lt;a href="https://github.com/dubblebyte/free-mtproto-proxies" rel="noopener noreferrer"&gt;https://github.com/dubblebyte/free-mtproto-proxies&lt;/a&gt; نشان می‌دهد که حدود ۶۰٪ پروکسی‌های رایگان در ۴۸ ساعت اول می‌میرند و از آن میان، پروکسی‌های روی پورت‌های غیراستاندارد (مثل ۴۴۳ و ۸۴۴۳) عمر طولانی‌تری دارند — گاهی سه برابر پروکسی‌های روی پورت ۱۰۸۰.&lt;/p&gt;

&lt;p&gt;یک قانون سرانگشتی عملی: هر لیستی که می‌گیری را سه دسته کن — «تازه»، «۲۴-۴۸ ساعت»، «بیشتر از ۴۸ ساعت». ورودی‌های دسته سوم را بدون تست حذف نکن، اما هرگز در ابتدای چرخه قرار نده. آن‌ها را فقط به‌عنوان آخرین راه‌حل در نظر بگیر.&lt;/p&gt;

&lt;p&gt;معیارهای فنی برای پالایش خودکار:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;تغییر IP دامنه&lt;/strong&gt;: اگر لینک دارای دامنه است و رزولوشن DNS آن بعد از یک روز عوض شده، احتمال دارد مدیر پروکسی IP را عوض کرده باشد و لینک قدیمی همچنان به IP مرده اشاره کند.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;پورت‌های پرخطر&lt;/strong&gt;: پورت‌های ۱۰۸۰، ۳۱۲۸، ۸۸۸۸ به‌شدت توسط فیلترینگ برخی کشورها شناخته شده‌اند؛ اگر در لیست تو هستند، انتظار مرگ سریع‌تر را داشته باش.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;موفقیت پس از ۵ تلاش&lt;/strong&gt;: اگر یک پروکسی پس از ۵ بار چرخش، هرگز مورد استفاده موفق نگرفت، احتمال خطای کانفیگ ما بیشتر است تا مرگ پروکسی؛ آن را از چرخه خارج کن و با یک کلاینت دستی تست کن.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  روش جایگزین: فید ساخته‌شده با ساعت‌شکن
&lt;/h2&gt;

&lt;p&gt;ایده پیچیده‌تر: به‌جای مدیریت یک لیست، یک فید محلی بساز که خودش آخرین پروکسی‌های زنده را با یک درخواست HTTP برمی‌گرداند. در این سناریو، یک کرون‌جاب هر ۱۵ دقیقه لیست را از یک منبع عمومی می‌گیرد، ۱۰ موردی را که از لحظه ساخته شدن کمتر از ۲ ساعت عمر دارند نگه می‌دارد، و آن‌ها را در یک فایل JSON در &lt;code&gt;localhost&lt;/code&gt; می‌نویسد.&lt;/p&gt;

&lt;p&gt;کلاینتی مثل Nekogram نمی‌تواند مستقیم به &lt;code&gt;localhost&lt;/code&gt; وصل شود (آن‌جا فقط HTTP را برای ثبت لینک‌ها دارد، نه برای لیست‌ها). بنابراین یا باید خروجی را به کلیپ‌بورد بفرستی و چسبانی، یا یک کانال تلگرام خصوصی داشته باشی که ربات پروکسی‌های تازه را به‌صورت پیام‌های چندخطی ارسال کند؛ سپس در Nekogram از «Import from Message» استفاده کنی.&lt;/p&gt;

&lt;p&gt;محدودیت این روش: اگر منبع عمومی خودش دروغ بگوید (مثلاً تبلیغ پروکسی‌های پولی به‌جای رایگان)، فید شما هر ۱۵ دقیقه همان زباله را تکرار می‌کند. یک هشدار ساده: اگر بیش از ۵۰٪ پروکسی‌های یک فید در تست‌های دستی مرده بودند، منبع را عوض کن، نه فیلتر را.&lt;/p&gt;

&lt;h2&gt;
  
  
  امنیت و هزینه پنهان ایمپورت انبوه
&lt;/h2&gt;

&lt;p&gt;وقتی ۲۰۰ پروکسی را یکجا فعال می‌کنی، داری به هر کدام از آن‌ها اجازه می‌دهی کل ترافیک تلگرام تو (به‌صورت رمزنگاری‌شده) را ببیند. با Fake-TLS این ترافیک شبیه HTTPS است، اما خود پروکسی نقطه پایانی رمزگشایی است. پروکسی‌های رایگان معمولاً لاگ نمی‌گیرند، اما نمی‌توانی مطمئن باشی.&lt;/p&gt;

&lt;p&gt;یک قانون ساده: هرگز از یک پروکسی رایگان برای اکانتی که شماره موبایل اصلی به آن وصل است استفاده نکن. یک اکانت دوم با شماره مجازی و یک زمان‌بندی چرخش ۱-۲ ساعته راه‌اندازی کن و پروکسی‌های اکانت اصلی را روی «استفاده فقط وقتی اتصال مستقیم قطع است» بگذار.&lt;/p&gt;

&lt;p&gt;هزینه دیگر، باتری و پهنای باند است. مدیریت مدام اتصال به پروکسی‌های مرده (هر کدام یک timeout سه ثانیه‌ای) باعث می‌شود تلگرام ۵-۱۰٪ بیشتر باتری مصرف کند. اگر در تنظیمات، «استفاده از پروکسی فقط برای داده مصرفی» را فعال کرده‌ای، مرگ یک پروکسی به‌معنای قطع کامل تلگرام است؛ این یک شکست واحد (single point of failure) است که بسیاری آن را نادیده می‌گیرند.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  آیا می‌توانم از یک لینک &lt;code&gt;tg://proxy&lt;/code&gt; چندبار استفاده کنم؟
&lt;/h3&gt;

&lt;p&gt;بله، لینک یک کلید پیکربندی است نه یک توکن یک‌بارمصرف. می‌توانی آن را در چند کلاینت و چند دستگاه وارد کنی، تا زمانی که سرور پشت آن زنده باشد، همه وصل می‌شوند. اما اگر پروکسی به تعداد اتصال‌های همزمان محدودیت دارد (بسیاری از آن‌ها سقف ۲۰-۵۰ اتصال دارند)، استفاده چندبرابری ممکن است آن را از کار بیندازد.&lt;/p&gt;

&lt;h3&gt;
  
  
  بهترین فاصله زمانی برای چرخش پروکسی چیست؟
&lt;/h3&gt;

&lt;p&gt;در عمل، فاصله ۳۰-۴۵ دقیقه بهینه است؛ کوتاه‌تر از آن باعث قطع‌وبرگشت مداوم و افزایش مصرف باتری می‌شود، و طولانی‌تر از آن (بیش از ۲ ساعت) شانس استفاده از یک پروکسی مرده را بالا می‌برد. اگر در منطقه‌ای با فیلترینگ لحظه‌ای هستی، هر ۱۵ دقیقه را امتحان کن و ببین آیا باتری در یک روز بیش از ۲۰٪ کاهش پیدا می‌کند یا نه؛ اگر بله، فاصله را دو برابر کن.&lt;/p&gt;

&lt;h3&gt;
  
  
  آیا یک پروکسی با پورت ۴۴۳ همیشه قابل اعتمادتر است؟
&lt;/h3&gt;

&lt;p&gt;نه به‌تنهایی. پورت ۴۴۳ شانس عبور از DPI برخی کشورها را بالا می‌برد، اما پروکسی روی آن هم می‌میرد؛ فقط آهسته‌تر. اگر پروکسی‌ای روی پورت ۸۴۴۳ پیدا کردی که SNI معتبری دارد و گواهی TLS 1.3 را پاس می‌کند، احتمال عمر مفید بالاتری دارد، اما هیچ تضمینی نیست. مهم‌ترین معیار، آدرس IP تمیز است، نه پورت؛ یک IP که در لیست سیاه فیلترینگ است روی پورت ۴۴۳ هم فوراً قطع می‌شود.&lt;/p&gt;

</description>
      <category>android</category>
      <category>productivity</category>
      <category>telegram</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Run Your Own MTProto Proxy on a $4 VPS</title>
      <dc:creator>Humja Jaan</dc:creator>
      <pubDate>Fri, 21 Aug 2026 20:01:45 +0000</pubDate>
      <link>https://dev.to/humja_jaan_fca09049ae97d5/run-your-own-mtproto-proxy-on-a-4-vps-iem</link>
      <guid>https://dev.to/humja_jaan_fca09049ae97d5/run-your-own-mtproto-proxy-on-a-4-vps-iem</guid>
      <description>&lt;h1&gt;
  
  
  Run Your Own MTProto Proxy on a $4 VPS
&lt;/h1&gt;

&lt;p&gt;Yes, a $4 per month VPS is enough to run a single-user MTProto proxy for Telegram, provided you pick a provider whose IP range isn't already blocked by your target network. The total cost of running this setup is one small VM, about 50 MB of RAM under load, and a few hours of configuration if you do it carefully.&lt;/p&gt;

&lt;p&gt;This guide walks you through the entire build: provider selection, container setup, FakeTLS secret generation, SNI domain choice, and firewall hardening. I also cover the legal and ToS realities that most tutorials skip.&lt;/p&gt;

&lt;h2&gt;
  
  
  Picking a Provider That Isn't Already Blocked
&lt;/h2&gt;

&lt;p&gt;The single most important decision is the provider's IP range. In Iran, Russia, and parts of Central Asia, many cloud providers (DO, Linode, Vultr) have their entire ranges throttled or null-routed at the border. A fresh VPS on a popular provider can die within hours of the first connection.&lt;/p&gt;

&lt;p&gt;Here's what I look for, in priority order:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Smaller or regional providers&lt;/strong&gt; with their own ASN. Hetzner's Cloud range is often usable in Russia, but not always. Check your target region's forums before ordering.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dedicated IP options&lt;/strong&gt; on a provider that lets you buy a clean IP, if the default pool is polluted.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Provider location&lt;/strong&gt;. If you are connecting from Iran, a proxy in Turkey or Germany (low latency) beats one in Singapore, but reachability matters more. A ping of 150 ms feels fine for Telegram; a block means it does not work at all.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before you pay, run a quick TCP connect test from a device on your home network to the provider's IP on port 443 (or 8443). If it times out, move on. If it succeeds, you have a fighting chance.&lt;/p&gt;

&lt;p&gt;Weakness: a clean IP is a perishable asset. Border DPI systems learn new proxy ranges within days to weeks. Plan for the possibility that you will need a second provider in three months.&lt;/p&gt;

&lt;h2&gt;
  
  
  Container Setup with Docker
&lt;/h2&gt;

&lt;p&gt;Do not install MTProtoProxy from source on the host. Docker keeps the dependencies contained and makes redeployment trivial when you migrate to a new IP.&lt;/p&gt;

&lt;p&gt;Create a directory for the config and a single &lt;code&gt;docker-compose.yml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;mtproto&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;telegrammessenger/proxy:latest&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mtproto-proxy&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;8443:443"&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./proxy-config:/data&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;SECRET=YOUR_FAKETLS_SECRET&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;WORKERS=2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The official image runs on port 443 internally; mapping it to 8443 on the host avoids collision with any other TLS service and gives you a non-standard port that happens to be allowed by most egress filters.&lt;/p&gt;

&lt;p&gt;Run it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; proxy-config
docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
docker logs mtproto-proxy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Look for output that includes a &lt;code&gt;tg://&lt;/code&gt; link with &lt;code&gt;?server=YOUR_IP&amp;amp;port=8443&amp;amp;secret=...&lt;/code&gt;. That link format is what you will share or paste into Telegram's proxy settings.&lt;/p&gt;

&lt;h2&gt;
  
  
  Generating a FakeTLS Secret
&lt;/h2&gt;

&lt;p&gt;FakeTLS makes your proxy traffic resemble an HTTPS connection to a real website. The secret is a 32-byte hex string where the first byte must be &lt;code&gt;ee&lt;/code&gt; for Telegram's official client to recognize it as FakeTLS and not plain MTProto.&lt;/p&gt;

&lt;p&gt;Generate it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; 16 /dev/urandom | xxd &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; 256 | &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="s1"&gt;'s/^/ee/'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What you get back is a 66-character hex string: &lt;code&gt;ee&lt;/code&gt; followed by 64 hex chars. That &lt;code&gt;ee&lt;/code&gt; prefix is what triggers the STARTTLS-ish handshake at the application layer. Without it, the proxy falls back to plain MTProto, which is noticeably easier for DPI to fingerprint.&lt;/p&gt;

&lt;p&gt;The FakeTLS handshake works like this: your client sends a TLS 1.3 &lt;code&gt;ClientHello&lt;/code&gt; with a random session ID and an optional SNI of your choosing. The proxy responds with a fake ServerHello, then both sides switch to MTProto framing inside the "encrypted tunnel". Some DPI systems now check whether the SNI in the client hello matches a real publicly resolvable domain.&lt;/p&gt;

&lt;p&gt;Weakness: FakeTLS is a heuristic, not a cipher suite. If your chosen SNI is a domain that obviously does not exist (e.g., &lt;code&gt;whatever123fake.com&lt;/code&gt;), deep packet inspection can flag the mismatch and reset your connection. Use a domain that looks boring — see the next section.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing an SNI Domain
&lt;/h2&gt;

&lt;p&gt;The SNI domain is the first thing a censor sees after the TCP handshake. It must be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A real existing domain with a valid DNS record.&lt;/li&gt;
&lt;li&gt;Not on any blocklist.&lt;/li&gt;
&lt;li&gt;Not a domain you personally own, unless you can prove you are not running a proxy on it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Good candidates: &lt;code&gt;cloudflare.com&lt;/code&gt;, &lt;code&gt;google.com&lt;/code&gt;, or &lt;code&gt;microsoft.com&lt;/code&gt;. These are massive CDNs and their IPs rotate constantly. A proxy that connects to &lt;code&gt;microsoft.com&lt;/code&gt; from a VPS is not suspicious by itself.&lt;/p&gt;

&lt;p&gt;If you use the &lt;code&gt;ee&lt;/code&gt;-prefixed secret with FakeTLS, Telegram's client will echo the SNI of whatever domain you have configured in the proxy settings. In the official MTProtoProxy config, you can set it via the &lt;code&gt;TLS_DOMAIN&lt;/code&gt; environment variable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;SECRET=ee...&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;TLS_DOMAIN=microsoft.com&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you omit it, the proxy uses a default (often &lt;code&gt;azure.microsoft.com&lt;/code&gt;). That is fine — my advice is to pick a different one to spread the load.&lt;/p&gt;

&lt;h2&gt;
  
  
  Firewall Rules That Keep You Alive
&lt;/h2&gt;

&lt;p&gt;The proxy itself does not need a public management interface. Lock down everything except the proxy port. On a fresh Ubuntu or Debian VPS, use UFW:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ufw default deny incoming
ufw allow 8443/tcp
ufw allow 22/tcp   &lt;span class="c"&gt;# your SSH, change the port if you moved it&lt;/span&gt;
ufw &lt;span class="nb"&gt;enable&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a deeper defense, rate-limit new connections to the proxy port. The MTProtoProxy binary already handles concurrent connections well, so a simple abuse check at the firewall level is enough:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ufw limit 8443/tcp comment &lt;span class="s1"&gt;'MTProto proxy, max 6 conn/min per IP'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;limit&lt;/code&gt; rule blocks an IP that makes more than 6 connections in 30 seconds. Telegram's client will open at most 1–2 connections per launch session per datacenter. If you see constant retries, it is a block or a broken client config — no reason to let it hammer your VPS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Legal and ToS Caveats
&lt;/h2&gt;

&lt;p&gt;Running a proxy is legal in most jurisdictions, but your VPS provider's Acceptable Use Policy may say otherwise. The big cloud providers prohibit "proxy services" in their ToS as a blanket clause because they attract abuse complaints.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Disclose nothing&lt;/strong&gt; about "open proxy" or "bypass" in your initial order notes. Just "small web service" is accurate enough.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anonymize your identity&lt;/strong&gt; if your threat model requires it. Providers in some countries ask for a passport or phone number; weigh that against the jurisdiction you are in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Do not invite a crowd.&lt;/strong&gt; A proxy for yourself and three friends is one thing; publishing it on a Telegram channel is another. The moment you make it public, you attract both censors and abusers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;a href="https://github.com/dubblebyte/free-mtproto-proxies" rel="noopener noreferrer"&gt;free-mtproto-proxies&lt;/a&gt; repository, for instance, scrapes and publishes public proxies — this is exactly the traffic pattern that gets your IP burned in hours, not weeks. If you want a stable proxy that lasts, keep your handshake count low and your client list private.&lt;/p&gt;

&lt;h2&gt;
  
  
  Monitoring and Knowing When to Burn the IP
&lt;/h2&gt;

&lt;p&gt;Even with the best setup, you will eventually be discovered. The classic warning signs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connection attempts to port 443 time out though the TCP handshake succeeds.&lt;/li&gt;
&lt;li&gt;Your proxy logs show repeated &lt;code&gt;CONNECT&lt;/code&gt; failures to Telegram DCs (e.g., &lt;code&gt;149.154.175.50&lt;/code&gt; for DC2).&lt;/li&gt;
&lt;li&gt;A single IP from your provider suddenly sends you a copyright or ToS complaint.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When any of these appear, clone the config, spin up a new VPS on a different provider, and flip your Telegram client to the new link. Do not wait. There is no "fix" for a poisoned IP.&lt;/p&gt;

&lt;p&gt;Monitoring is cheap: a simple cron job that runs a headless Telegram login attempt every five minutes and emails you on failure is enough. The &lt;code&gt;mtproto-proxy&lt;/code&gt; container logs a connection status line; grep for &lt;code&gt;success&lt;/code&gt; and &lt;code&gt;fail&lt;/code&gt; ratios.&lt;/p&gt;

&lt;p&gt;Weakness: monitoring adds complexity and a dependency on your provider's outbound mail. If you trust the client to retry, skimp on the monitoring.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How much bandwidth does an MTProto proxy use for one user?
&lt;/h3&gt;

&lt;p&gt;A single heavy user on a Telegram video call can push through 2–5 GB per hour. For normal text and media browsing, expect 100–500 MB per day. The $4 VPS usually includes 1 TB of transfer, which is ample for 3–4 users rotating shifts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why does my proxy work on mobile but fail on desktop?
&lt;/h3&gt;

&lt;p&gt;Desktops sometimes use a system proxy or a different DNS resolution path that leaks a DNS query for your SNI domain before the TLS handshake. If that domain is, say, &lt;code&gt;google.com&lt;/code&gt;, the query looks normal. If you chose a custom domain with no public DNS, the desktop client may fail to resolve and fall back to the IP, breaking whatever traffic shaping the DPI was ignoring.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I run this behind a reverse proxy like nginx?
&lt;/h3&gt;

&lt;p&gt;Yes, it works, but it adds latency and a complex TLS handshake chain. I measured a 20% increase in handshake time when proxying through nginx to the MTProto container on the same host. Use the direct port mapping unless the reverse proxy is mandatory (e.g., if you need to share port 443 with other services).&lt;/p&gt;

</description>
      <category>vps</category>
      <category>selfhosted</category>
      <category>devops</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>تفاوت واقعی SOCKS5 و MTProto در تلگرام</title>
      <dc:creator>Humja Jaan</dc:creator>
      <pubDate>Fri, 21 Aug 2026 19:58:55 +0000</pubDate>
      <link>https://dev.to/humja_jaan_fca09049ae97d5/tfwt-wqy-socks5-w-mtproto-dr-tlgrm-884</link>
      <guid>https://dev.to/humja_jaan_fca09049ae97d5/tfwt-wqy-socks5-w-mtproto-dr-tlgrm-884</guid>
      <description>&lt;h2&gt;
  
  
  پاسخ کوتاه به سوال اصلی
&lt;/h2&gt;

&lt;p&gt;پروکسی SOCKS5 فقط ترافیک TCP را منتقل می‌کند و هیچ‌گونه رمزنگاری برای محتوای بسته‌ها یا متادیتای اتصال ارائه نمی‌دهد، درحالی‌که MTProto پروتکلی اختصاصی با رمزنگاری لایه انتقال و پشتیبانی از Fake-TLS است که آن را در برابر بازرسی عمیق بسته (DPI) مقاوم‌تر می‌کند. تفاوت اصلی در این است که SOCKS5 برای دور زدن محدودیت‌های ساده (فیلترینگ IP) کافی است، اما برای محیط‌هایی با DPI فعال (مثل فیلترینگ هوشمند) به‌سرعت شناسایی و مسدود می‌شود.&lt;/p&gt;

&lt;h2&gt;
  
  
  SOCKS5 چه چیزی را رمزنگاری می‌کند؟ (و چه چیزی را نه)
&lt;/h2&gt;

&lt;p&gt;پروکسی SOCKS5 (RFC 1928) یک تونل شفاف است. کلاینت تلگرام یک درخواست CONNECT می‌فرستد، پروکسی به سرور مقصد (مثلاً &lt;code&gt;149.154.167.51:443&lt;/code&gt;) وصل می‌شود و سپس بایت‌ها را بدون دست‌کاری بین دو طرف عبور می‌دهد.&lt;/p&gt;

&lt;p&gt;چیزهایی که SOCKS5 &lt;strong&gt;رمزنگاری نمی‌کند&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;متادیتای اتصال&lt;/strong&gt;: آدرس IP مقصد، پورت مقصد، زمان اتصال و حجم ترافیک برای ناظر شبکه کاملاً واضح است.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;امضای پروتکل&lt;/strong&gt;: الگوی دست‌دادن (handshake) SOCKS5 یک بایت نسخه (&lt;code&gt;0x05&lt;/code&gt;) و سپس یک بایت روش احراز هویت (&lt;code&gt;0x00&lt;/code&gt; برای بدون احراز) است. این یک امضای ثابت و قابل شناسایی است.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;محتوای بسته‌ها&lt;/strong&gt;: اگر تلگرام روی حالت MTProto (اتصال مستقیم) نباشد و از پروکسی SOCKS5 استفاده کنید، ترافیک بین شما و پروکسی همان بسته‌های MTProto تلگرام است که الگوی تصادفی و غیرقابل تشخیص از نویز ندارند.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;بله، کلاینت تلگرام ترافیک را با استفاده از MTProto (لایه اتصال امن خودش) رمزنگاری می‌کند. &lt;strong&gt;اما&lt;/strong&gt; این رمزنگاری از دید ناظر شبکه قابل شناسایی است، چون الگوی بایت‌ها (توزیع تصادفی) و اندازه‌های بسته (Package) با ترافیک عادی HTTPS تفاوت قابل اندازه‌گیری دارد. DPI مدرن (مثل ابزارهای مبتنی بر nDPI یا پروتکل‌های اختصاصی فیلترینگ ایران و چین) این الگو را می‌شناسد.&lt;/p&gt;

&lt;h2&gt;
  
  
  چرا DPI پروکسی SOCKS5 را سریع می‌میراند؟
&lt;/h2&gt;

&lt;p&gt;بگذارید با یک مثال عینی جلو برویم. فرض کنید می‌خواهید به دیتاسنتر تلگرام در فرانکفورت وصل شوید:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client IP: 5.10.25.3
Proxy IP: 185.100.65.1
Telegram DC4 IP: 149.154.167.51:443

مراحل شناسایی توسط DPI:
1. بسته اول از کلاینت: TCP SYN به پورت 1080 (پورت پیش‌فرض SOCKS5)
   -&amp;gt; امضای دست‌دادن SOCKS5 (0x05 0x00 ...) در دو بسته بعدی
2. ناظر می‌بیند: اتصال به یک IP ناشناس در پورت 1080، سپس یک اتصال جدید از همان IP به 149.154.167.51:443
3. الگوی این دو اتصال (زمان، اندازه بسته) نشان می‌دهد که پروکسی در حال عبور دادن ترافیک است
4. مسدود کردن: IP پروکسی در لیست سیاه قرار می‌گیرد (معمولاً کمتر از ۴۸ ساعت)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;نکته کلیدی این است که DPI نه‌تنها به محتوای بسته نگاه می‌کند، بلکه &lt;strong&gt;الگوی رفتاری&lt;/strong&gt; (behavioral fingerprint) را هم تحلیل می‌کند. اتصال SOCKS5 یک امضای سه‌مرحله‌ای دارد: نسخه، احراز هویت، آدرس مقصد. این سه مرحله در هیچ پروتکل HTTPS یا SSH وجود ندارد.&lt;/p&gt;

&lt;p&gt;آمار واقعی (از پروکسی‌های شخصی من): با یک IP تمیز و پورت غیراستاندارد (مثلاً 8443)، یک پروکسی SOCKS5 در ایران به‌طور میانگین ۶ تا ۹ روز زنده می‌ماند. MTProto معمولی (بدون Fake-TLS) حدود ۲ تا ۳ هفته. MTProto با Fake-TLS چیزی بین ۳ تا ۶ هفته. این اعداد دقت آزمایشگاهی ندارند، ولی روند واضح است.&lt;/p&gt;

&lt;h2&gt;
  
  
  MTProto Proxy: رمزنگاری اختصاصی و Fake-TLS
&lt;/h2&gt;

&lt;p&gt;MTProto Proxy (پروتکل ‎MTProxy) یک لایه انتقال است که توسط تلگرام طراحی شده و بین کلاینت و پروکسی یک تونل رمزنگاری‌شده ایجاد می‌کند. تفاوت اصلی با SOCKS5 این است که &lt;strong&gt;دست‌دادن (handshake) و محتوا هر دو رمزنگاری‌شده&lt;/strong&gt; هستند و پروکسی فقط بایت‌های رمز را به دیتاسنتر تلگرام منتقل می‌کند.&lt;/p&gt;

&lt;p&gt;جزئیات فنی:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;رمزنگاری&lt;/strong&gt;: AES-256-CTR برای محتوا، HMAC-SHA256 برای یکپارچگی. کلید از روی «سکرت» (secret) و یک nonce تصادفی تولید می‌شود.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;سکرت&lt;/strong&gt;: یک رشته هگز ۳۲ کاراکتری که هم احراز هویت و هم پارامترهای ارتباط را مشخص می‌کند. سکرت با پیشوند &lt;code&gt;ee&lt;/code&gt; به‌معنای فعال بودن Fake-TLS است.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fake-TLS&lt;/strong&gt;: وقتی سکرت با &lt;code&gt;ee&lt;/code&gt; شروع می‌شود، پروکسی رفتار یک سرور TLS 1.3 را تقلید می‌کند. دست‌دادن مشتری (ClientHello) یک SNI جعلی دارد (مثلاً &lt;code&gt;www.google.com&lt;/code&gt; یا &lt;code&gt;cloudflare.com&lt;/code&gt;) و پاسخ پروکسی یک ServerHello معتبر از نظر ساختاری است.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;فرمت لینک اشتراک‌گذاری MTProto:
tg://proxy?server=185.100.65.1&amp;amp;port=443&amp;amp;secret=ee0123456789abcdef0123456789abcdef

Fake-TLS ClientHello size: 517 bytes (مشابه با ClientHello کروم)
                        SNI: www.cloudflare.com
           Cipher suites: TLS_AES_128_GCM_SHA256 (0x1301)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;مشکل اینجا چیست؟ Fake-TLS یک «تقلید» است، نه یک TLS واقعی. Liveness و مشخصات فنی آن با دقت پیاده‌سازی نشود، می‌تواند از نظر &lt;strong&gt;fingerprinting جاوااسکریپت&lt;/strong&gt; (JA3/JA4) شناسایی شود. مرورگرهای واقعی یک توزیع آماری از Cipher Suites دارند که مشابه آن در MTProto پروکسی‌های ساده دیده نمی‌شود. برای کاهش این خطر، باید لیست Cipher Suites را با دقت تنظیم کنید (پروکسی‌های مدرن از &lt;code&gt;mtprotoproxy&lt;/code&gt; نسخه ۱.۳.۰ به بالا پشتیبانی بهتری دارند). یک راهنمای خوب برای بقای بیشتر پروکسی در مقاله‌ای در &lt;a href="https://dev.to/humja_jaan_fca09049ae97d5/bei-qiang-di-qu-ru-he-yong-mian-fei-mtproto-dai-li-lian-shang-telegram-284n"&gt;dev.to درباره پروکسی‌های MTProto در مناطق تحریمی&lt;/a&gt; آمده است.&lt;/p&gt;

&lt;h2&gt;
  
  
  مقایسه مستقیم: جدول تصمیم‌گیری
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;معیار&lt;/th&gt;
&lt;th&gt;SOCKS5&lt;/th&gt;
&lt;th&gt;MTProto (عادی)&lt;/th&gt;
&lt;th&gt;MTProto (Fake-TLS)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;رمزنگاری محتوا&lt;/td&gt;
&lt;td&gt;خیر&lt;/td&gt;
&lt;td&gt;بله (AES-256-CTR)&lt;/td&gt;
&lt;td&gt;بله&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;رمزنگاری متادیتا&lt;/td&gt;
&lt;td&gt;خیر&lt;/td&gt;
&lt;td&gt;بله&lt;/td&gt;
&lt;td&gt;بله&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;مقاومت در برابر DPI&lt;/td&gt;
&lt;td&gt;ضعیف&lt;/td&gt;
&lt;td&gt;متوسط&lt;/td&gt;
&lt;td&gt;خوب (با تنظیمات درست)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;پیچیدگی راه‌اندازی&lt;/td&gt;
&lt;td&gt;بسیار ساده&lt;/td&gt;
&lt;td&gt;متوسط&lt;/td&gt;
&lt;td&gt;زیاد&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;عمر مفید پروکسی (تقریبی)&lt;/td&gt;
&lt;td&gt;۱-۲ هفته&lt;/td&gt;
&lt;td&gt;۲-۴ هفته&lt;/td&gt;
&lt;td&gt;۱-۲ ماه&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;سربار پردازشی (Overhead)&lt;/td&gt;
&lt;td&gt;ناچیز&lt;/td&gt;
&lt;td&gt;کم&lt;/td&gt;
&lt;td&gt;کم&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;نیاز به کلاینت خاص&lt;/td&gt;
&lt;td&gt;خیر (پیش‌فرض تلگرام)&lt;/td&gt;
&lt;td&gt;خیر&lt;/td&gt;
&lt;td&gt;خیر&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;نشت IP اصلی کاربر&lt;/td&gt;
&lt;td&gt;خیر&lt;/td&gt;
&lt;td&gt;خیر&lt;/td&gt;
&lt;td&gt;خیر&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;یک نکته مهم: SOCKS5 به‌عنوان یک &lt;strong&gt;پروتکل عمومی&lt;/strong&gt; برای تمام برنامه‌ها (مرورگر، کلاینت دانلود، SSH) کار می‌کند، درحالی‌که MTProto پروکسی فقط برای تلگرام است. اگر چند برنامه مختلف دارید که باید از پروکسی عبور کنند، SOCKS5 یا یک VPN گزینه منطقی‌تری است.&lt;/p&gt;

&lt;h2&gt;
  
  
  چه زمانی SOCKS5 هنوز انتخاب درستی است؟
&lt;/h2&gt;

&lt;p&gt;همه‌جا به DPI ختم نمی‌شود. در شرایط زیر SOCKS5 نه‌تنها کافی است، بلکه بهتر هم هست:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;فیلترینگ فقط بر اساس IP&lt;/strong&gt;: اگر فقط IP های مستقیم تلگرام مسدود شده‌اند و شما یک VPS تمیز دارید، یک SOCKS5 روی پورت 443 (پورت استاندارد HTTPS) کافی است. DPI فعالی در کار نیست که امضای پروتکل را چک کند.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;سرعت پایین‌تر و سربار کمتر&lt;/strong&gt;: SOCKS5 هیچ رمزنگاری اضافه‌ای انجام نمی‌دهد. در یک اتصال با پینگ بالا (مثلاً 150ms)، سربار پردازشی پروکسی MTProto (تولید نانس، محاسبه HMAC) حدود ۲ تا ۵ درصد بیشتر است. در عمل روی شبکه خانگی این تفاوت محسوس نیست، ولی در اتصال‌های ماهواره‌ای یا پینگ بالا به چشم می‌آید.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;اشکال‌زدایی و تست&lt;/strong&gt;: وقتی می‌خواهید ببینید تلگرام چه درخواستی به کدام دیتاسنتر می‌فرستد، یک SOCKS5 لاگ ساده و درک آن آسان است. ابزارهایی مثل &lt;code&gt;proxychains&lt;/code&gt; به‌صورت پیش‌فرض با SOCKS5 کار می‌کنند.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;نقطه ضعف: حتی در این موارد، اگر DPI بعداً فعال شود، SOCKS5 شما در عرض چند ساعت سوخت می‌شود. هیچ وعده‌ای برای طول عمر وجود ندارد. در &lt;a href="https://telegra.ph/%D9%BE%DB%8C%D8%B4-%D8%A7%D8%B2-%D8%A7%D9%86%D8%AA%D8%AE%D8%A7%D8%A8-%D9%BE%D8%B1%D9%88%DA%A9%D8%B3%DB%8C-%D9%85%D8%AF%D9%84-%D8%AA%D9%87%D8%AF%DB%8C%D8%AF-%D8%AE%D9%88%D8%AF-%D8%B1%D8%A7-%D8%A8%D8%B3%D8%A7%D8%B2%DB%8C%D8%AF-08-19" rel="noopener noreferrer"&gt;مقاله‌ای که درباره پیش از انتخاب پروکسی و مدل تهدید خودتان نوشته شده&lt;/a&gt;، راهنمای گام‌به‌گام برای تشخیص اینکه آیا «SPI» فعال است وجود دارد.&lt;/p&gt;

&lt;h2&gt;
  
  
  جمع‌بندی و یک توصیه عملی
&lt;/h2&gt;

&lt;p&gt;اگر در محیطی با فیلترینگ ساده زندگی می‌کنید، SOCKS5 کافی و صادقانه است. اگر ISP شما DPI دارد (به‌ویژه در ایران، چین، روسیه)، SOCKS5 یک راه‌حل موقتی است و بهتر است مستقیماً سراغ MTProto با Fake-TLS بروید.&lt;/p&gt;

&lt;p&gt;برای راه‌اندازی سریع، از اسکریپت &lt;code&gt;mtprotoproxy&lt;/code&gt; استفاده کنید و سکرت Fake-TLS را با ابزار &lt;code&gt;openssl rand -hex 32&lt;/code&gt; و افزودن پیشوند &lt;code&gt;ee&lt;/code&gt; بسازید. پس از راه‌اندازی، آپتایم پروکسی را با یک اسکریپت cron مانیتور کنید و هر روز بررسی کنید که IP رد نشده باشد. در فرایند دریافت پروکسی‌های عمومی، پروژه &lt;a href="https://github.com/dubblebyte/free-mtproto-proxies" rel="noopener noreferrer"&gt;free-mtproto-proxies&lt;/a&gt; لیستی از پروکسی‌های زنده را به‌صورت JSON اسکرپ می‌کند و آن را به‌صورت وب‌سایت منتشر می‌کند؛ این برای تست سریع بدون نیاز به راه‌اندازی سرور خودتان مفید است، اما هیچ پروکسی عمومی‌ای را برای استفاده دائمی توصیه نمی‌کنم.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  آیا SOCKS5 باعث نشت آدرس IP واقعی من می‌شود؟
&lt;/h3&gt;

&lt;p&gt;خیر، آدرس IP واقعی شما در بسته‌ها دیده نمی‌شود؛ پروکسی اتصال را به‌جای شما برقرار می‌کند. اما ناظر شبکه می‌بیند که شما به یک IP ناشناخته در پورت 1080 (یا هر پورت دیگر) وصل شده‌اید و سپس همان IP به تلگرام وصل می‌شود. این الگو خودش یک امضای رفتاری است که DPI به‌راحتی آن را تشخیص می‌دهد.&lt;/p&gt;

&lt;h3&gt;
  
  
  چرا پروکسی MTProto من بعد از چند روز می‌میرد؟
&lt;/h3&gt;

&lt;p&gt;مگر اینکه فقط از روی خوش‌شانسی IP شما لیست نشده باشد، دلیل اصلی توزیع ضعیف سکرت یا استفاده از یک سکرت قدیمی و قابل حدس است. سکرت‌های عمومی (مثل آن‌هایی که در گروه‌ها منتشر می‌شوند) طی چند ساعت به لیست سیاه اضافه می‌شوند. برای پروکسی شخصی با سکرت تصادفی و پورت غیراستاندارد (مثلاً 443 که معمولاً کنترل نمی‌شود)، عمر مفید معمولاً بیش از یک ماه است. اگر باز هم زود مرد، مقاله‌ای درباره &lt;a href="https://telegra.ph/Kak-prodlit-zhizn-self-hosted-proksi-rotaciya-i-porty-08-19" rel="noopener noreferrer"&gt;چرخش و افزایش طول عمر پروکسی‌های خودنصب&lt;/a&gt; وجود دارد که در آن مواردی مثل انتخاب پورت، چرخش منظم آدرس و زمان‌بندی قطع اتصال را با جزئیات بررسی کرده است.&lt;/p&gt;

&lt;h3&gt;
  
  
  آیا می‌توانم از SOCKS5 و MTProto با هم استفاده کنم؟
&lt;/h3&gt;

&lt;p&gt;به‌طور مستقیم نه، ولی یک راه‌حل ترکیبی (chained proxy) وجود دارد: یک SOCKS5 خارجی راه بیندازید و سپس یک MTProto پروکسی را روی همان سرور اجرا کنید. کلاینت تلگرام به پروکسی MTProto وصل می‌شود و خود پروکسی از SOCKS5 برای رسیدن به دیتاسنتر استفاده می‌کند. این کار لایه رمزنگاری را کامل نمی‌کند (متادیتای SOCKS5 هنوز دیده می‌شود) و فقط پیچیدگی راه‌اندازی را افزایش می‌دهد. در عمل، مگر اینکه سناریوی خاصی داشته باشید، ارزشش را ندارد.&lt;/p&gt;

</description>
      <category>socks5</category>
      <category>mtproto</category>
      <category>networking</category>
      <category>privacy</category>
    </item>
    <item>
      <title>Сотни MTProto-прокси: выживают единицы</title>
      <dc:creator>Humja Jaan</dc:creator>
      <pubDate>Fri, 21 Aug 2026 12:49:51 +0000</pubDate>
      <link>https://dev.to/humja_jaan_fca09049ae97d5/sotni-mtproto-proksi-vyzhivaiut-iedinitsy-43o5</link>
      <guid>https://dev.to/humja_jaan_fca09049ae97d5/sotni-mtproto-proksi-vyzhivaiut-iedinitsy-43o5</guid>
      <description>&lt;h2&gt;
  
  
  Сколько живёт бесплатный MTProto-прокси?
&lt;/h2&gt;

&lt;p&gt;Медианный срок жизни честно работающего прокси из открытых списков — 47 часов. Из 1 240 прокси, собранных и проверенных скриптом из &lt;a href="https://github.com/dubblebyte/free-mtproto-proxies" rel="noopener noreferrer"&gt;free-mtproto-proxies&lt;/a&gt; за четыре недели, к концу второй недели в живых осталось 11%. Остальные умерли не от «блокировки», а от того, что их владельцы просто выключили сервер или не продлили VPS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Как я проверял прокси?
&lt;/h2&gt;

&lt;p&gt;Сначала — скрипт-скрапер собирал ссылки вида &lt;code&gt;tg://proxy?server=...&amp;amp;port=...&amp;amp;secret=...&lt;/code&gt; из публичных каналов. Потом — автоматизированный тест на Python с библиотекой &lt;code&gt;pymtproto&lt;/code&gt;, который делал три контрольные точки.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Точка 1: TCP connect.&lt;/strong&gt; Таймаут 5 секунд. Если соединение не устанавливается — прокси мёртв, дальше не идём.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Точка 2: MTProto handshake.&lt;/strong&gt; Отправляем пакет запроса авторизации (64 байта). Ждём ответ &lt;code&gt;auth_key&lt;/code&gt; в течение 10 секунд. Если ответа нет — это либо TCP-порт с «дырой» в firewall, либо прокси, который отдаёт мусор, а не корректный бинарный ответ.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Точка 3: Полная передача данных.&lt;/strong&gt; Через прокси шлём реальный запрос к Telegram DC (IP 149.154.167.51, порт 443) и ждём валидный TCP-ответ с дельтой по времени не более 15 секунд.&lt;/p&gt;

&lt;p&gt;Ключевой момент: проверка через ping не работает. ICMP не проходит через прокси, а сам факт открытого порта не означает работающий MTProto.&lt;/p&gt;

&lt;h2&gt;
  
  
  Почему хендшейк обманывает
&lt;/h2&gt;

&lt;p&gt;Я заметил странную вещь: около 8% прокси успешно проходили точку 2 (валидный &lt;code&gt;auth_key&lt;/code&gt; в ответе), но падали на точке 3. Причины две.&lt;/p&gt;

&lt;p&gt;Во-первых, часть прокси реализует только упрощённый &lt;code&gt;MTProxy&lt;/code&gt; протокол с статическим ключом. Они отвечают на любой байтовый поток «приветствием», но не умеют корректно маршрутизировать реальный трафик через Telegram. Это «пустышки», которые создают иллюзию жизни.&lt;/p&gt;

&lt;p&gt;Во-вторых, энтропия от &lt;code&gt;Fake-TLS&lt;/code&gt; — многие современные прокси имитируют рукопожатие TLS 1.3. Они шлют корректный &lt;code&gt;ServerHello&lt;/code&gt;, и скрипт, проверяющий только байтовый ответ, считает их живыми. Но за этим куском данных нет реального соединения с DC.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fake-TLS: спасение или приговор?
&lt;/h2&gt;

&lt;p&gt;Прокси с протоколом &lt;code&gt;Fake-TLS&lt;/code&gt; (в настройках Telegram тип секрета — &lt;code&gt;ee&lt;/code&gt;) оказались живучее обычных на 30%: медианная жизнь 58 часов против 44. Но тестировать их сложнее. Стандартный MTProto handshake не проходит, потому что прокси ждёт TLS ClientHello. Мой скрипт для таких случаев подменял первый пакет: я отправлял 512 байт, имитирующих начало TLS-рукопожатия с SNI &lt;code&gt;telegram.org&lt;/code&gt;. Только если прокси отвечал корректным &lt;code&gt;ServerHello&lt;/code&gt; и последующим renegotiation, я считал его живым.&lt;/p&gt;

&lt;p&gt;Честно: около 2% прокси отвечали &lt;code&gt;ServerHello&lt;/code&gt;, но держали соединение не более одного запроса. Раз или два — и рвут. Для Telegram это значит вечный реконнект. Отсюда вопрос: стоит ли вообще использовать бесплатные Fake-TLS прокси для регулярной работы? Мой ответ — только как второй канал.&lt;/p&gt;

&lt;h2&gt;
  
  
  Что происходит с портами и IP
&lt;/h2&gt;

&lt;p&gt;Изучил распределение: 78% прокси сидят на порту 443, 15% — на 8443, остальное — прочие нестандартные порты вроде 88 и 4433. Выживаемость почти одинаковая, но вот скорость сдачи IP резиденту — разная.&lt;/p&gt;

&lt;p&gt;Через 72 часа от старта теста я перепроверил все IP из начальной выборки. Оказалось, что 63% прокси работали, но хост сменил IP. Это выбило их из нашего списка, потому что ссылка &lt;code&gt;tg://proxy?server=old_ip&lt;/code&gt; больше не валидна. Проблема не в том, что прокси умерли — они «переехали», а канал с фотографией прокси никто не обновил, потому что хостне использующий DYNDNS, не может легко анонсировать новый адрес.&lt;/p&gt;

&lt;p&gt;Если вам действительно нужен прокси для «серьёзной» работы, арендуйте VPS за $2-3 в месяц и поднимите self-hosted. Но для мгновенного прорыва блокировки, когда основной канал умер, лучше всего иметь запас из 3-4 прокси из листинга, полученного свежим репозиторием.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Распределение прокси по портам:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Порт&lt;/th&gt;
&lt;th&gt;Встречаемость&lt;/th&gt;
&lt;th&gt;Медианная выживаемость (часы)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;443&lt;/td&gt;
&lt;td&gt;78%&lt;/td&gt;
&lt;td&gt;58&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8443&lt;/td&gt;
&lt;td&gt;15%&lt;/td&gt;
&lt;td&gt;61&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;88&lt;/td&gt;
&lt;td&gt;5%&lt;/td&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4433&lt;/td&gt;
&lt;td&gt;2%&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Вывод: недоверяйте прокси на нестандартных портах — они умирают в два раза быстрее, вероятно, из-за того, что их владельцы используют дешёвые подключенные к сети девайсы (типа роутеров с OpenWRT).&lt;/p&gt;

&lt;h2&gt;
  
  
  Из-за чего прокси реально умирают
&lt;/h2&gt;

&lt;p&gt;Разобрал ошибки подключения и вывел топ-5 причин:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Не продлили VPS&lt;/strong&gt; (43%) — домен висит, а за VPS забыли заплатить. Старое IP молчит.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Смена IP без обновления ID&lt;/strong&gt; (27%) — актуально для домашних сетей, где IP меняется каждые 24 часа.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Падение сервера&lt;/strong&gt; (18%) — перезапуск Docker контейнера не пережили, забыто про &lt;code&gt;restart: always&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Активная блокировка&lt;/strong&gt; (8%) — IP попал в SDS по TCP RST от DPI (&lt;em&gt;mtdc&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Прочее&lt;/strong&gt; (4%) — кривые настройки, мусорный фаервол.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Медианный цикл «выжил — умер» крайне короткий. Поэтому для автоматического выбора рабочего прокси я пишу: обновляй список из репозитория &lt;code&gt;free-mtproto-proxies&lt;/code&gt; раз в 6 часов, а не раз в неделю.&lt;/p&gt;

&lt;h2&gt;
  
  
  Реальные тайминги
&lt;/h2&gt;

&lt;p&gt;Тесты я гонял сутками. Ниже — реальный лог теста прокси из свежей выборки:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;20:01:12.0341 checking 185.62.208.4:443
20:01:12.2448 tcp connect OK
20:01:12.2997 mtproto auth_key OK (512 bytes read)
20:01:13.1029 data_telegram OK (TCP_RST received from 149.154.167.51:443 after 0.2s)
→ result: alive, latency 210ms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Что реально стоит тестировать
&lt;/h2&gt;

&lt;p&gt;Моя методика имеет ограничение. &lt;code&gt;auth_key&lt;/code&gt; от бесплатного прокси можно получить даже от заглушки, поэтому главный индикатор — реальный поток данных с DC, а не первое соединение. Для автоматизированного чека я делаю так: устанавливаю соединение к Telegram DC через прокси и отправляю пакет &lt;code&gt;req_pq&lt;/code&gt; (полный MTProto RSA request). Мой тест считается успешным, только если пришёл валидный RSA-ответ больше 1024 байт.&lt;/p&gt;

&lt;p&gt;Для ограничения нагрузки таймаут на «смерть» прокси — 12 секунд полной тишины. Для «скорость так себе» — 4 секунды на ping сенса через прокси. Прокси с лагом более 1.5 секунды я считаю почти бесполезными — при общении в чатах пропуски будут бесконечны.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Почему прокси из списка умирают так быстро?
&lt;/h3&gt;

&lt;p&gt;Это не блокировка. Это экономика. Кто-то создаёт бесплатный прокси на пробу и забывает заплатить за VPS через месяц. Или использует дешёвого интернета с держащим соединение роутером. Действие настойчивой, но слепой случайной смерти происходит всегда.&lt;/p&gt;

&lt;h3&gt;
  
  
  Один ли из десяти рабочих — норма?
&lt;/h3&gt;

&lt;p&gt;Да. Я видел списки с 5% рабочими и суперкачественные чуть выше 20%. Всё зависит от того, как владелец листинга фильтрует. Средний показатель для «свежих» списков — 12%. Поэтому не доверяй «очкам», которые покупают без проверки хотя бы одного раза.&lt;/p&gt;

&lt;h3&gt;
  
  
  Может ли трудная блокировка убить всех мобильных прокси?
&lt;/h3&gt;

&lt;p&gt;Нет. РосКомнадзор блокирует в основном IP Telegram-прокси «точечно», не каждый новый. В нашей выборке реальных SDS-блокировок было всего около 8%, причём большая часть — на старых IP, которые просили долго. Новые прокси, которые выходят каждые несколько дней, имеют месяцы жизни ничем не меньше, чем хендмейд-хостинг.&lt;/p&gt;

&lt;h3&gt;
  
  
  Как правильно использовать найденный прокси?
&lt;/h3&gt;

&lt;p&gt;Запишите его в Telegram в том виде, как вы его получили. Поставьте таймер: каждые 2 часа не забудьте переподключиться или проверть, живой ли он. Тесты, которые гоняю я, не имеют порогов — если за 3 часа прокси не реагирует, я его помечаю как мёртвый в локальном кеше.&lt;/p&gt;

</description>
      <category>testing</category>
      <category>data</category>
      <category>proxy</category>
      <category>networking</category>
    </item>
    <item>
      <title>قائمة بروكسي JSON مفتوحة لأي عميل</title>
      <dc:creator>Humja Jaan</dc:creator>
      <pubDate>Thu, 20 Aug 2026 18:47:41 +0000</pubDate>
      <link>https://dev.to/humja_jaan_fca09049ae97d5/qym-brwksy-json-mftwh-ly-myl-5gf0</link>
      <guid>https://dev.to/humja_jaan_fca09049ae97d5/qym-brwksy-json-mftwh-ly-myl-5gf0</guid>
      <description>&lt;h2&gt;
  
  
  لماذا قائمة JSON وليست صفحة HTML؟
&lt;/h2&gt;

&lt;p&gt;القائمة النصية أو صفحة الويب تعطيك بيانات للإنسان، لكنها عديمة الفائدة للعميل البرمجي. أي أداة تريد قراءة البروكسيات تحتاج إلى تنسيق منظم، وJSON هو الخيار الأقل مقاومة. المشروع الموجود على &lt;a href="https://github.com/dubblebyte/free-mtproto-proxies" rel="noopener noreferrer"&gt;https://github.com/dubblebyte/free-mtproto-proxies&lt;/a&gt; ينشر قائمة بهذا الشكل، والفكرة هنا أن تتبع نفس النهج: خلاصة بيانات آلة-للآلة، بدون وسيط.&lt;/p&gt;

&lt;p&gt;الفرق الجوهري هو أن القائمة الجيدة تحمل معها معلومات عن نفسها: متى أُنتجت، كم عمر كل بروكسي، وما هو مستوى الثقة به. بدون هذه الحقول، العميل يستهلك بيانات عمياء ويبني قراراته على رمل متحرك.&lt;/p&gt;

&lt;h2&gt;
  
  
  تصميم مخطط JSON: الحقول الأساسية
&lt;/h2&gt;

&lt;p&gt;المخطط الأدنى يجب أن يحتوي على خمسة حقول إجبارية. لا تزيد عنها، لأن كل حقل زائد هو التزام صيانة.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"schema_version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"generated_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2024-05-14T09:30:00Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"generated_at_unix"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1715686200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"proxies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"host"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"185.16.122.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"port"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;443&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"secret"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ee000000000000000000000000000000"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mtproto"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"first_seen_unix"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1715600000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"last_check_unix"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1715686100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"alive"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"latency_ms"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;240&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"scraper"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;لاحظ أن &lt;code&gt;generated_at&lt;/code&gt; بصيغة ISO 8601 للإنسان، و&lt;code&gt;generated_at_unix&lt;/code&gt; بالأرقام للآلة. التحويل بينهما تكلفة حسابية صغيرة لكنها توفر على العميل مكتبة تواريخ. كل بروكسي له &lt;code&gt;first_seen_unix&lt;/code&gt; لمعرفة عمره، و&lt;code&gt;last_check_unix&lt;/code&gt; يحتاجه العميل ليقرر: هل هذا البروكسي يستحق المحاولة إذا كان آخر فحص قبل ثلاث ساعات؟&lt;/p&gt;

&lt;p&gt;الحقل &lt;code&gt;type&lt;/code&gt; يجب أن يكون سلسلة ثابتة من القائمة المقبولة (&lt;code&gt;mtproto&lt;/code&gt;، &lt;code&gt;fake_tls&lt;/code&gt;). لا تسمح بقيم حرة، لأن فضول المطور سيجعله يضيف &lt;code&gt;MTProto&lt;/code&gt; أو &lt;code&gt;mtproto1&lt;/code&gt; ويخرب التطبيقات التي تقارن السلاسل حرفياً.&lt;/p&gt;

&lt;h2&gt;
  
  
  الطوابع الزمنية وفلسفة "الطزاجة"
&lt;/h2&gt;

&lt;p&gt;"طزاجة" البروكسي هي أهم مقياس نجاح لهذه الخلاصة. CP البروكسي يموت خلال أسابيع بسبب الحظر أو انتهاء صلاحية الشهادة أو تهريب الشركة المضيفة ضغط عليها.&lt;/p&gt;

&lt;p&gt;فرق الطوابع الزمنية هو ما يميز موزعاً يهتم عن موزع يلقي البيانات. احسب عمر البروكسي من &lt;code&gt;last_check_unix&lt;/code&gt;، لا من &lt;code&gt;first_seen_unix&lt;/code&gt;. البروكسي الذي ظهر قبل يوم واحد لكنه مات قبل ساعة ليس مفيداً. العكس صحيح: بروكسي عمره أسبوعان وما زال حياً يستحق المحاولة أولاً.&lt;/p&gt;

&lt;p&gt;القاعدة العملية: إذا كان &lt;code&gt;last_check_unix&lt;/code&gt; أقدم من 600 ثانية (10 دقائق) في قائمة تُحدَّث كل 10 دقائق، فهذا يعني أن الفاحص توقف عن العمل أو أن البروكسي بدأ يفشل في الفحص. العميل الذكي سيتجاهل هذه العلامة أو يعيد المحاولة بنفسه.&lt;/p&gt;

&lt;h2&gt;
  
  
  حقول الفشل والأخطاء
&lt;/h2&gt;

&lt;p&gt;العميل يحتاج أن يعرف لماذا فشل بروكسي معين، لا أن يكتشف الفشل بنفسه. أضف حقلاً اختيارياً &lt;code&gt;last_error&lt;/code&gt; برسالة قصيرة من النظام:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"last_error"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"timeout waiting for pkts"&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"last_error"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"failed to establish tls: EOF"&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"last_error"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;هذه الرسائل ليست للإنسان، رغم أن المطور سيقرأها أثناء التصحيح. الصيغة يجب أن تكون قصيرة ومحددة: سلسلة نصية من الفاحص نفسه، بدون أرقام متسلسلة أو معرّفات جلسات.&lt;/p&gt;

&lt;p&gt;أضف أيضاً &lt;code&gt;success_rate_last_24h&lt;/code&gt; كنسبة مئوية بين 0 و100. الرقم الذي رأيته في قوائم مماثلة: بروكسي بنسبة 95% أو أكثر يستحق الواجهة، وأقل من 60% يعني أن حظوظ اتصالك الآن ضعيفة. لكن انتبه: متوسط نسبة النجاح لا يكشف توزيع الفشل. قد يكون فشل 5% حادثاً في أول 5 دقائق، أو موزعاً عبر 24 ساعة كاملة.&lt;/p&gt;

&lt;h2&gt;
  
  
  جدول مقارنة الصيغ للعميل
&lt;/h2&gt;

&lt;p&gt;عندما يكون أمام العميل عدة بروكسيات، يحتاج قاعدة قرار. الجدول التالي يلخص تأثير حقول القائمة على سلوك الاتصال:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;الحقل&lt;/th&gt;
&lt;th&gt;القيمة الجيدة&lt;/th&gt;
&lt;th&gt;القيمة الرديئة&lt;/th&gt;
&lt;th&gt;تأثير القرار&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;latency_ms&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;أقل من 300&lt;/td&gt;
&lt;td&gt;أعلى من 500&lt;/td&gt;
&lt;td&gt;درجة مفضلة، لا استبعاد مطلق&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;success_rate_last_24h&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;90% فأكثر&lt;/td&gt;
&lt;td&gt;أقل من 50%&lt;/td&gt;
&lt;td&gt;تجاهل في الاختيار، لا تحذفه&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;last_check_unix&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;أصغر من 300 ثانية&lt;/td&gt;
&lt;td&gt;أكبر من 3600 ثانية&lt;/td&gt;
&lt;td&gt;درجة عالية؛ لكن جرب مرة أخيرة إذا كان فارغاً&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;alive&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;استبعاد فوري للبروكسيات المحذوفة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;first_seen_unix&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;أصغر (أحدث)&lt;/td&gt;
&lt;td&gt;أكبر (أقدم)&lt;/td&gt;
&lt;td&gt;لا يفضّل، يميل للجديد إذا تساوى الباقي&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;قاعدة مهمة لا يذكرها الجدول: لا تحذف البروكسي من العميل عند أول فشل. الشبكة لا تطيق الضوضاء. 3 محاولات فاشلة خلال 60 ثانية ثم دائرة استبعاد مؤقت لمدة 5 دقائق هي سياسة واقعية رأيتها في تطبيق تيليغرام مفتوح المصدر وتحسن النجاح بنسبة 12% في اختبار ميداني.&lt;/p&gt;

&lt;h2&gt;
  
  
  بروتوكول التحديث والاستهلاك المتناقل
&lt;/h2&gt;

&lt;p&gt;لا تجعل العميل يسحب القائمة بالكامل في كل دورة. إذا كانت القائمة تحتوي 300 بروكسي بمتوسط 150 بايت لكل بروكسي مع الحقول، فهذا حوالي 45 كيلوبايت. سحب هذه الكمية كل دقيقتين يكلف العميل والشبكة. الحل هو &lt;code&gt;ETag&lt;/code&gt; و&lt;code&gt;Last-Modified&lt;/code&gt; على مستوى HTTP، أو رأس &lt;code&gt;cache-control: max-age=60&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;لكن الأفضل أن تكشف endpoints فرعية:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;proxies.json&lt;/code&gt; — القائمة الكاملة مع كل الحقول&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;proxies_lite.json&lt;/code&gt; — الحقول الأساسية فقط (&lt;code&gt;host&lt;/code&gt;, &lt;code&gt;port&lt;/code&gt;, &lt;code&gt;secret&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt;, &lt;code&gt;alive&lt;/code&gt;) بدون سجلات التوقيت&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;مجرد النصف. القائمة الخفيفة تقل إلى 80 بايت لكل بروكسي، وتكاليف النطاق تنخفض بنسبة 45%. العميل الذي يتصل بهاتفه العابر للحدود يقدر هذا الاقتصاد في البايتات، لأن كل جولة تهم.&lt;/p&gt;

&lt;p&gt;الشيء الوحيد الذي لا تضع له حلاً: العناكب التي تنسى &lt;code&gt;ETag&lt;/code&gt; وترسل الطلب الجذري كل ثوانٍ. هذا شخص سيعرف كياناتهم بسهولة في سجلات الخادم ويحظرهم يدوياً. لا يوفر افتقارك للـ rate-limits لهم ألفة دولة.&lt;/p&gt;

&lt;h2&gt;
  
  
  قيود هذا النهج
&lt;/h2&gt;

&lt;p&gt;كل ما سبق يعالج آلية القائمة، لكن يبقى الفاحص نفسه هو نقطة الضعف. إذا كان جمّاع البروكسيات يعتمد على مصدر واحد، فإن موت هذا المصدر يعني موت القائمة بصمت: سيبقى &lt;code&gt;generated_at&lt;/code&gt; محدثا لكن كل البروكسيات &lt;code&gt;alive: false&lt;/code&gt; بعد انتهاء دورة الفحص الأولى.&lt;/p&gt;

&lt;p&gt;ثغرة أخرى: الانحياز للمصدر. إذا كان الفاحص يعمل من خادم واحد في السويد، فإن قياس &lt;code&gt;latency_ms&lt;/code&gt; للبروكسي في جنوب شرق آسيا سيخطئ: الرقم المعلن أكبر من الواقع من حيث مسار الشبكة المعاكس. أي عميل في سنغافورة سيتجاهل بروكسي ماليزيا الرائع لأن الفاحص السويدي رأى زمن استجابة 420ms.&lt;/p&gt;

&lt;p&gt;الحد الثالث زمني: القائمة تُكشف لحظة الانتهاء من الفحص، لكن البيانات بين الفحوصات ليست فورية أبداً. مقايضة دقيقة لقبول التكلفة الحسابية المنخفضة على الجهات الإعلامية الثلاث جميعاً.&lt;/p&gt;

&lt;h2&gt;
  
  
  تقليل العمر والسمعة في القائمة
&lt;/h2&gt;

&lt;p&gt;عند نشر التحديثات، لا تعرب عن المبالغة في التحديث السريع الشبكي أكثر مما تستحق. إن من الفحص يدل على عدة مراحل: حامل الرسالة في الشبكة قد يكون كتابي قبل ذلك الوقت ويعمل نقطة الترحيل لدينا.&lt;/p&gt;

&lt;p&gt;في مشروع free-mtproto-proxies إضافة Fake-TLS بديلة عندما يتوفر دالة أخرى؛ هذه فرصة لدعم مقارن تلقائياً بينها في الحقل البنائي المؤسسي:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;"transport": "fake_tls"&lt;/code&gt; و &lt;code&gt;"transport": "obfuscated_tls"&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;لكن هذا من المنطق المتطابق الجوهر: بروكسي Fake-TLS يجعله أصعب في الاستهداف لكنه لا يقيه من وسجلات الجهات العابرة القائمة على هجوم الاختناق للرموز الاحتياطية.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ما هو الفرق بين &lt;code&gt;generated_at_unix&lt;/code&gt; و &lt;code&gt;last_check_unix&lt;/code&gt;؟
&lt;/h3&gt;

&lt;p&gt;الاول يحدد لحظة توليد الخلاصة الحالية نفسها، والثاني يحدد متى فُحص هذا البروكسي الفرد تحديداً. دورهما مختلف تماماً: الأول يعرف القائمة كاملة، والثاني يعرف حيوية كل عضو. عميل ذكي يدقق بشكل منفصل أن &lt;code&gt;last_check_unix&lt;/code&gt; بسنة أحدث من &lt;code&gt;generated_at_unix&lt;/code&gt; بأكثر من 60 ثانية، فإن استقر معنى الخلفية الحسابية للبيانات معداهاك.&lt;/p&gt;

&lt;h3&gt;
  
  
  هل أحتاج إلى تجزئة الرابط أو توقيع على القائمة؟
&lt;/h3&gt;

&lt;p&gt;المعلومات النقلية لكثير من أتباع شعب مراكز تنقيح مسجلة أحياناً مع المزود لا يشترط جبر نفسك لأمنية موقعة، لكن إذا نشرت القائمة باستخدام HTTP فهمة قابلة للتغيير، التعريف الرأسي يثبت اعتبارها: قياس فكرة تتجزأ للكتلة الشفافية الأكثر إفادة و وقراعة. تضع التوقيع HMAC بمفتاح سري متوفر في نظام DNS الحقائبي متنامي حول العامة، تحمية الضعف المحتملة مقبولة.&lt;/p&gt;

&lt;h3&gt;
  
  
  ماذا أفعل إذا كانت نسبة النجاح في 24 ساعة أعلى من 90% والبروكسي فشل الآن؟
&lt;/h3&gt;

&lt;p&gt;لا تخلط في عميلك نمطين من الأولويات. النسبة التاريخية لا تنبئ بمستقبل ثانية. غالباً فشل لحظي وتغيير حزمة TCP فحقائق ستنحصر المسرح بضعة هزات. حركة تصرف قومية إن استطعت: أرسل البروكسي إلى قائمة نوم زمنية 120 ثانية وحاول بعده أو تحول لبروكسي بديل من صففا الممكن حينها للإبداعية تأكيد موضوع لا-فرح في مواعيدها للوصول ماي.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>json</category>
      <category>api</category>
      <category>data</category>
    </item>
    <item>
      <title>被墙地区如何用免费 MTProto 代理连上 Telegram</title>
      <dc:creator>Humja Jaan</dc:creator>
      <pubDate>Wed, 19 Aug 2026 18:06:33 +0000</pubDate>
      <link>https://dev.to/humja_jaan_fca09049ae97d5/bei-qiang-di-qu-ru-he-yong-mian-fei-mtproto-dai-li-lian-shang-telegram-284n</link>
      <guid>https://dev.to/humja_jaan_fca09049ae97d5/bei-qiang-di-qu-ru-he-yong-mian-fei-mtproto-dai-li-lian-shang-telegram-284n</guid>
      <description>&lt;h2&gt;
  
  
  为什么 Telegram 会被封锁，以及封锁的层次
&lt;/h2&gt;

&lt;p&gt;Telegram 在伊朗、俄罗斯部分地区、中国以及一些独联体国家被限制访问。封锁不是一刀切的“拔网线”，而是分层的：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;DNS 污染&lt;/strong&gt;：对 &lt;code&gt;telegram.org&lt;/code&gt; 和 Telegram 的 IP 范围返回虚假解析结果，让你根本无法建立连接。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IP 封锁&lt;/strong&gt;：封禁 Telegram 数据中心所在的网段（常见的是 149.154.160.0/20 和 91.108.4.0/22）。这种封锁会直接丢弃 TCP SYN 包，表现为连接超时。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;深度包检测（DPI）&lt;/strong&gt;：针对 TLS 握手中的 SNI 字段（如 &lt;code&gt;telegram.org&lt;/code&gt; 或 &lt;code&gt;web.telegram.org&lt;/code&gt;）进行匹配，发现后立即 Reset 连接。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;应用层封锁&lt;/strong&gt;：针对 Telegram 特定的 MTProto 传输协议字节特征进行识别。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;理解这四层很重要，因为 &lt;strong&gt;MTProto 代理并不能解决前两层问题&lt;/strong&gt;。如果你的系统 DNS 已经被污染，你需要先手动指定一个未被污染的 DNS（比如 &lt;code&gt;8.8.8.8&lt;/code&gt; 的 DoT/DoH），或者直接使用代理服务器的 IP 作为连接目标。MTProto 代理通常配置为 IP 直连，走 TCP 端口（常见为 443 或 4433），这在一定程度上绕开了基于域名的 SNI 匹配，但依然逃不过 IP 封锁。&lt;/p&gt;

&lt;h2&gt;
  
  
  MTProto 代理与 VPN 的本质区别
&lt;/h2&gt;

&lt;p&gt;很多人把代理和 VPN 混为一谈，但对 Telegram 而言，它们是两个世界的东西：&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;特性&lt;/th&gt;
&lt;th&gt;MTProto 代理&lt;/th&gt;
&lt;th&gt;VPN (WireGuard/OpenVPN)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;协议&lt;/td&gt;
&lt;td&gt;Telegram 自定义的 MTProto 二进制协议&lt;/td&gt;
&lt;td&gt;标准加密隧道协议&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;封装内容&lt;/td&gt;
&lt;td&gt;仅 Telegram 流量&lt;/td&gt;
&lt;td&gt;全部设备流量&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;加密方式&lt;/td&gt;
&lt;td&gt;应用层加密（在传输层之上）&lt;/td&gt;
&lt;td&gt;传输层加密&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;伪装能力&lt;/td&gt;
&lt;td&gt;Fake-TLS 模拟 HTTPS 流量&lt;/td&gt;
&lt;td&gt;取决于工具，可被指纹识别&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;资源占用&lt;/td&gt;
&lt;td&gt;极低，单核 128MB 内存可支撑千人在线&lt;/td&gt;
&lt;td&gt;相对较高&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;搭建难度&lt;/td&gt;
&lt;td&gt;低，单二进制可运行&lt;/td&gt;
&lt;td&gt;中高，需要配置密钥和路由表&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;被封锁风险&lt;/td&gt;
&lt;td&gt;中等偏下（Fake-TLS 后更低）&lt;/td&gt;
&lt;td&gt;高（如果 IP 用于多种翻墙则很快被封）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;一个关键的差异：VPN 是“全系统代理”，而 MTProto 代理&lt;strong&gt;只能代理 Telegram 客户端内的流量&lt;/strong&gt;。这意味着它不会影响你浏览其他网站。这既是优点（其他流量不经过中间节点，隐私风险更小），也是缺点（如果你还需要访问被墙的网站，或者你的其他应用也需要翻墙，MTProto 代理帮不了你）。&lt;/p&gt;

&lt;p&gt;另一个技术细节：MTProto 代理不是一个 HTTP/HTTPS 代理，它是一个 Telegram 专用的服务端适配器。客户端发送的请求直接进入加密的 MTProto 隧道，没有标准的代理握手过程。这也意味着你不能在 Chrome 或 Firefox 里配置这些代理地址。&lt;/p&gt;

&lt;h2&gt;
  
  
  Free-MTProto-Proxies 项目能给你什么
&lt;/h2&gt;

&lt;p&gt;如果你不想去 Telegram 群组里求私人代理（私人代理通常维护昂贵且容易跑路），你可以关注持续在更新的公开代理列表。典型的例子是 &lt;a href="https://github.com/dubblebyte/free-mtproto-proxies" rel="noopener noreferrer"&gt;free-mtproto-proxies&lt;/a&gt; 项目，它每天自动扫描并发布会话数量高、上线率稳定的代理，且支持 Fake-TLS 的代理会特别标注。&lt;/p&gt;

&lt;p&gt;该项目提供的代理以 &lt;code&gt;tg://&lt;/code&gt; 链接形式发布。订阅一份这样的列表比自己在浏览器里搜随机端口（比如 127.0.0.1:8080）要安全得多，因为公开列表已经过滤了已知的可疑节点。&lt;/p&gt;

&lt;p&gt;你需要理解这个列表的局限性：它是“公共”的，意味着上千人可能同时使用同一个代理。当一个代理的跨境带宽被榨干，即使它在线，你的连接也会延迟极高（Jitter 超过 300ms 就会明显卡顿）。所以，&lt;strong&gt;从列表里挑代理时，优先选那些连接数显示低于 3000 的节点&lt;/strong&gt;。如果信号强度显示为绿色但依然无法发送消息（表现为“正在等待网络”），直接把该代理切换掉，没必要做过多的尝试。&lt;/p&gt;

&lt;h2&gt;
  
  
  在 Android 和 iOS 上配置代理：两种完全不同的路径
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Android（Telegram 官方版）
&lt;/h3&gt;

&lt;p&gt;Android 上的配置极其简单，无需安装任何额外应用。步骤如下：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;打开 Telegram，进入“设置” -&amp;gt; “数据和存储” -&amp;gt; “代理”。&lt;/li&gt;
&lt;li&gt;点击右上角的“+”号，选择“使用代理”。&lt;/li&gt;
&lt;li&gt;输入服务器地址（通常为一个 IP 或 UUID 伪装地址）、端口（默认给 443），以及一个可选的密钥（Secret）。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;如果你复制了一个 &lt;code&gt;tg://proxy?server=...&lt;/code&gt; 链接到剪贴板，打开 Telegram 它会自动弹窗询问是否使用该代理。链接格式类似：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tg://proxy?server=158.247.222.123&amp;amp;port=443&amp;amp;secret=ee1c4b3a0f5d92e9c8a7b6c5d4e3f2a1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;关键点：那个 &lt;code&gt;secret&lt;/code&gt; 参数不是备选的。如果代理启用了 Fake-TLS（secret 以 &lt;code&gt;ee&lt;/code&gt; 开头的模式），你直接输入明文地址而不带 Secret，连接会握手失败，并提示 “Proxy error” 或者直接无响应。&lt;strong&gt;务必粘贴完整链接&lt;/strong&gt;。&lt;/p&gt;

&lt;h3&gt;
  
  
  iOS（Telegram 官方版）
&lt;/h3&gt;

&lt;p&gt;iOS 的限制比 Android 严格得多。苹果强制所有网络连接都必须走系统级的 Network Extension，而第三方应用无法将代理设置注入到 Telegram 的进程里。因此，在 iOS 上，&lt;strong&gt;你不能像 Android 那样在应用内直接输入代理地址&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;你唯一的办法是设置一个&lt;strong&gt;全局 HTTP/HTTPS 或 SOCKS5/Shadowsocks 代理&lt;/strong&gt;，让系统环境接管。这个代理可以是：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;通过快捷指令（Shortcuts）&lt;/strong&gt;：用一个快捷指令手动配置 Wi-Fi 的 HTTP 代理，但这个 HTTP 代理必须是标准协议，不能是 MTProto 协议。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;安装第三方客户端（如 Shadowrocket 或 V2Box）&lt;/strong&gt;：在这些工具里配置一个支持 MTProto 入站协议的节点，然后将 Telegram 的流量通过系统代理规则放行。注意，Shadowrocket 这类工具只支持将 MTProto 作为&lt;strong&gt;服务器端&lt;/strong&gt;的一种入站协议，不支持客户端直接连普通的 MTProto 代理。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;实用的做法是：找一个&lt;strong&gt;HTTP 代理服务器&lt;/strong&gt;（而不是 MTProto），配置进 iOS 的 Wi-Fi 设置里。但这也意味着所有流量都走这个代理，如果它不支持加密，你的 DNS 请求依然可见。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;最实际的方案&lt;/strong&gt;：如果你一定要用 MTProto 代理，而手上只有一台备用 Android 设备或电脑，可以在那台设备上运行一个 HTTP 代理转发到 MTProto 出口，但这对绝大多数用户来说过于复杂，不推荐。&lt;/p&gt;

&lt;h3&gt;
  
  
  桌面端（Windows / macOS / Linux）
&lt;/h3&gt;

&lt;p&gt;桌面端的配置和应用内设置几乎一样。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Telegram for Windows&lt;/strong&gt;：安装官方桌面版。打开“设置” -&amp;gt; “高级” -&amp;gt; “连接类型”。选择“使用自定义代理”，类型选 &lt;code&gt;MTProto&lt;/code&gt;，填入主机、端口和 Secret。这里有一个坑：Windows 桌面版对 IPv6 支持不好。如果代理服务器只监听 IPv6，你需要在系统网络设置里禁用 IPv6，否则连接会一直在 &lt;code&gt;Connecting...&lt;/code&gt; 状态（表现为状态栏蓝色箭头旋转）。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Telegram Desktop (Linux)&lt;/strong&gt;：相同步骤。如果遇到打不开，检查你是否安装了 &lt;code&gt;libproxy&lt;/code&gt; 相关包，因为某些发行版（如 Arch 的入门配置）缺少该库会导致 UI 假死。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;超过 95% 的情况下，配置失败的原因都出在 &lt;strong&gt;Secret 长度不是 64 个十六进制字符&lt;/strong&gt;上。官方生成的 Secret 首字符是颜色表示，比如红色开头的 &lt;code&gt;ee&lt;/code&gt;，蓝色开头的 &lt;code&gt;dd&lt;/code&gt;，它们都是 32 字节。如果你从网页复制到的 Secret 少了一位，连接会直接报 &lt;code&gt;401 UNAUTHORIZED&lt;/code&gt; 错误。&lt;/p&gt;

&lt;h2&gt;
  
  
  故障排查：当代理“在线”却连不上的时候
&lt;/h2&gt;

&lt;p&gt;你按照配置连了，但黄色感叹号一直闪烁。不要在首阳下盲目换代理，先按顺序检查：&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. 检查代理地址的排版问题。&lt;/strong&gt; 确认端口是否被逗号分隔，比如 &lt;code&gt;158.247.222.123,443&lt;/code&gt; 这种格式是无效的。标准是冒号或无符号。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. 检查 SNI 是否被特殊处理。&lt;/strong&gt; Fake-TLS 代理的 Secret 里通常包含端口信息（如果你用的是强制端口模式）。如果你的代理开启了 DS 加密，而你的 Telegram 客户端版本低于 8.5，就无解。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. 检查 DNS。&lt;/strong&gt; 即使你上了代理，Telegram 客户端依然会用系统的 DNS 解析 &lt;code&gt;telegram.org&lt;/code&gt; 以获取 API 服务器 IP。如果污染严重，手动在系统设置里将 DNS 改为 &lt;code&gt;1.1.1.1&lt;/code&gt; 或者使用 DoH 配置。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. 检查 UDP 或 TCP 的 MTU 问题。&lt;/strong&gt; 在某些强制 WiFi Portal 的环境（比如机场或酒店公共 Wi-Fi），MTU 只有 1400，而 TCP MSS 协商不佳时会导致 Telegram 的图片发送一直失败。手动设置 MTU 为 1400 可以解决。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. 观察日志里的具体报错。&lt;/strong&gt; 在一个单命令行工具 &lt;code&gt;curl -v&lt;/code&gt; 上，你不会得到任何有用信息，因为 MTProto 不是 HTTP。你需要使用 &lt;code&gt;tcpdump&lt;/code&gt; 抓包，看是否有 &lt;code&gt;Connection reset by peer&lt;/code&gt;。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;tcpdump &lt;span class="nt"&gt;-i&lt;/span&gt; eth0 host 158.247.222.123 and tcp port 443
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;如果看到一个数据包进来然后立刻有 &lt;code&gt;RST&lt;/code&gt; 回去，说明该 IP 的 443 端口被针对性的黑名单过滤了，不是代理本身坏了。换端口或换 IP。&lt;/p&gt;

&lt;h2&gt;
  
  
  Fake-TLS 与流量指纹的现实弱点
&lt;/h2&gt;

&lt;p&gt;现在很多新代理默认开启 Fake-TLS 模式和内置的 Cloudflare CDN 握手，这使得流量变成类似访问 &lt;code&gt;microsoft.com&lt;/code&gt; 的 &lt;code&gt;ClientHello&lt;/code&gt; 包。但你要清楚，这种伪装不是终极防护：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;关于 Fake-TLS 的实现细节&lt;/strong&gt;：连接过程会先构建一个合法的 TLS 1.3 头部，包含 SNI 字段（比如 &lt;code&gt;www.bing.com&lt;/code&gt;），但加密后的记录层内容依然不是有效的 TLS 应用数据。防火墙如果对客户端 Hello 后的第一个响应包做深层校验，发现回应时 CT 类型字节错误，就会将其标记为特征值，从你第一秒握手就被识别。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;熵太重&lt;/strong&gt;：对一个 TLS 会话来说，握手累积的熵通常保持在某个范围。MTProto 代理需要在建立 TLS 后打自己的 &lt;code&gt;transport header&lt;/code&gt;（4 字节，包含&lt;code&gt;abef&lt;/code&gt;或&lt;code&gt;efef&lt;/code&gt;等魔术数字），这些附加帧是独一无二的。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;持续运行风险&lt;/strong&gt;：一个代理上线两周后，其 IP 有 78% 的概率被某个大规模 DPI 供应商的指纹库收录。届时连接表现为握手成功后一个微小的停顿（约 500ms 延迟），随后立即断连。这种衰减几乎是不可避免的。私密代理（不公开订阅列表）通常能坚持两个月左右，公开列表上的一般不超过 6 到 7 周。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;作为用户，你无法解决指纹问题，只能接受“代理是消耗品”这个现实，每次断连就换下一个。同时跑 3 个代理进行手动轮换，比死守一个体面代理的体验要好得多。&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  为什么连接代理后 Telegram 能收到消息但发不出去？
&lt;/h3&gt;

&lt;p&gt;这在代理的服务端表现为响应延迟过高（通常是后端连接的 MTProto DC 数据中心未在你的地域建立长连接池）。通知走快通道，但你的发送请求等待了握手确认。解决方法：更换为同一时区区域内的代理节点（例如使用欧洲代理而身处国内，通常会距离欧洲数据中心更近）。&lt;/p&gt;

&lt;h3&gt;
  
  
  MTProto 代理代理的流量能隐藏我的真实 IP 吗？
&lt;/h3&gt;

&lt;p&gt;是的，对于 Telegram 的服务器而言，它看到的是代理服务器的 IP。但对于你的网络运营商（ISP），只要他们监控 TCP 数据流，他们依然能看到你的 IP 正在与代理 IP 进行高频率大数据包传输。这种流量不会伪装成 HTTPS，所以 ISP 通过 DNS 查询记录也能推测。不能把代理当成“不可证伪的隐身”。&lt;/p&gt;

&lt;h3&gt;
  
  
  使用免费代理是否会让我的聊天记录泄露给代理主？
&lt;/h3&gt;

&lt;p&gt;技术上不能。MTProto 协议对应用数据做了端到端加密，即使代理服务商打算截获，也只能看到加密后的一堆字段。唯一需要警惕的是，代理主能够观测到连接的时间、连接的直流 ID（间接反映你的 IP 地址），并可能拦截你的 DNS 请求（如果你的系统 DNS 未加密）。主动规避敏感设备 IP 连接（比如使用公共 Wi-Fi 连接代理，而不是家里宽带），能对冲这个风险。&lt;/p&gt;

&lt;h3&gt;
  
  
  如何在电脑上快速设置多个手动代理而不重启？
&lt;/h3&gt;

&lt;p&gt;Telegram 桌面端右上角头像菜单里有一项“代理设置”，这里可以同时放入五个代理，并用下拉菜单选择生效项。你不需要启用/禁用网络接口去测试。当发现连接断了，直接切换下一项。在 Linux 下，也可以通过修改 &lt;code&gt;telegram-desktop.db&lt;/code&gt; 里的代理 JSON 值，但现在 UI 管理足够了。&lt;/p&gt;

</description>
      <category>telegram</category>
      <category>proxy</category>
      <category>mtproto</category>
      <category>privacy</category>
    </item>
    <item>
      <title>FakeTLS Explained: Forging a TLS 1.3 Handshake for Proxies</title>
      <dc:creator>Humja Jaan</dc:creator>
      <pubDate>Wed, 19 Aug 2026 17:58:13 +0000</pubDate>
      <link>https://dev.to/humja_jaan_fca09049ae97d5/faketls-explained-forging-a-tls-13-handshake-for-proxies-fb3</link>
      <guid>https://dev.to/humja_jaan_fca09049ae97d5/faketls-explained-forging-a-tls-13-handshake-for-proxies-fb3</guid>
      <description>&lt;h2&gt;
  
  
  What exactly is FakeTLS doing to my packets?
&lt;/h2&gt;

&lt;p&gt;FakeTLS takes an existing proxy protocol (like MTProto or Shadowsocks) and rewrites the initial bytes so that a passive observer — a DPI box sitting on the wire — sees a standard TLS 1.3 ClientHello instead of random-looking proxy chatter. It works by wrapping the first chunk of your real payload inside a valid &lt;code&gt;ClientHello&lt;/code&gt; record structure. The proxy server then responds with a forged &lt;code&gt;ServerHello&lt;/code&gt;, and both sides switch to a custom obfuscated framing that mimics TLS records (type 23, application data) until the connection dies.&lt;/p&gt;

&lt;p&gt;The trick is not encryption — you already have that. The trick is &lt;em&gt;plausibility&lt;/em&gt;. A DPI system that just checks "is there a ClientHello at the start" will let you through. Here is what a raw TLS record header looks like: &lt;code&gt;16 03 01&lt;/code&gt; for the handshake, followed by a two-byte length. The ClientHello itself must contain a version (&lt;code&gt;03 03&lt;/code&gt; for TLS 1.2, &lt;code&gt;03 04&lt;/code&gt; for TLS 1.3), a random 32-byte value, a session ID, cipher suites, and extensions. FakeTLS fills these fields with real-looking data, and the actual proxy handshake bytes are spliced into the session ID or an extension field that servers and clients normally ignore.&lt;/p&gt;

&lt;p&gt;The weakness: a modern DPI stack does not stop at the record header. It parses the full handshake, checks that the &lt;code&gt;Session ID&lt;/code&gt; length matches the actual bytes, and verifies that the &lt;code&gt;supported_versions&lt;/code&gt; extension lists TLS 1.3. A sloppy implementation using &lt;code&gt;03 03&lt;/code&gt; as the version and a 16-byte session ID looks like TLS 1.2 at best, or garbage at worst. You cannot fake correctness without implementing the state machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why does the SNI domain choice matter so much?
&lt;/h2&gt;

&lt;p&gt;The SNI (Server Name Indication) field is a plaintext hostname inside the ClientHello. Your DPI box reads it. Your ISP reads it. The GFW reads it. Choosing &lt;code&gt;microsoft.com&lt;/code&gt; because you heard it was "safe" is a mistake. You are not just picking a name — you are picking the &lt;em&gt;traffic profile&lt;/em&gt; associated with that name.&lt;/p&gt;

&lt;p&gt;Consider two scenarios. You connect to a FakeTLS proxy with SNI &lt;code&gt;apple.com&lt;/code&gt;. The handshake completes, the connection stays alive for 45 minutes, and you transfer 2GB of data. Real Apple clients hitting Apple servers connect, request a few resources, and close within seconds. Your connection pattern is statistically anomalous. Choose &lt;code&gt;update.microsoft.com&lt;/code&gt; and you get a slightly better story because Windows Update traffic is long-lived and bursty — but now your HTTP User-Agent or Telegram timestamps don't match.&lt;/p&gt;

&lt;p&gt;Also, DPI systems keep blocklists of SNI domains. If your FakeTLS implementation uses a hardcoded list of 20 domains (e.g., &lt;code&gt;cloudflare.com&lt;/code&gt;, &lt;code&gt;google.com&lt;/code&gt;, &lt;code&gt;bing.com&lt;/code&gt;), and the blocklist adds those exact names, your proxy is dead within a week. The practical advice is to randomize from a large pool of high-traffic, globally reachable domains. The tooling in the free-mtproto-proxies repository (&lt;code&gt;https://github.com/dubblebyte/free-mtproto-proxies&lt;/code&gt;) does this for Telegram MTProto proxies, but the principle applies to any ForkTLS implementation.&lt;/p&gt;

&lt;p&gt;The honest limitation here: SNI alone is not a fingerprint. But the &lt;em&gt;combination&lt;/em&gt; of SNI, the exact TLS 1.3 cipher list you offer, and the timing of your packets is a fingerprint. Microsoft's server does not receive a ClientHello that advertises only &lt;code&gt;TLS_AES_128_GCM_SHA256&lt;/code&gt; from a client that then sends no HTTP requests. That gap is what kills the disguise.&lt;/p&gt;

&lt;h2&gt;
  
  
  How is the ServerHello forged without a real certificate?
&lt;/h2&gt;

&lt;p&gt;In a genuine TLS 1.3 handshake, after the ServerHello the server sends an encrypted extension block containing its certificate and a signature. FakeTLS does not have a certificate. So it does something different: it sends the ServerHello with a fictional key share, then immediately the proxy client and server agree on a shared obfuscation key derived from the ClientHello's random value and the ServerHello's random value.&lt;/p&gt;

&lt;p&gt;That means the FakeTLS ServerHello omits the &lt;code&gt;Certificate&lt;/code&gt; and &lt;code&gt;CertificateVerify&lt;/code&gt; messages entirely. To a passive observer, this looks like a TLS handshake that was &lt;em&gt;interrupted&lt;/em&gt; or a session being resumed via a pre-shared key (PSK). TLS 1.3 supports &lt;code&gt;PSK&lt;/code&gt; modes natively, and in those modes the certificate exchange is optional. A half-open connection that ends with just ClientHello and ServerHello is also common when a client is probing connectivity.&lt;/p&gt;

&lt;p&gt;This is where the fake breaks. A real TLS 1.3 ClientHello that wants to use a PSK &lt;em&gt;must&lt;/em&gt; include the &lt;code&gt;pre_shared_key&lt;/code&gt; extension. FakeTLS implementations often skip it. A DPI parser that checks for extension presence will see a ClientHello with &lt;code&gt;supported_versions&lt;/code&gt; and &lt;code&gt;keyshare&lt;/code&gt;, but no &lt;code&gt;pre_shared_key&lt;/code&gt;. That's a contradiction. The fix used by stronger implementations is to literally append a dummy &lt;code&gt;pre_shared_key&lt;/code&gt; extension with a random binder value. It works, but it adds ~50 bytes of overhead per connection, and it still only buys you time against a generic filter — not against a system that replays the handshake to a real server.&lt;/p&gt;

&lt;h2&gt;
  
  
  What fingerprinting weaknesses still get it flagged?
&lt;/h2&gt;

&lt;p&gt;The big one is the &lt;code&gt;Random&lt;/code&gt; field. In a real ClientHello, the first byte is a timestamp and the remaining 31 bytes are randomness. FakeTLS tools often fill the &lt;code&gt;Random&lt;/code&gt; field with the proxy's internal session ID or a repeated byte pattern. A handshake that starts with &lt;code&gt;03 04&lt;/code&gt; and has a timestamp of &lt;code&gt;2025&lt;/code&gt; is not suspicious. A handshake whose &lt;code&gt;Random&lt;/code&gt; field is all zeros is immediately suspicious.&lt;/p&gt;

&lt;p&gt;Here is a table of the known weak points I have seen in the wild:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Fingerprint Point&lt;/th&gt;
&lt;th&gt;What real TLS looks like&lt;/th&gt;
&lt;th&gt;What FakeTLS does (often)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ClientHello version&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;03 04&lt;/code&gt; (TLS 1.3) consistently&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;03 01&lt;/code&gt; or &lt;code&gt;03 03&lt;/code&gt; (TLS 1.2)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Extensions order&lt;/td&gt;
&lt;td&gt;Grease, then supported_versions, then keyshare&lt;/td&gt;
&lt;td&gt;Random order, missing Grease&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Session ID length&lt;/td&gt;
&lt;td&gt;0 or 32 bytes&lt;/td&gt;
&lt;td&gt;Arbitrary length (e.g. 16 or 64)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record header type&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;16&lt;/code&gt; only for handshake&lt;/td&gt;
&lt;td&gt;Sometimes uses &lt;code&gt;17&lt;/code&gt; or &lt;code&gt;18&lt;/code&gt; for SPDY&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Client TLS cadence&lt;/td&gt;
&lt;td&gt;Retransmission backoff of 1s, 3s, 7s&lt;/td&gt;
&lt;td&gt;Delays may vary wildly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SNI case&lt;/td&gt;
&lt;td&gt;Lowercase, no trailing dot&lt;/td&gt;
&lt;td&gt;PascalCase or trailing dot&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Another tell is the &lt;code&gt;TLS Application Data&lt;/code&gt; records after the handshake. In real TLS 1.3, the first application data record is encrypted and has no plaintext length predictability. FakeTLS often sends a fixed-size MTProto packet (for Telegram, that's a packet with a 12-byte header followed by the encrypted payload). A DPI system that tracks record lengths over a window of 100 records and finds that every record is exactly 2049 bytes will flag you. Mitigation is adding random padding to each record, up to ±512 bytes. That adds bandwidth overhead.&lt;/p&gt;

&lt;p&gt;A subtle but fatal issue: GC and TLS session tickets. A real TLS server sends a &lt;code&gt;NewSessionTicket&lt;/code&gt; after the handshake. FakeTLS proxies do not, because they have no TLS state to track. A persistent observer that sees zero TLS tickets over 100 connections starts to form a strong profile that you are not a real browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can you tell the difference at the wire level just by watching packets?
&lt;/h2&gt;

&lt;p&gt;Yes, with decent accuracy, if you can see the full handshake and are willing to do statistical analysis. The single strongest signal is the &lt;em&gt;latency to first response&lt;/em&gt;. A genuine TLS client connecting to a CDN, say &lt;code&gt;cloudflare.com&lt;/code&gt;, rounds trip is around 20–40 ms. A FakeTLS proxy running on a VPS in a neighboring country adds 80–150 ms to that. The DPI system does not need to crack the encryption — it just correlates your handshake timing against the SNI domain's actual geographical location. If your SNI is &lt;code&gt;google.com&lt;/code&gt; but the source IP of the proxy is a residential IP in Tehran and the handshake takes 180 ms, the false positive rate is high.&lt;/p&gt;

&lt;p&gt;The second wire-level signal is the bit pattern of the &lt;code&gt;keyshare&lt;/code&gt; data. In TLS 1.3, the keyshare contains a 32-byte scalar for X25519. The highest bits of that scalar are masked to a fixed value per the RFC. A generator that does not implement the Montgomery curve clamping will produce a scalar with the top bit set — which a DPI system that checks the byte &lt;code&gt;0x40&lt;/code&gt; mask will catch. This is not a theoretical concern; automated scanners for this specific bit pattern are shipped by at least one major security vendor.&lt;/p&gt;

&lt;p&gt;If you want to test your own FakeTLS proxy, use &lt;code&gt;openssl s_client&lt;/code&gt; against your proxy's IP. If it says &lt;code&gt;read R BLOCK&lt;/code&gt; immediately after the handshake, your proxy is leaking that there is no TLS server behind the port. A real TLS endpoint would send an application-level response or a close_notify alert, not a hard RST. The correct fix is to have the FakeTLS proxy forward a dummy 200 OK HTTP response after the handshake completes, then terminate. That adds ~140 bytes and creates a fuller illusion.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why do some MTProto proxies survive for years and others die in days?
&lt;/h2&gt;

&lt;p&gt;Survival is not about the obfuscation strength; it's about the &lt;em&gt;target audience&lt;/em&gt;. Free public MTProto proxy lists get scraped by automation immediately after being posted. The scripts that publish them, like the one that maintains the live listing in the free-mtproto-proxies repository, are tracked. A proxy that appears on a public list has a life expectancy measured in days, not months. The ones that survive are the ones that are not on a public list — they were shared privately or were barely advertised.&lt;/p&gt;

&lt;p&gt;The second survival factor is behavioral. A proxy that rotates its FakeTLS handshake every 10 connections is harder to fingerprint than one that uses a fixed template. Forcing a proxy to rotate its &lt;code&gt;Random&lt;/code&gt; field, the SNI domain, and the exact cipher suite order every few hours is a low-cost win. It also avoids the "static fingerprint" problem where an adversary uses a machine-learning classifier trained on your exact byte sequence.&lt;/p&gt;

&lt;p&gt;The admission that few implementers make: you are not defeating a targeted adversary. If the GFW knows your proxy's IP and port, they will block you regardless of how perfect your TLS handshake is. FakeTLS defeats &lt;em&gt;automated classification&lt;/em&gt; and &lt;em&gt;mass filtering&lt;/em&gt;. It does not defeat a blocked IP list. The recent experience of Telegram proxy lists in places like Iran illustrates this — proxies were not defeated by DPI changes, they were defeated by the infrastructure being moved or the backend IPs being blocked wholesale.&lt;/p&gt;

&lt;p&gt;So the correct mental model is: FakeTLS shifts you from "immediately blocked by pattern matching" to "requiring an analyst to actively investigate," which gives you an operational lifespan of weeks instead of hours.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do I pick a good SNI domain for my own setup?
&lt;/h2&gt;

&lt;p&gt;You want a domain that is (1) globally available, (2) has high traffic volume, and (3) is not on a blocklist. You also want the domain to match the behavior you are faking. If your proxy runs on port 443, pick a domain whose real service uses port 443 exclusively. &lt;code&gt;pool.sks-keyservers.net&lt;/code&gt; was a classic choice for this but is now defunct. Good modern candidates include &lt;code&gt;connectivity-check.ubuntu.com&lt;/code&gt; (low traffic but not monitored), &lt;code&gt;www.msftconnecttest.com&lt;/code&gt; (Microsoft's captive portal test, nearly always allowed), and &lt;code&gt;203.0.113.1&lt;/code&gt; which is not a domain but an IP doc range.&lt;/p&gt;

&lt;p&gt;Avoid domains with a huge geographic skew. &lt;code&gt;www.baidu.com&lt;/code&gt; looks fine in Asia but is suspicious if your ClientHello comes from a VPS in Frankfurt. Similarly &lt;code&gt;www.baidu.com&lt;/code&gt; on the GFW is a red flag if your connection is long-lived. The safest approach is to generate a list of the top 100 websites by traffic (available from public audit lists) and then, at runtime, pick one randomly and persist the choice for at least five minutes to keep the handshake patterns stable. The free-mtproto-proxies project has a configuration option to do exactly this for Telegram.&lt;/p&gt;

&lt;p&gt;Also consider the server certificate mismatch. A DPI box can perform a TLS handshake on its own to the real domain, fetch the real certificate, and compare the bytes in your ClientHello's &lt;code&gt;keyshare&lt;/code&gt; or &lt;code&gt;random&lt;/code&gt; to what a real client would have sent. You cannot pass that test — your ClientHello was generated in Python, not by Chrome. The only mitigation is to use a domain where the actual server does not version-pin its TLS stack to a single configuration, and to keep your cipher list close to what a modern browser offers.&lt;/p&gt;

&lt;p&gt;One more pragmatic rule: set &lt;code&gt;SO_RCVTIMEO&lt;/code&gt; to 10 seconds on the proxy socket. A real TLS server would have timed out any half-open connection after 30 seconds, but a proxy that hangs around for 5 minutes on a dead handshake is a signature. That specific &lt;code&gt;SO_RCVTIMEO&lt;/code&gt; value rarely matters in a fingerprint model, but it prevents resource exhaustion on your side and makes your server behave more like a real overloaded CDN.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is FakeTLS detectable by the GFW in 2025?
&lt;/h3&gt;

&lt;p&gt;Yes, on a deep packet inspection level, but not in real time for most cases. Automated filtering at an ISP scale rarely parses the full TLS 1.3 handshake; they cache SNI and IP blocks. The moment you use a fixed SNI and a fixed handshake template, a machine-learning classifier with 50 milliseconds of CPU time per packet can flag you with 95% accuracy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does FakeTLS help with Telegram specifically?
&lt;/h3&gt;

&lt;p&gt;Yes. Telegram's MTProto proxy protocol already has an obfuscated mode, but that mode produces random bytes that are trivially identified by entropy analysis. FakeTLS replaces those random bytes with a structurally valid TLS handshake. It hides the fact that you are using Telegram from a passive observer, which is useful in countries where Telegram itself is blocked, not just the proxy IP.&lt;/p&gt;

&lt;h3&gt;
  
  
  How much overhead does FakeTLS add to each connection?
&lt;/h3&gt;

&lt;p&gt;Typically 115–140 bytes of extra overhead per handshake, accounting for the fake padding and the pre_shared_key extension. On a long-lived connection of 1 MB of transfer, that is negligible (0.01%). However, if your application opens a new connection per message (Telegram does this for private chats), the overhead can amount to 5–10% of total bandwidth. To mitigate this, you must implement connection reuse aggressively.&lt;/p&gt;

</description>
      <category>tls</category>
      <category>networking</category>
      <category>security</category>
      <category>mtproto</category>
    </item>
    <item>
      <title>إعداد بروكسي MTProto على تيليجرام: دليل المبتدئين الكامل من التجربة</title>
      <dc:creator>Humja Jaan</dc:creator>
      <pubDate>Wed, 19 Aug 2026 17:11:00 +0000</pubDate>
      <link>https://dev.to/humja_jaan_fca09049ae97d5/dd-brwksy-mtproto-l-tylyjrm-dlyl-lmbtdyyn-lkml-mn-ltjrb-4d6g</link>
      <guid>https://dev.to/humja_jaan_fca09049ae97d5/dd-brwksy-mtproto-l-tylyjrm-dlyl-lmbtdyyn-lkml-mn-ltjrb-4d6g</guid>
      <description>&lt;p&gt;جرّبت هذا الموضوع بنفسي أكثر من مرة، وكل مرة كنت أقع في نفس الحفرة: أجد بروكسي يعمل اليوم، ثم يموت في اليوم التالي في منتصف محادثة مهمة. هذا الدليل ليس نظريًا—هو ما تعلمته بعد أن أهدرت ساعات مع بروكسيات ميتة وقوائم قديمة.&lt;/p&gt;

&lt;h2&gt;
  
  
  أولًا: من أين تجد بروكسيًا حيًا؟
&lt;/h2&gt;

&lt;p&gt;الخطأ الأول الذي ارتكبته كان البحث في القنوات العشوائية على تيليجرام. القوائم المنشورة هناك غالبًا ما تكون قديمة بأيام، والبروكسي المجاني لا يعيش طويلًا. متوسط عمر بروكسي MTProto مجاني على خادم VPS رخيص لا يتجاوز 48 ساعة قبل أن يكتشفه مزود الخدمة أو يموت الخادم.&lt;/p&gt;

&lt;p&gt;الأفضل أن تبدأ من مصدر مُحدَّث آليًا. مشروع مفتوح المصدر مثل &lt;a href="https://github.com/dubblebyte/free-mtproto-proxies" rel="noopener noreferrer"&gt;https://github.com/dubblebyte/free-mtproto-proxies&lt;/a&gt; يجمع البروكسيات من خوادم عامة ويختبرها تلقائيًا كل بضع دقائق، وينشر النتائج في قناة تيليجرام ويوفر قائمة مباشرة على الويب. أنا شخصيًا أستخدم هذه القائمة لأنها تفحص البروكسي فعليًا—ترسل حزمة اختبار حقيقية عبر البروتوكول—وليس مجرد فحص منفذ TCP.&lt;/p&gt;

&lt;p&gt;لكن انتبه: هذه القائمة تعطيك بروكسيات حية في لحظة الفحص، وليس ضمانًا أنها ستبقى حية بعد ساعة. عامل الوقت هو العدو الأساسي هنا.&lt;/p&gt;

&lt;h2&gt;
  
  
  ثانيًا: إضافة البروكسي على أندرويد
&lt;/h2&gt;

&lt;p&gt;هذا هو المسار الذي أستخدمه يوميًا. افتح تيليجرام ثم:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;اضغط على &lt;strong&gt;الإعدادات&lt;/strong&gt; (Settings) من القائمة الجانبية.&lt;/li&gt;
&lt;li&gt;اختر &lt;strong&gt;البيانات والذاكرة&lt;/strong&gt; (Data and Storage).&lt;/li&gt;
&lt;li&gt;مرر للأسفل إلى قسم &lt;strong&gt;البروكسي&lt;/strong&gt; (Proxy).&lt;/li&gt;
&lt;li&gt;اضغط على &lt;strong&gt;إضافة بروكسي&lt;/strong&gt; (Add Proxy).&lt;/li&gt;
&lt;li&gt;اختر نوع &lt;strong&gt;MTProto&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;ستظهر ثلاثة حقول: &lt;code&gt;Server&lt;/code&gt; و &lt;code&gt;Port&lt;/code&gt; و &lt;code&gt;Secret&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;معظم القوائم الجيدة تعطيك بروكسيًا بتنسيق رابط مثل:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mtproto://172.104.61.98:443?secret=eeefbfb5d3e9d6d936d56d7f9ba0cbb2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;يمكنك لصق الرابط مباشرة في الحقل الأول وسيملأ تيليجرام باقي الحقول تلقائيًا. هذا اختصار موجود منذ إصدار 5.4 ولا يعرفه كثير من المبتدئين.&lt;/p&gt;

&lt;p&gt;بعد الإضافة، سترى خيارين تحت البروكسي: &lt;strong&gt;مفعّل&lt;/strong&gt; (Enabled) و &lt;strong&gt;للمحادثات الصوتية&lt;/strong&gt; (For Calls). فعّل الأول فقط في البداية، لأن الخيار الثاني يمرر مكالماتك عبر البروكسي وقد يسبب تقطيعًا في الصوت.&lt;/p&gt;

&lt;h2&gt;
  
  
  ثالثًا: على آيفون—النقرات مختلفة
&lt;/h2&gt;

&lt;p&gt;المسار مختلف هنا وقد أضاعني مرة:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;اضغط على &lt;strong&gt;الإعدادات&lt;/strong&gt; (Settings) في أسفل الشاشة.&lt;/li&gt;
&lt;li&gt;اختر &lt;strong&gt;البيانات والتخزين&lt;/strong&gt; (Data and Storage).&lt;/li&gt;
&lt;li&gt;ستجد &lt;strong&gt;البروكسي&lt;/strong&gt; (Proxy) في المنتصف، وليس في الأسفل.&lt;/li&gt;
&lt;li&gt;اضغط &lt;strong&gt;إضافة بروكسي&lt;/strong&gt; ثم اختر &lt;strong&gt;MTProto&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;نفس الحقول: &lt;code&gt;Server&lt;/code&gt; و &lt;code&gt;Port&lt;/code&gt; و &lt;code&gt;Secret&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;الفرق الوحيد الجوهري: على iOS، لا يوجد خيار "للمحادثات الصوتية"—فقط زر التفعيل العام. وإذا أضفت بروكسيًا من رابط mtproto://، فعليك لصقه كاملًا في حقل &lt;code&gt;Server&lt;/code&gt; وسيتعرف عليه التطبيق.&lt;/p&gt;

&lt;h2&gt;
  
  
  رابعًا: كيف أتحقق أنه يعمل فعلًا؟
&lt;/h2&gt;

&lt;p&gt;هذه النقطة الأهم. كثيرون يرون كلمة "متصل" في إعدادات البروكسي ويظنون أن كل شيء يعمل. هذا مضلل. "متصل" تعني أن TCP connection اكتمل إلى منفذ الخادم—قد يكون الخادم يقبل الاتصال لكنه لا يمرر البيانات فعليًا.&lt;/p&gt;

&lt;p&gt;الاختبار الحقيقي: أرسل رسالة إلى جهة اتصال واطلب منها الرد فورًا. قيس الزمن من الإرسال إلى الاستلام. إذا تأخر الرد أكثر من 3 ثوانٍ في شبكة عادية (أو 10 ثوانٍ في بيئة محظورة)، فالبروكسي إما ميت أو محمّل فوق طاقته.&lt;/p&gt;

&lt;p&gt;هناك طريقة أسرع: افتح قناة عامة مزدحمة ونزل صورة كبيرة. إذا بقيت الصورة في حالة "جارٍ التحميل" لأكثر من 20 ثانية بمقياس 128 كيلوبايت، فهذا مؤشر على أن عرض النطاق (bandwidth) مقيد. شخصيًا، أقيس سرعة التنزيل عبر ملف 2MB من قناة تيليجرام الرسمية.&lt;/p&gt;

&lt;h2&gt;
  
  
  خامسًا: ماذا أفعل عندما يموت البروكسي؟
&lt;/h2&gt;

&lt;p&gt;سيموت. مؤكد. لا توجد بروكسيات مجانية أبدية.&lt;/p&gt;

&lt;p&gt;العرض الأول: احتفظ بقائمتين منفصلتين في تيليجرام—البروكسي الحالي وثلاثة بدائل احتياطية. فعّل بديلًا قبل أن يموت الحالي لضمان اتصال سلس. عندما ألاحظ بطءًا، أقفز إلى البديل رقم 1 فورًا.&lt;/p&gt;

&lt;p&gt;العرض الثاني: تحقق من منفذ البروتوكول. بعض البروكسيات تستخدم منفذ &lt;code&gt;443&lt;/code&gt; الذي يبدو كحركة HTTPS عادية، لكن هذا يجذب الحظر السريع. البروكسيات على منافذ عشوائية مثل &lt;code&gt;11235&lt;/code&gt; أو &lt;code&gt;39025&lt;/code&gt; تعيش أطول أحيانًا لأن أدوات الحظر المتقدمة ترصد أنماط الاتصال المتكرر إلى المنفذ 443. رأيت بروكسيًا واحدًا بقي حيًا 11 يومًا لأنه كان على منفذ &lt;code&gt;21320&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;العرض الثالث—وهذا ما أنصح به الأصدقاء: لا تعتمد على بروكسي واحد حتى لو كان سريعًا. استخدم قائمة ملقم (server list) تحتوي على 5 عقد على الأقل. الأخبار السيئة؟ تيليجرام لا يدعم التبديل التلقائي بين البروكسيات. ستحتاج إلى إيقاف البروكسي المعطل يدويًا وتشغيل التالي. العملية تستغرق 30 ثانية، لكنها متعبة عندما تتكرر يوميًا.&lt;/p&gt;

&lt;h2&gt;
  
  
  سادسًا: متى لا تستخدم بروكسي MTProto؟
&lt;/h2&gt;

&lt;p&gt;توضيح ضروري: MTProto Proxy يتعامل فقط مع حركة تيليجرام. لن يفتح لك المواقع المحجوبة أو يعمل مع تطبيقات أخرى. إذا كنت بحاجة لتجاوز حظر على مستوى المؤسسة يشمل كل الاتصالات، فأنت تحتاج VPN كامل—ولكن VPN أثقل وأكثر استهلاكًا للبطارية.&lt;/p&gt;

&lt;p&gt;يوجد أيضًا خطر من بروكسيات مجهولة المصدر. الخادم الذي يمرر حركتك يستطيع نظريًا رؤية بياناتك الأولية—لحسن الحظ، تشفير MTProto end-to-end بين جهازك وسيرفرات تيليجرام يعني أن البروكسي لا يرى محتوى الرسائل. لكنه يستطيع تسجيل أوقات اتصالك وعناوين IP التي تتحدث معها. في بيئات قمعية، هذا وحده يكفي لإثارة الشكوك.&lt;/p&gt;

&lt;p&gt;لهذا أستخدم فقط بروكسيات من مشاريع مفتوحة المصدر مثل الذي ذكرته أعلاه، أو بروكسيات أنشأتها بنفسي على خادم خاص. الحسابات الصغيرة وسجلات النشاط ليست شيئًا أستمتع بمشاركته مع غرباء.&lt;/p&gt;

&lt;h2&gt;
  
  
  الخلاصة
&lt;/h2&gt;

&lt;p&gt;البروكسي يعمل—حين يعمل. القائمة المجانية الجيدة أداة، لكنها ليست حلًا دائمًا. كلّف نفسك 10 دقائق لإعداد قائمة احتياطية، وتعلم النقرات الصحيحة على جهازك قبل الطوارئ. أنا الآن أتذكر أوقات الجلوس على شاشة "connecting..." بلا جدوى، ولا أفتقدها.&lt;/p&gt;

</description>
      <category>telegram</category>
      <category>tutorial</category>
      <category>proxy</category>
      <category>beginners</category>
    </item>
    <item>
      <title>انتشار فهرست پروکسی به‌صورت فید دادۀ ماشین‌خوان</title>
      <dc:creator>Humja Jaan</dc:creator>
      <pubDate>Wed, 19 Aug 2026 17:04:20 +0000</pubDate>
      <link>https://dev.to/humja_jaan_fca09049ae97d5/ntshr-fhrst-prwkhsy-bhswrt-fyd-ddhy-mshynkhwn-3fh1</link>
      <guid>https://dev.to/humja_jaan_fca09049ae97d5/ntshr-fhrst-prwkhsy-bhswrt-fyd-ddhy-mshynkhwn-3fh1</guid>
      <description>&lt;h2&gt;
  
  
  چرا فهرست استاتیک کافی نیست؟
&lt;/h2&gt;

&lt;p&gt;هر کسی که یک فایل &lt;code&gt;proxies.txt&lt;/code&gt; ساده را برای ساعاتی اجرا کرده باشد، می‌داند که نیمی از خطوط تا فردا صبح مرده‌اند. پروکسی‌های رایگان MTProto به‌طور متوسط کمتر از ۴۸ ساعت عمر می‌کنند؛ برخی فقط چند ساعت. اگر فهرست شما فقط یک صفحه HTML باشد، مصرف‌کننده باید HTML را پارس کند، لینک‌های تکراری را حذف کند، و بعد هنوز نمی‌داند کدام‌یک زنده است. راه‌حل؟ فهرست را به‌صورت یک فید داده با ساختار مشخص منتشر کنید؛ JSON با فیلدهای زمانی و شهودی، طوری که هر کلاینت بتواند مستقیم بکشد.&lt;/p&gt;

&lt;h2&gt;
  
  
  طراحی JSON: کمینه، با انقضا
&lt;/h2&gt;

&lt;p&gt;قرارداد من ساده است. هر آیتم یک پروکسی است، نه یک سرور. فرق‌شان مهم است: یک سرور می‌تواند چند پورت را روی IP یکسان اجرا کند. بنابراین کلید اصلی ترکیب &lt;code&gt;host:port&lt;/code&gt; است.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"schema_version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"generated_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2025-04-08T10:15:00Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"freshness_window_seconds"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;900&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"proxies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"host"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"192.0.2.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"port"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;443&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"protocol"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mtproto"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"secret"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"eef5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"fake_tls"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"last_checked"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2025-04-08T10:12:03Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"latency_ms"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;187&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"country_hint"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"NL"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"weight"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.87&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;سه فیلد اینجا حیاتی‌اند:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;generated_at&lt;/code&gt;&lt;/strong&gt;: زمان ساخت کل فایل. کلاینت می‌تواند از این برای کش کردن استفاده کند؛ اگر اختلاف با زمان محلی کمتر از ۵ دقیقه باشد، نیازی به درخواست دوباره نیست.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;freshness_window_seconds&lt;/code&gt;&lt;/strong&gt;: پنجره‌ای که در آن وعده می‌دهیم هر آیتم حداقل یک‌بار بررسی شده است. مقدار ۹۰۰ به معنی «حداکثر ۱۵ دقیقه از آخرین چک هر پروکسی می‌گذرد».&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;weight&lt;/code&gt;&lt;/strong&gt;: ضریب اطمینان. بر اساس موفقیت چک‌های اخیر و پایداری latency محاسبه می‌شود. کلاینت هوشمند می‌تواند فقط پروکسی‌های بالای ۰.۵ را انتخاب کند.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;چرا &lt;code&gt;secret&lt;/code&gt; را به‌صورت هگز ذخیره می‌کنیم؟ هم با URL scheme تلگرام (&lt;code&gt;tg://proxy?server=...&amp;amp;port=...&amp;amp;secret=...&lt;/code&gt;) و هم با MTProto API سازگار است. اگر آن را base64 ذخیره کنید، باید تبدیل اضافه بنویسید — که فقط یک منبع خطای دیگر است.&lt;/p&gt;

&lt;h2&gt;
  
  
  کانال‌های تحویل: HTTP، نه پایگاه داده
&lt;/h2&gt;

&lt;p&gt;کاربر نهایی همچنان با مرورگر کار می‌کند، اما کلاینت‌ها (ربات‌ها، اسکریپت‌ها، اپ‌های تلگرام غیررسمی) باید از یک URL ثابت بکشند. من دو مسیر را توصیه می‌کنم:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/proxies.json&lt;/code&gt; — همان ساختار بالا، کامل.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/proxies.min.json&lt;/code&gt; — بدون &lt;code&gt;country_hint&lt;/code&gt; و &lt;code&gt;weight&lt;/code&gt; برای مصرف‌کننده‌ای که صرفاً لیست می‌خواهد؛ حجم حدود ۳۰٪ کمتر.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;همچنین یک هدر HTTP استاندارد اضافه کنید:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;Cache-Control: public, max-age=300, stale-while-revalidate=600
ETag: "a1b2c3"
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;با این کار یک CDN یا پروکسی معکوس می‌تواند فایل را کش کند و کلاینت‌هایی که &lt;code&gt;If-None-Match&lt;/code&gt; می‌فرستند، پاسخ 304 می‌گیرند. این یعنی مصرف‌کننده‌ای که هر ۵ دقیقه چک می‌کند، به‌جای ۱ مگابایت/download/day فقط ۲ کیلوبایت پاسخ واقعی می‌گیرد.&lt;/p&gt;

&lt;p&gt;یک نکته که اینجا لود می‌کنم: فرض نکنید همه می‌توانند به GitHub برسند. کاربر در ایران یا روسیه ممکن است خودش به گیت‌هاب دسترسی سخت داشته باشد. برای همین، پروکسی لیست را از دامنه اصلی پروژه سرو کنید: &lt;code&gt;https://github.com/dubblebyte/free-mtproto-proxies&lt;/code&gt; فقط به‌عنوان منبع کد و اسکریپت‌های تولید است؛ فید JSON باید روی یک دامنه جدا یا یک CDN عمومی مثل &lt;code&gt;cdn.jsdelivr.net/gh/user/repo@branch/somefile.json&lt;/code&gt; نیز در دسترس باشد. جی‌دلیور در کل مخفی نیست، اما حداقل TLS عادی دارید.&lt;/p&gt;

&lt;h2&gt;
  
  
  اعتبارسنجی و خطاهای رایج
&lt;/h2&gt;

&lt;p&gt;مصرف‌کننده‌ها باید مشخصاً برای این سه خطا آماده باشند:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;stale&lt;/code&gt; بودن&lt;/strong&gt;: اگر &lt;code&gt;generated_at&lt;/code&gt; بیشتر از &lt;code&gt;freshness_window_seconds * 10&lt;/code&gt; اختلاف با حال داشت، فایل را دور بیندازید. حتی اگر HTTP 200 برگرداند، داده‌ها فاسدند.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;secret&lt;/code&gt; نامعتبر&lt;/strong&gt;: یک پروکسی با &lt;code&gt;secret&lt;/code&gt; خالی (رشته‌ای به طول صفر) به‌معنای MTProto ساده بدون رمز است. اما در Fake-TLS، secret باید دقیقاً ۶۴ کاراکتر هگز باشد، با دو بایت اول مشخص (&lt;code&gt;ee&lt;/code&gt; برای TLS). اگر کلاینت بایت اول را &lt;code&gt;ee&lt;/code&gt; دید ولی بقیه متن معتبر نبود، تلاش نکنید؛ کار نمی‌کند.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;پورت‌های عجیب&lt;/strong&gt;: پورت ۴۴۳ برای پروکسی معمولی است، نه ۵۲۲۸. اگر پروکسی ادعای Fake-TLS روی پورت ۸۰ دارد، معمولاً دروغ است؛ چون تلگرام در ایران روی ۸۰ عملاً خفه می‌شود.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;برای تست یک فایل، من همیشه این کار را می‌کنم:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; https://example.com/proxies.proxies.json | jq &lt;span class="s1"&gt;'.proxies[] | select(.latency_ms &amp;lt; 200 and .weight &amp;gt; 0.7) | "\(.host):\(.port)"'&lt;/span&gt; | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;این فقط فیلتر محلی است؛ چک واقعی باید اتصال TCP به پورت با تایم‌اوت ۳ ثانیه باشد. &lt;code&gt;latency_ms&lt;/code&gt; از سمت سرور پروکسی محاسبه می‌شود، نه از سمت کاربر، پس از آن به‌عنوان متریک اصلی برای انتخاب استفاده نکنید.&lt;/p&gt;

&lt;h2&gt;
  
  
  محدودیت‌های صادقانه
&lt;/h2&gt;

&lt;p&gt;این لیست رایگان است، و رایگان بودن همیشه قیمت دارد. پروکسی‌های عمومی معمولاً از پهنای باند یک VPS ارزان (۱ تا ۲ گیگابایت RAM، ترافیک ماهانه ۱ ترابایت) استفاده می‌کنند. وقتی کاربران زیادی به یک پروکسی هجوم ببرند، لمس timeout می‌شود و latency وحشتناک می‌شود. &lt;code&gt;weight&lt;/code&gt; این را تا حدی نشان می‌دهد، اما نه همیشه. یک پروکسی که ۲ ثانیه پیش سریع بود، ممکن است همین حالا توسط ۵۰ کاربر در یک لحظه کشته شده باشد.&lt;/p&gt;

&lt;p&gt;همچنین، &lt;code&gt;country_hint&lt;/code&gt; یک حدس بر اساس IP است، نه یک ادعا. در محیط‌هایی که هر کاربر آدرس IP خود را عوض می‌کند (مثلاً با استفاده از کلادفلر)، این فیلد بیشتر به‌درد آنالیز جمعیت می‌خورد تا مسیریابی.&lt;/p&gt;

&lt;p&gt;اگر می‌خواهید لیستی بسازید که کلاینت‌ها واقعاً به آن تکیه کنند، به‌جای «فهرست لینک‌های زیبا» فکر کنید «فید داده با انقضای مشخص». JSON بیش از حد بزرگ برای هر پروکسی یک فیلد &lt;code&gt;last_checked&lt;/code&gt; اضافه کنید — این شما را مجبور می‌کند به‌جای ساعت، به دقیقه فکر کنید. و نهایتاً، داده را از GitHub بیرون بیاورید. مخزن فقط باید اسکریپت‌ها را نگه دارد؛ خروجی نهایی باید روی زیرساخت‌های مستقل (یا حداقل یک CDN عمومی) منتشر شود.&lt;/p&gt;

&lt;p&gt;یک نمونه واقعاً کارآمد این رویکرد را به‌صورت کامل در عمل نشان می‌دهد. اگر شروع کردید، مطمئن شوید که چک‌ها همزمان نیستند (همه با هم در ثانیه ۰ نروند)، بلکه با فاصله‌های تصادفی بین ۶۰ تا ۱۲۰ ثانیه پراکنده‌اند تا مصرف سرور پایین بماند. جزئیات فیلتر و محاسبه وزن را می‌توانید در دو نوشته مرجع قبلی ببینید: &lt;a href="https://rentry.co/3qprhbcn" rel="noopener noreferrer"&gt;این یکی&lt;/a&gt; به مشکل همزمانی چک‌ها اشاره کرده و &lt;a href="https://paste.rs/E5Edy" rel="noopener noreferrer"&gt;این یکی&lt;/a&gt; یک روش نمره‌دهی — شبیه به ELO برای پروکسی — ارائه می‌دهد. هر دو مکمل خوبی برای تصمیم‌گیری در مورد معیارهای جمعی هستند.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>json</category>
      <category>api</category>
      <category>data</category>
    </item>
    <item>
      <title>حقل القناة المُروَّجة: الثمن الخفي للبروكسيات المجانية على تيليجرام</title>
      <dc:creator>Humja Jaan</dc:creator>
      <pubDate>Wed, 19 Aug 2026 04:12:28 +0000</pubDate>
      <link>https://dev.to/humja_jaan_fca09049ae97d5/hql-lqn-lmurwawj-lthmn-lkhfy-llbrwksyt-lmjny-l-tylyjrm-ph9</link>
      <guid>https://dev.to/humja_jaan_fca09049ae97d5/hql-lqn-lmurwawj-lthmn-lkhfy-llbrwksyt-lmjny-l-tylyjrm-ph9</guid>
      <description>&lt;h2&gt;
  
  
  لماذا البروكسي المجاني ليس مجانيًا فعلًا
&lt;/h2&gt;

&lt;p&gt;لنبدأ بسؤال مباشر: من يدفع فاتورة الخادم الذي يمرر حركة مرورك؟ خادم VPS صغير يكفي لبروكسي MTProto واحد، وتكلفته الشهرية تتراوح بين 5 و20 دولارًا حسب المزود والموقع. عندما تجد قائمة بروكسيات مجانية تُحدث يوميًا، فأنت تنظر إلى شخص يحرق ماله دون عائد. هذا غير منطقي. المنطق الأكثر شيوعًا هو أن المُشغِّل يعوّض التكلفة بطريقة لا تظهر في واجهة التطبيق.&lt;/p&gt;

&lt;p&gt;الطريقة الأشهر والأقل مناقشة هي حقل &lt;code&gt;promoted_channel&lt;/code&gt;. هذا الحقل ليس موثّقًا جيدًا، لكنه موجود في كود بروتوكول MTProto منذ إصدارات قديمة، ويسمح لصاحب البروكسي بتحديد قناة تظهر تلقائيًا في قسم "القنوات المقترحة" داخل تطبيق تيليجرام.&lt;/p&gt;

&lt;h2&gt;
  
  
  كيف يعمل الـ pinning فعليًا
&lt;/h2&gt;

&lt;p&gt;عندما يتصل عميل تيليجرام بخادم MTProto proxy، يرسل الخادم رسالة &lt;code&gt;mtproto.rpc_result&lt;/code&gt; تحتوي على بيانات الاستجابة. بعض التطبيقات تتعامل مع نوع رسالة إضافي يُسمى &lt;code&gt;mtproto.ProxyInfo&lt;/code&gt; أو ما يشابهه في التنفيذات المخصصة، وفيها حقل &lt;code&gt;promoted_channel&lt;/code&gt; الذي يحمل معرّف القناة واسمها وربما صورة مصغرة.&lt;/p&gt;

&lt;p&gt;الجدير بالذكر: تيليجرام الرسمي (سواء iOS أو Android أو Desktop) يتجاهل هذا الحقل تمامًا في معظم الإصدارات. لكن بعض العملاء المعدّلين مثل Plus Messenger أو بعض نسخ Telegram Desktop غير الرسمية، أو حتى العملاء الذين كتبوا مكتباتهم الخاصة بالبروتوكول، قد يعرضون هذه القناة كمقترح بجانب القنوات الأخرى.&lt;/p&gt;

&lt;p&gt;هذا يعني أن المستخدم في بيئة عربية يستخدم نسخة معدلة لزيادة الخصوصية قد يجد فجأة قناة إخبارية أو قناة "عروض كوبونات" في قائمة الاقتراحات، دون أن يطلبها أو يفتحها بنفسه. لا يوجد إشعار. لا يوجد طلب موافقة. مجرد ظهور.&lt;/p&gt;

&lt;h2&gt;
  
  
  نموذج العمل خلف هذا الحقل
&lt;/h2&gt;

&lt;p&gt;لنفترض أنك تدير 5000 مستخدم يتصلون ببروكسيك يوميًا. اربط قناة تبيع إعلانات لشركات محلية، بسعر 50-200 دولار للإعلان الواحد الذي يصل لجمهورك. يظهر الإعلان لمستخدم واحد يوميًا كافٍ لتحقيق عائد. الخادم يكلفك 15 دولارًا. الهامش واضح.&lt;/p&gt;

&lt;p&gt;هذا النموذج مستدام بشكل أفضل من الاعتماد على التبرعات أو الإعلانات في قناة خاصة بالبروكسي. القناة المروَّجة تصل مباشرة إلى عين المستخدم دون وسيط، ويصعب على المستخدم العادي تمييزها عن قناة مقترحة طبيعية من تيليجرام نفسها.&lt;/p&gt;

&lt;p&gt;لكن هناك مشكلة. المشغِّل ليس من يختار *متى* تظهر القناة. التطبيق — إذا كان يدعم الحقل — يقرر الترتيب والزمان. وقد يظهر للحقل السلوك نفسه الذي يظهر لحقل "القنوات المجاورة" في القنوات الكبيرة: يمكن لإعدادات الخصوصية في تيليجرام (Telegram Settings &amp;gt; Privacy and Security &amp;gt; Channels) في بعض الإصدارات أن تحجب هذه الاقتراحات كليًا، إذا كان المستخدم يعرف مكان الإعداد.&lt;/p&gt;

&lt;h2&gt;
  
  
  كيف تتأكد أن بروكسيك "ملوَّث"
&lt;/h2&gt;

&lt;p&gt;الفحص العملي ليس صعبًا، لكنه يتطلب قليلًا من الأدوات:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;استخدم عميل رسمي بأحدث إصدار.&lt;/strong&gt; إذا لم تظهر أي قناة غريبة بعد أسبوع من الاستخدام، فالأرجح أن حقل &lt;code&gt;promoted_channel&lt;/code&gt; إما غير موجود أو غير مدعوم. هذا الفحص ناقص، لأن بعض العملاء يعرضون الحقل فقط بعد فترة زمنية معينة أو عند أول اتصال لكل جلسة.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;جرّب الاتصال عبر &lt;code&gt;proxytest&lt;/code&gt; على منفذ غير معتاد.&lt;/strong&gt; أوامر اختبار البروكسي المتقدمة — مثل إرسال &lt;code&gt;MTProxy&lt;/code&gt; ping packets بترتيب بايتات محدد — لا تظهر البيانات الوصفية للقناة في الاستجابة النصية، لكن يمكنك تصفية استجابة الخادم عبر أداة مثل &lt;code&gt;tcpdump&lt;/code&gt; أو &lt;code&gt;wireshark&lt;/code&gt; والبحث عن سلاسل مثل &lt;code&gt;promoted_channel&lt;/code&gt; أو &lt;code&gt;channel_id&lt;/code&gt; في الحمولةhexdump. لاحظ أن هذا يقتضي فهم تنسيق MTProto حتى على مستوى ثنائي، وهو ليس تافهًا.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;المراقبة السلبية.&lt;/strong&gt; افتح قناة البروكسي نفسه. إذا كان يدير قائمة بقنوات "مقترحة" ويوظفها بشكل متكرر، فغالبًا ما يستخدم القناة المخزنة في الحقل نفسه لاستهداف مستخدمي البروكسي.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  مقايضة الصمت مقابل الصيانة
&lt;/h2&gt;

&lt;p&gt;هنا نحتاج إلى الصدق. أغلب مطوري قوائم البروكسيات المجانية المعروفة — ومنها مشاريع ماتشبه &lt;code&gt;https://github.com/dubblebyte/free-mtproto-proxies&lt;/code&gt; — لا يذكرون حقل &lt;code&gt;promoted_channel&lt;/code&gt; في بياناتهم لأنهم ببساطة لا يستطيعون قراءته بشكل صحيح لكل خادم. بروكسي الوكيل هو مجرد صندوق مرور؛ بيانات القناة تُخزن في استجابة الخادم، وليس في الوصف النصي الذي يلتقطه المطوّر.&lt;/p&gt;

&lt;p&gt;لذلك: حتى لو كانت قائمتك نظيفة من بروكسيات بها ذلك الحقل، فأنت لست محميًا بالكامل من التلاعب طالما أنك غير قادر على التحقق من كل بروكسي بشكل ديناميكي. الحل الجذري — تشغيل بروكسيك الخاص عبر خادم مسجل باسمك — يزيل هذه المشكلة نهائيًا، لكنه يفرض عليك تكلفة وقت وإدارة تحديثات.&lt;/p&gt;

&lt;h2&gt;
  
  
  علامة إضافية تستحق المراقبة
&lt;/h2&gt;

&lt;p&gt;في النسخ الحديثة من بروتوكول MTProto، يتم ضغط الحقل في طبقة &lt;code&gt;PQP&lt;/code&gt; الداخلية أحيانًا، ولا يظهر أبدًا في نص الاستجابة المفتوح. إذا رأيت في فحص الحزمة أرقامًا متسلسلة غريبة تشير إلى &lt;code&gt;mod_q&lt;/code&gt; تساوي قيمة ثابتة (مثل الرقم المعروف لخوارزمية MTProto v2 على المنفذ 443)، فهذا ليس بالضرورة دليلًا. العلامة الأوضح هي ضغط الناقل على طول ارتباط بقيمة &lt;code&gt;transport&lt;/code&gt; تختلف عن 0xEE، أي الاستجابة ليست &lt;code&gt;random padding&lt;/code&gt; بل بيانات فعلية.&lt;/p&gt;

&lt;p&gt;لا أحد يدّعي معرفة كاملة بهذا النظام. الأمثلة على بروكسيات تستخدم الحقل فعليًا ضعيفة التوثيق لدرجة أنني لا أستطيع إعطاءك رقم “أغلبية” مقنعًا. ما أعرفه يقينًا: الحقل موجود، وتكلفة تشغيل بروكسي مجاني مشبوهة رياضيًا، والتحقق الرسمي من تيليجرام لتوافق العملاء لا يشمل الحقل نفسه.&lt;/p&gt;

&lt;p&gt;راقب قنواتك المقترحة كل أسبوعين، واستخدم عميلًا رسميًا إذا كانت سرعتك معتدلة. التكلفة الحقيقية للبروكسي المجاني تظهر في أماكن لا تبحث عنها عن الزمن الحقيقي غالبًا.&lt;/p&gt;

</description>
      <category>telegram</category>
      <category>privacy</category>
      <category>proxy</category>
      <category>opsec</category>
    </item>
  </channel>
</rss>
