ProxynetProxynet

پروکسی MITM چیست؟ راهنمای Charles، Fiddler و mitmproxy

تاریخ انتشار:

15 دقیقه مطالعه

Acar Diveroli
نویسنده: Acar Diveroli
پنل‌های درخواست و پاسخ 403 که مانند پاکت نامه از هم باز شده‌اند، قفلی باز در شکاف میانشان و نشان آبی CA محلی روی کمان بالا

اسکرپر شما روی یک صفحه دسته‌بندی 403 می‌گیرد، در حالی که همان صفحه در مرورگر بی‌دردسر باز می‌شود، و خطا جز کد وضعیت چیزی نمی‌گوید. اگر درخواست مرورگر و درخواست Python را کنار هم می‌دیدید، تفاوت در یک دقیقه پیدا می‌شد، اما HTTPS روی هر دو مهر و موم گذاشته است. یک پروکسی MITM روی رایانه خودتان این مهر و موم را فقط برای شما باز می‌کند.

این راهنما توضیح می‌دهد پروکسی MITM چگونه HTTPS را می‌خواند، Charles، Fiddler و mitmproxy را با شرایط مجوزشان در 2026 مقایسه می‌کند و به گواهی ریشه، برنامه‌های موبایل خودتان، یک راه‌اندازی آزموده‌شده در Python و زنجیر کردن ابزار به یک پروکسی بالادستی می‌پردازد. همه‌چیز بر این فرض است که با دستگاه و برنامه خودتان کار می‌کنید، یا با سیستمی که اجازه کتبی آزمودنش را دارید.

پروکسی MITM چیست؟

«مرد میانی» (man-in-the-middle) نام یک حمله است: کسی بی‌خبر از دو طرف میان آن‌ها قرار می‌گیرد و آنچه می‌فرستند را می‌خواند. پروکسی MITM از همین جایگاه برای اشکال‌زدایی استفاده می‌کند. ابزار را خودتان نصب می‌کنید، ترافیک مال خودتان است و به گواهی آن خودتان اعتماد می‌کنید، پس کسی فریب نمی‌خورد. شرکت‌ها این روش را برای بازرسی TLS روی رایانه‌های کارکنان به کار می‌برند؛ آن بخش به نوشته پروکسی و فایروال مربوط است.

یک فوروارد پروکسی معمولی (سرور پروکسی چگونه کار می‌کند) از یک درخواست HTTPS فقط میزبان مقصد را می‌بیند، آن هم از سطر CONNECT example.com:443، و پس از آن بایت‌های رمزنگاری‌شده را جابه‌جا می‌کند. پروکسی MITM اتصال رمزنگاری‌شده را روی رایانه شما پایان می‌دهد، پس URL کامل، همه هدرها و بدنه را می‌بیند.

پروکسی MITM ترافیک HTTPS را چگونه باز می‌کند؟

⁦RFC 9110⁩ تونل را واسطه‌ای کور (blind relay) توصیف می‌کند که پیام‌ها را بی‌آنکه تغییر دهد منتقل می‌کند. پروکسی معمولی پس از CONNECT به این قاعده پایبند می‌ماند؛ پروکسی MITM آن را عمداً می‌شکند، آن هم فقط برای کلاینت‌هایی که به گواهی‌اش اعتماد دارند. بر پایه توضیح mitmproxy درباره این روند:

  1. کلاینت CONNECT example.com:443 را به ابزار محلی می‌فرستد.
  2. ابزار با 200 Connection Established پاسخ می‌دهد، گویی تونل را باز کرده است.
  3. کلاینت دست‌دادن TLS را آغاز می‌کند و نام میزبان را در فیلد SNI می‌آورد.
  4. ابزار از راه TLS به همان میزبان وصل می‌شود و نام‌های درون گواهی سرور (CN و SAN) را می‌خواند.
  5. گواهی‌ای با همان نام‌ها می‌سازد و آن را با گواهی ریشه محلی خود (CA، مرجع صدور گواهی) امضا می‌کند.
  6. اگر کلاینت به این CA اعتماد داشته باشد، دست‌دادن کامل می‌شود و ابزار ترافیک را به‌صورت متن ساده می‌خواند و سپس آن را برای ارسال به سرور دوباره رمزنگاری می‌کند.

اگر کلاینت به CA اعتماد نداشته باشد، گام 6 با خطای گواهی شکست می‌خورد و درست هم همین است. گیت‌وی Proxynet هرگز گام 5 را انجام نمی‌دهد: تونل CONNECT را کورکورانه منتقل می‌کند، پس پروکسی HTTPS به هیچ گواهی ریشه‌ای روی دستگاه شما نیاز ندارد.

مقایسه Charles، Fiddler و mitmproxy

بر پایه صفحه‌های خود سازندگان در سپتامبر 2026؛ فقط مدل مجوز، بدون قیمت.

ابزارمجوزپلتفرم‌هارابطپورت پیش‌فرضپروکسی بالادستیخودکارسازی
Charlesمجوز کاربر پولی پس از دوره آزمایشی 30 روزهWindows، macOS، Linuxبرنامه دسکتاپمعمولاً 8888HTTP، HTTPS و SOCKS؛ احراز هویت Basic یا NTLMBreakpoints، Rewrite، Map Local
Fiddler Everywhereاشتراک، دوره آزمایشی 10 روزهWindows، macOS، Linuxبرنامه دسکتاپ8866رشته پروکسی دستی؛ احراز هویت Kerberos، Negotiate یا NTLMRules
Fiddler Classicاز 3 اوت 2026 فقط استفاده غیرتجاریفقط Windowsبرنامه دسکتاپ8888در این راهنما بررسی نشده استFiddlerScript
mitmproxyمتن‌باز، MITWindows، macOS، Linuxترمینال، مرورگر (mitmweb)، خط فرمان (mitmdump)8080--mode upstream: همراه با upstream_auth (Basic)افزونه‌های Python، CI

Charles و Fiddler Everywhere به کار تیم‌های QA موبایل می‌آیند که درخواست‌ها را در یک پنجره ویرایش می‌کنند؛ mitmproxy به کار توسعه‌دهندگانی می‌آید که این بررسی را درون مجموعه تست یا CI می‌خواهند، جایی که هر گام یک تابع Python است. Burp Suite برای آزمون امنیتی ساخته شده است که بیرون از دامنه این راهنماست.

Charles Proxy چیست و چه زمانی آن را انتخاب کنید؟

Charles برنامه‌ای دسکتاپ است که می‌توانید 30 روز امتحانش کنید و سپس مجوز کاربر بخرید. فقط میزبان‌هایی را رمزگشایی می‌کند که در فهرست SSL Proxying آن باشند (* یعنی همه میزبان‌ها) و باقی ترافیک HTTPS را بی‌آنکه باز کند عبور می‌دهد. آزماینده پروکسی Wi-Fi دستگاه iPhone را روی لپ‌تاپ و پورت 8888 تنظیم می‌کند، وقتی Charles می‌پرسد به دستگاه اجازه می‌دهد و سپس با Breakpoints درخواست‌ها را ویرایش می‌کند، با Map Local از یک فایل پاسخ می‌دهد و با محدودسازی سرعت (throttling) شبکه‌ای کند را شبیه‌سازی می‌کند.

Fiddler چیست؟ Classic و Everywhere

Fiddler Classic فقط روی Windows اجرا می‌شود، دیگر توسعه داده نمی‌شود و FiddlerScript دارد. از 3 اوت 2026 مجوز آن فقط استفاده غیرتجاری را مجاز می‌داند؛ کاربران تجاری تا 17 سپتامبر 2026 فرصت داشتند به ابزار دیگری بروند و مجوز پولی برای Classic وجود ندارد.

Fiddler Everywhere محصول تجاری است: Windows، macOS و Linux، اشتراک پس از دوره آزمایشی 10 روزه، پشتیبانی از ⁦HTTP/2⁩ و ⁦TLS 1.3⁩ و پورت 8866. ضبط HTTPS را روشن می‌کنید، به گواهی ریشه آن اعتماد می‌کنید و نشست‌ها را بر اساس میزبان فیلتر می‌کنید.

mitmproxy چیست؟ سه رابط و افزونه‌های Python

mitmproxy مجوز MIT دارد؛ نسخه 12.2.3 (12 مه 2026) به ⁦Python 3.12⁩ یا جدیدتر نیاز دارد. سه ابزار همراه آن است: mitmproxy (نمای ترمینال)، mitmweb (نمای مرورگر) و mitmdump (بدون رابط، برای اسکریپت‌ها و CI)، و هر سه به‌طور پیش‌فرض روی پورت 8080 کار می‌کنند.

در نخستین اجرا CA خود را در ~/.mitmproxy می‌سازد که مختص همان نصب است: کلید خصوصی (mitmproxy-ca.pem) کنار فایل‌های گواهی برای هر پلتفرم (mitmproxy-ca-cert.pem، .p12، .cer) قرار دارد. وقتی پروکسی روی دستگاهی تنظیم شده باشد، mitm.it فایل مناسب و مراحل نصب را پیشنهاد می‌کند. افزونه (addon) یک فایل Python است که تابع‌هایش به نام رویدادهایی مانند response نام‌گذاری شده‌اند.

چرا به گواهی ریشه نیاز دارید و آیا امن است؟

هر کس کلید خصوصی یک CA را در دست داشته باشد، می‌تواند برای هر سایتی گواهی‌ای بسازد که روی همه دستگاه‌هایی که به آن CA اعتماد دارند معتبر به نظر برسد. خطر در همین کلید است، نه در ابزار:

  • فقط CA ساخته‌شده به دست ابزار خودتان. راهنمای امنیت پروکسی رایگان ما می‌گوید گواهی‌ای را که یک سرویس پروکسی می‌خواهد نصب نکنید و این توصیه همچنان پابرجاست: CA راه دور به یک غریبه اجازه می‌دهد ترافیک شما را بخواند. ابزاری که روی رایانه خودتان است فرق دارد، چون کلیدش هرگز از رایانه شما بیرون نمی‌رود.
  • فقط روی دستگاه‌های آزمایشی و فقط در مدت آزمون. ~/.mitmproxy را با کسی به اشتراک نگذارید یا commit نکنید و پس از پایان کار CA را حذف کنید.
  • بررسی‌های خود ابزار را روشن نگه دارید. گزینه ssl_insecure در mitmproxy بررسی گواهی در سمت سرور را کنار می‌گذارد و متن راهنمای آن هشدار می‌دهد که این کار خود mitmproxy را در برابر شنود آسیب‌پذیر می‌کند.

برای حذف CA:

  • Windows: در certmgr.msc به Trusted Root Certification Authorities > Certificates بروید.
  • macOS: گواهی ابزار را در Keychain Access حذف کنید.
  • iPhone: مسیر Settings > General > VPN & Device Management را باز کنید، پروفایل را انتخاب کنید و Remove Profile را بزنید.
  • اندروید (Pixel): به Settings > Security & privacy > More security settings > Encryption & credentials > User credentials بروید؛ در گوشی‌های سازندگان دیگر، بخش پیش از دو گام آخر فرق دارد.

دیدن ترافیک برنامه موبایل خودتان در اندروید و iPhone

پروکسی Wi-Fi گوشی را روی آدرس IP رایانه‌تان و پورت ابزار تنظیم کنید؛ روش کار در تنظیمات پروکسی اندروید و تنظیمات پروکسی iPhone آمده است.

اندروید. طبق مستندات پیکربندی امنیت شبکه، برنامه‌هایی که ⁦Android 7.0⁩ (سطح ⁦API 24⁩) یا جدیدتر را هدف می‌گیرند به‌طور پیش‌فرض فقط به CAهای سیستمی اعتماد می‌کنند، پس ممکن است برنامه شما با خطای TLS از کار بیفتد در حالی که مرورگر کار می‌کند. در برنامه خودتان یک بلوک debug-overrides اضافه کنید:

xml
<!-- res/xml/network_security_config.xml -->
<network-security-config>
    <debug-overrides>
        <trust-anchors>
            <certificates src="user" />
        </trust-anchors>
    </debug-overrides>
</network-security-config>

آن را با android:networkSecurityConfig="@xml/network_security_config" در manifest معرفی کنید. وقتی android:debuggable برابر false باشد، اندروید این بلوک را نادیده می‌گیرد، پس نسخه release همان قواعد عادی اعتماد را نگه می‌دارد.

iPhone. پس از نصب پروفایل، اعتماد کامل را در Settings > General > About > Certificate Trust Settings فعال کنید.

پین کردن گواهی (pinning). برنامه‌ای که گواهی‌ها را پین می‌کند گواهی ابزار را رد می‌کند. در برنامه خودتان، pinning را در نسخه آزمایشی تنظیم کنید؛ در برنامه دیگران، pinning تصمیم توسعه‌دهنده است و این راهنما همین‌جا متوقف می‌شود.

رهگیری، ویرایش و بازپخش درخواست‌ها

هر سه ابزار به شما اجازه می‌دهند یک درخواست را پیش از ارسال نگه دارید و هدری را در آن تغییر دهید، به یک درخواست با فایلی محلی پاسخ دهید تا صفحه خطا را بیازمایید، و درخواستی ذخیره‌شده را دوباره بفرستید تا باگی که روزی یک بار پیش می‌آید هر وقت خواستید تکرار شود. در mitmproxy، -w flows.mitm جریان‌ها (flows) را ذخیره می‌کند و -C flows.mitm آن‌ها را بازپخش می‌کند. بازپخش را فقط روی API خودتان یا نقطه اتصالی که اجازه آزمودنش را دارید و در چارچوب محدودیت نرخ آن انجام دهید.

برای درخواست پس‌زمینه یک صفحه وب، DevTools کافی است (یافتن درخواست XHR)؛ ابزار محلی برای اسکریپت‌ها و برنامه‌هاست.

اشکال‌زدایی اسکرپر Python با پروکسی MITM

برگردیم به همان 403: اسکریپت را از mitmdump عبور می‌دهیم، هر پاسخ را ثبت می‌کنیم و برای هر خطا جزئیات درخواست را چاپ می‌کنیم. آزموده‌شده با ⁦Python 3.13⁩، ⁦mitmproxy 12.2.3⁩ و ⁦Requests 2.34.2⁩ (pip install mitmproxy requests).

افزونه، یعنی debug_addon.py، برای هر پاسخ یک سطر چاپ می‌کند و برای 4xx و 5xx هدرهایی را که معمولاً با هدرهای مرورگر فرق دارند، فرستاده شدن یا نشدن کوکی و ابتدای بدنه را نشان می‌دهد:

python
"""mitmdump addon: one line per response, request details for every 4xx and 5xx."""
from mitmproxy import http

WATCH = ("User-Agent", "Accept", "Accept-Language", "Accept-Encoding")


def response(flow: http.HTTPFlow) -> None:
    req, resp = flow.request, flow.response
    print(f"{resp.status_code} {req.method} {req.pretty_url}")
    if resp.status_code < 400:
        return
    for name in WATCH:
        print(f"    {name}: {req.headers.get(name, '(not sent)')}")
    print(f"    Cookie: {'sent' if 'Cookie' in req.headers else 'not sent'}")
    body = resp.get_content(strict=False) or b""  # decompressed if gzip or br
    print(f"    body: {body[:300].decode('utf-8', 'replace')!r}")

اسکریپت، یعنی scraper_debug.py، فقط وقتی DEBUG_PROXY تنظیم شده باشد از پروکسی استفاده می‌کند و از راه verify به CA محلی اعتماد می‌کند. مستندات Requests هشدار می‌دهد که verify=False برنامه را در برابر حمله‌های MitM آسیب‌پذیر می‌کند، پس این گزینه اینجا هرگز به کار نمی‌رود:

python
"""Fetch pages with Requests; set DEBUG_PROXY to route them through a local mitmdump."""
import os
import sys
from pathlib import Path

import requests

DEBUG_PROXY = os.environ.get("DEBUG_PROXY")  # e.g. http://127.0.0.1:8080
MITM_CA = Path.home() / ".mitmproxy" / "mitmproxy-ca-cert.pem"

session = requests.Session()
session.headers.update({
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
                  "(KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36",
    "Accept-Language": "en-GB,en;q=0.9",
})


def request_options():
    options = {"timeout": (5, 30)}  # (connect, read) in seconds
    if DEBUG_PROXY:
        if not MITM_CA.is_file():
            sys.exit(f"{MITM_CA} not found: start mitmdump once, it creates the CA there.")
        # Passed per request: a Session.proxies value can be overridden by HTTPS_PROXY.
        options["proxies"] = {"http": DEBUG_PROXY, "https": DEBUG_PROXY}
        options["verify"] = str(MITM_CA)  # trust the local CA, never verify=False
    return options


def fetch(url):
    try:
        return session.get(url, **request_options())
    except requests.exceptions.SSLError as exc:
        sys.exit(f"TLS check failed for {url}: is {MITM_CA} the CA of the "
                 f"mitmdump that is running?\n{exc}")
    except requests.exceptions.ProxyError as exc:
        sys.exit(f"Debug proxy {DEBUG_PROXY} did not answer: is mitmdump running?\n{exc}")


if __name__ == "__main__":
    for url in sys.argv[1:] or ["https://httpbin.org/headers"]:
        resp = fetch(url)
        print(resp.status_code, url)
        for name, value in resp.request.headers.items():
            print(f"    {name}: {value}")

mitmdump را فقط روی آدرس loopback اجرا کنید:

bash
mitmdump --listen-host 127.0.0.1 -p 8080 -s debug_addon.py -w flows.mitm

سپس اسکریپت را در ترمینال دوم اجرا کنید (در PowerShell، نخست $env:DEBUG_PROXY = "http://127.0.0.1:8080" را تنظیم کنید):

bash
DEBUG_PROXY=http://127.0.0.1:8080 python scraper_debug.py https://httpbin.org/headers https://httpbin.org/status/403

پنجره mitmdump این خروجی را چاپ کرد (سطرهای مربوط به اتصال حذف شده‌اند):

text
200 GET https://httpbin.org/headers
403 GET https://httpbin.org/status/403
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36
    Accept: */*
    Accept-Language: en-GB,en;q=0.9
    Accept-Encoding: gzip, deflate, br
    Cookie: not sent
    body: ''

اکنون صفحه را در مرورگری باز کنید که روی همان پروکسی تنظیم شده است. Accept: */* در برابر text/html,... مرورگر، یا نبود کوکی‌ای که باید از صفحه قبلی می‌آمد، یافته‌های رایج‌اند؛ دومی یعنی اسکریپت گامی را جا انداخته است (نشست و کوکی در Python). اگر سایت عمداً کلاینت‌های غیرمرورگر را رد می‌کند، پاسخش همین است: از API آن استفاده کنید یا اجازه بخواهید.

یک فایل CA نادرست اسکریپت را با CERTIFICATE_VERIFY_FAILED و راهنمایی ما متوقف کرد. دستور mitmdump --set server=false -C flows.mitm -s debug_addon.py هر دو درخواست را بازپخش کرد و بی‌آنکه پورتی برای شنیدن باز کند بسته شد.

سرور دست‌دادن TLS ابزار را می‌بیند، نه دست‌دادن اسکریپت شما را، پس سایتی که اثر انگشت TLS را بررسی می‌کند ممکن است تا وقتی ابزار روشن است پاسخ دیگری بدهد؛ نتیجه را با اجرایی بدون DEBUG_PROXY مقایسه کنید. تلاش دوباره برای 429 در کدهای وضعیت HTTP در وب اسکرپینگ، متغیرهای محیطی در پروکسی در wget، چرخش پروکسی در چرخاندن پروکسی در Python و انتخاب کتابخانه در مقایسه HTTPX، Requests و AIOHTTP آمده است.

آزمون از کشوری دیگر: زنجیر کردن ابزار محلی به یک پروکسی

برای دیدن قیمت‌هایی که برنامه شما به کاربری در آلمان نشان می‌دهد، ترافیک دستگاه را به ابزار MITM محلی بفرستید (رمزگشایی همان‌جا انجام می‌شود)، از آنجا به یک پروکسی بالادستی و سپس به مقصد. در مقصدهای HTTPS، پروکسی بالادستی فقط تونلی را جابه‌جا می‌کند که دوباره رمزنگاری شده است؛ Proxynet آن را رمزگشایی نمی‌کند.

mitmproxy. حالت upstream هر درخواست را به پروکسی بالادستی می‌فرستد و upstream_auth احراز هویت Basic را اضافه می‌کند:

bash
mitmdump --listen-host 127.0.0.1 --mode upstream:http://pr.proxynet.io:8000 --set upstream_auth=user:pass -s debug_addon.py

این را با یک پروکسی محلی که رمز عبور می‌خواهد آزمودیم. با رمز نادرست، اسکریپت از mitmdump پاسخ 502 گرفت و لاگ آن علت را نشان داد: پروکسی بالادستی CONNECT را با 407 رد کرده بود.

Charles. بخش External Proxies برای HTTP، HTTPS و SOCKS نشانی‌های جداگانه می‌گیرد، همراه با احراز هویت Basic یا NTLM و فهرستی از استثناها (bypass) که نویسه عام (wildcard) را می‌پذیرد.

Fiddler Everywhere. بخش Settings > Gateway یک رشته پروکسی دستی می‌گیرد و مستندات برای احراز هویت بالادستی Kerberos، Negotiate و NTLM را نام می‌برد، نه نام کاربری و رمز عبور. با Proxynet، به‌جای آن آدرس IP رایانه‌تان را مجاز کنید (user:pass و لیست سفید IP).

برای IP اپراتور موبایل از پروکسی موبایل و برای اتصال خانگی از پروکسی مسکونی استفاده کنید؛ سناریوی کامل در صفحه تست اپلیکیشن ما آمده است.

پروکسی MITM برای چه کاری به کار می‌رود؟

اشتباهات رایج

  • نصب‌شده رها کردن CA. هر کس بعدها به کلید دست پیدا کند، می‌تواند در برابر آن دستگاه خود را جای هر سایتی جا بزند.
  • انتشار کد با verify=False. به‌جای آن verify را به فایل CA اشاره دهید.
  • انتظار اینکه برنامه اندروید به CA کاربر اعتماد کند. برنامه‌های سطح ⁦API 24⁩ و بالاتر آن را نادیده می‌گیرند، مگر در نسخه debug که آن را مجاز کرده باشد.
  • از قلم انداختن SSL Proxying برای میزبان در Charles. فقط ورودی‌های رمزنگاری‌شده CONNECT را می‌بینید و هیچ محتوایی نمی‌بینید.
  • گوش دادن روی همه رابط‌های شبکه. در آزمون ما، mitmdump بدون --listen-host روی 0.0.0.0 و :: گوش داد؛ مگر اینکه گوشی باید به آن وصل شود، آن را به 127.0.0.1 محدود کنید.
  • اشتراک‌گذاری بی‌احتیاط فایل‌های flow. این فایل‌ها کوکی‌ها و هدرها را در خود دارند.
  • استفاده از Fiddler Classic در محیط کار پس از اوت 2026. مجوز آن فقط غیرتجاری است.

راهنمای انتخاب

نیازپیشنهاد
مقایسه درخواست اسکرپر با درخواست مرورگرmitmproxy با یک افزونه کوچک؛ verify در Requests روی فایل CA
ویرایش درخواست‌ها در یک پنجره برای QA موبایلCharles یا Fiddler Everywhere
Fiddler برای کار تجاری روی WindowsFiddler Everywhere یا ابزاری دیگر، نه Fiddler Classic
ترافیک HTTPS برنامه اندروید خودتانdebug-overrides فقط در نسخه debug
آزمودن برنامه از نگاه کاربری در کشوری دیگرابزار محلی را به پروکسی موبایل یا مسکونی زنجیر کنید (تست اپلیکیشن)
یافتن درخواست پس‌زمینه یک صفحه وبزبانه Network در DevTools؛ ابزار MITM لازم نیست

پرسش‌های متداول

آیا استفاده از پروکسی MITM قانونی است؟

روی دستگاه و برنامه خودتان، یا سیستمی که اجازه کتبی آزمودنش را دارید، ابزاری برای اشکال‌زدایی است. خواندن پنهانی ترافیک دیگران کاری کاملاً متفاوت است. برای اسکرپینگ، نوشته آیا اسکرپینگ وب قانونی است؟ را ببینید.

آیا mitmproxy امن است؟

ابزار متن‌باز است و به‌صورت محلی اجرا می‌شود. خطر در کلید خصوصی CA در ~/.mitmproxy است: آن را خصوصی نگه دارید، CA را فقط روی دستگاه‌های آزمایشی نصب کنید و پس از کار حذفش کنید.

آیا Fiddler Classic هنوز رایگان است و چه تفاوتی با Fiddler Everywhere دارد؟

از 3 اوت 2026، Fiddler Classic فقط برای استفاده غیرتجاری رایگان است؛ روی Windows اجرا می‌شود و دیگر توسعه داده نمی‌شود. Fiddler Everywhere محصول پولی و چندسکویی است که از ⁦HTTP/2⁩ و ⁦TLS 1.3⁩ پشتیبانی می‌کند.

آیا جایگزین رایگانی برای Charles Proxy وجود دارد؟

mitmproxy متن‌باز است و روی همان پلتفرم‌ها اجرا می‌شود؛ mitmweb به آن نمای مرورگر می‌دهد. خود Charles هم دوره آزمایشی 30 روزه دارد.

گواهی را روی اندروید نصب کرده‌ام، پس چرا ترافیک برنامه‌ام هنوز دیده نمی‌شود؟

برنامه‌هایی که سطح ⁦API 24⁩ یا جدیدتر را هدف می‌گیرند به‌طور پیش‌فرض فقط به CAهای سیستمی اعتماد می‌کنند. در نسخه debug برنامه خودتان با debug-overrides به CAهای کاربر اجازه دهید و اگر برنامه گواهی‌ها را پین می‌کند، pinning را در نسخه آزمایشی تنظیم کنید.

تفاوت پروکسی MITM، پروکسی معمولی و VPN چیست؟

پروکسی معمولی و VPN ترافیک رمزنگاری‌شده را بی‌آنکه بخوانند منتقل می‌کنند و IP خروجی شما را تغییر می‌دهند (تفاوت پروکسی و VPN). پروکسی MITM ترافیک را روی رایانه شما باز می‌کند و IP شما را تغییر نمی‌دهد، مگر اینکه به یک پروکسی بالادستی زنجیر شود.

خلاصه

پروکسی MITM ابزاری برای خواندن ترافیک خودتان است و CA آن محلی و موقت می‌ماند و فقط روی دستگاه‌های آزمایشی نصب می‌شود. Charles و Fiddler Everywhere برای کار در یک پنجره مناسب‌اند و mitmproxy برای اسکریپت‌ها و CI. وقتی آزمون باید از کشوری دیگر انجام شود، ابزار محلی را به یک پروکسی بالادستی زنجیر کنید و از صفحه تست اپلیکیشن ما شروع کنید.

پرسش از ChatGPTپرسش از Claude