Throne API و thronectl
Throne را با Throne API و کلاینت خط فرمان آن، thronectl، از اسکریپتها، کلیدهای میانبر و دستگاههای دیگر کنترل و مدیریت کنید.
Throne API (از نسخهٔ 1.4.0) به اسکریپتها، ابزارهای کلید میانبر و دستگاههای دیگر اجازه میدهد Throne را کنترل کنند: نمایهها را اجرا و متوقف کنند، حالت TUN و پروکسی سیستمی را روشن و خاموش کنند، نمایهٔ مسیریابی را تغییر دهند، تست اجرا کنند و نمایهها و آمار ترافیک را بخوانند. این API میتواند Throne را مدیریت هم بکند: نمایهها را وارد کند، اشتراک اضافه و بهروز کند، گروهها و نمایهها را حذف کند، تنظیمات را تغییر دهد، پشتیبان بگیرد و بازیابی کند، و Throne را دوباره راهاندازی کند یا از آن خارج شود.
thronectl کلاینت خط فرمان این API است. این صفحه توضیح میدهد چگونه API را در Throne دسکتاپ روشن کنید، چگونه thronectl را نصب و متصل کنید و هر فرمان چه کاری انجام میدهد.
Throne بدون رابط گرافیکی، که بدون پنجره روی سرور یا در کانتینر اجرا میشود، API را از نخستین اجرا روشن دارد و آن را با thronectl مدیریت میکنید. مدیریت با thronectl نشان میدهد چگونه به آن متصل شوید و آن را راهاندازی کنید.
Throne برای Android، Throne API ندارد.
روشن کردن API در Throne
API بهطور پیشفرض خاموش است.
تنظیمات(Settings) ←Integration Settingsرا باز کنید، سپس زبانهٔThrone APIرا.Enable the Throne APIرا تیک بزنید. Throne یک کلید جدید در فیلد میگذارد.- روی
تایید(OK) کلیک کنید.StatusعبارتListening on 127.0.0.1:9095را نشان میدهد.
این زبانه این کنترلها را دارد:
| کنترل | کاری که انجام میدهد |
|---|---|
Enable the Throne API |
API را روشن میکند. |
Listen on |
This computer only (پیشفرض) روی 127.0.0.1 گوش میدهد، بنابراین فقط برنامههای همین رایانه میتوانند متصل شوند. Local network روی همهٔ نشانیهای رایانه گوش میدهد، بنابراین دستگاههای دیگر هم میتوانند متصل شوند. |
Port |
پورت TCP، بهطور پیشفرض 9095. |
Allowed addresses |
فقط با Local network: نشانیها و محدودههای IP که اجازهٔ اتصال دارند، مانند 192.168.1.0/24, 10.0.0.5، جداشده با ویرگول یا فاصله. اگر خالی باشد، همهٔ نشانیها میتوانند متصل شوند. برنامههای همین رایانه همیشه میتوانند از راه 127.0.0.1 متصل شوند. |
اجازهٔ مدیریت از شبکهٔ محلی (Allow management from the local network) |
فقط با Local network: دستگاههای دیگر هم میتوانند درخواستهای مدیریتی، مانند وارد کردن، تغییر تنظیمات و پشتیبانگیری، بفرستند. برنامههای همین رایانه همیشه میتوانند آنها را بفرستند. |
Key |
کلید مخفیای که کلاینتها به آن نیاز دارند، به طول 43 نویسه. Show آن را نشان میدهد، Copy آن را کپی میکند و Regenerate کلید جدیدی میسازد. |
Copy for scripts |
دو تنظیمی را که thronectl میخواند، یعنی THRONE_ADDR و THRONE_KEY، کپی میکند. با Local network، نشانی همان نشانی رایانه در شبکهٔ شماست. |
Status |
اینکه Throne گوش میدهد، برای مثال Listening on port 9095 (local network)، یا اینکه چرا گوش نمیدهد، برای مثال Port 9095 is in use. |
- تغییرات وقتی اعمال میشوند که روی
تاییدکلیک کنید. کلید، پورت یا نشانی جدید، اتصالهای باز را میبندد. اسکریپتهایی که از کلید قدیمی استفاده میکنند از کار میافتند؛ بنابراین Throne پیش از اینکهRegenerateکلید ذخیرهشده را جایگزین کند، میپرسد. - با
Local network، پنجره هشدار میدهد که دستگاههای شبکهٔ شما با این کلید میتوانند Throne را کنترل کنند. ممکن است فایروال شما بپرسد که آیا به Throne اجازه دهد یا نه. - Throne هر درخواستی را که چیزی را تغییر میدهد، همراه با نشانی کلاینت در گزارش مینویسد، برای مثال
[API] PUT /v1/connection from 127.0.0.1. خطهایی که با[API]شروع میشوند، اتصالهای ردشده را هم نشان میدهند. - اگر کیلسوییچ روشن باشد و API روی شبکهٔ محلی گوش دهد، کیلسوییچ اجازه میدهد پاسخهای API خارج شوند، بنابراین کلاینتها همچنان میتوانند متصل شوند.
نصب thronectl
thronectl یک برنامهٔ تکفایلی برای Linux، Windows، macOS و FreeBSD است. این برنامه بخشی از بستههای Throne نیست؛ ایمیج Docker مربوط به Throne بدون رابط گرافیکی آن را دارد.
-
آن را از انتشارهای Throne-api دانلود کنید، از حالت فشرده خارج کنید و
thronectl(در Windows،thronectl.exe) را در پوشهای قرار دهید که درPATHشماست. -
یا، اگر Go نصب است:
go install github.com/throneproj/Throne-api/cmd/thronectl@latest
thronectl version نسخهٔ آن را چاپ میکند.
اتصال thronectl به Throne
thronectl نشانی Throne و کلید را از متغیرهای محیطی میخواند:
| متغیر | چه چیزی را نگه میدارد |
|---|---|
THRONE_ADDR |
نشانی و پورت، برای مثال 127.0.0.1:9095. پیشفرض: 127.0.0.1:9095. |
THRONE_KEY |
خود کلید. |
THRONE_KEY_FILE |
مسیر فایلی که کلید را نگه میدارد. |
thronectl هرگز کلید را بهعنوان آرگومان خط فرمان نمیپذیرد، بنابراین کلید در تاریخچهٔ پوستهٔ (shell) شما ثبت نمیشود. آن را در فایلی نگه دارید که فقط خودتان بتوانید بخوانید و THRONE_KEY_FILE را روی آن تنظیم کنید:
-
در Throne، روی
Copy for scriptsکلیک کنید. -
خط
THRONE_KEY=…را بدونTHRONE_KEY=، یعنی فقط خود کلید را، در یک فایل ذخیره کنید، برای مثال~/.config/throne/api-key. در Linux و macOS،chmod 600را روی فایل اجرا کنید. -
متغیرها را تنظیم کنید، برای مثال در
~/.bashrc:export THRONE_ADDR=127.0.0.1:9095 export THRONE_KEY_FILE=~/.config/throne/api-keyدر PowerShell، برای مثال در
$PROFILE:$env:THRONE_ADDR = "127.0.0.1:9095" $env:THRONE_KEY_FILE = "$HOME\throne-api-key.txt" -
اتصال را آزمایش کنید:
thronectl status
این پرچمها (flags) پیش یا پس از فرمان کار میکنند:
| پرچم | کاری که انجام میدهد |
|---|---|
--addr host:port |
نشانی Throne. پیشفرض: THRONE_ADDR، وگرنه 127.0.0.1:9095. |
--key-file file |
کلید را از این فایل میخواند. بر THRONE_KEY و THRONE_KEY_FILE اولویت دارد. |
--json |
پاسخ Throne را بهجای جدول، بهصورت JSON چاپ میکند. |
--timeout 30s |
پس از این مدت دست از انتظار میکشد، بهطور پیشفرض 30s. با 0، تا هر وقت Throne لازم داشته باشد منتظر میماند. |
برای Throne بدون رابط گرافیکی، Throne --print-connection خطوط export را برای هر دو متغیر چاپ میکند. اتصال thronectl به Throne را ببینید.
فرمانها
thronectl help <command> یک فرمان را توضیح میدهد. thronectl در فهرستهایش شناسهٔ نمایهها، گروهها، نمایههای مسیریابی و تستها را نشان میدهد؛ فرمانها همین شناسهها را میگیرند.
| فرمان | کاری که انجام میدهد |
|---|---|
status |
وضعیت، نمایهٔ در حال اجرا، حالتها، نمایهٔ مسیریابی، نسخهٔ Throne و، اگر برنامهٔ دیگری TUN را در اختیار داشته باشد، نام آن را نشان میدهد. |
groups |
گروهها را با شناسههایشان فهرست میکند. |
profiles [--group N] [--name REGEX] [--ids 1,2] |
نمایهها را با آخرین نتایج تستشان فهرست میکند. |
connect <id> |
یک نمایه را اجرا میکند. اگر نمایه از قبل در حال اجرا باشد، --restart آن را دوباره اجرا میکند. |
connect last |
نمایهٔ در حال اجرا را اجرا میکند، وگرنه آخرین نمایه را، وگرنه نمایهٔ بهخاطرسپردهشده را. |
connect best [--group N] [--name REGEX] [--max-age 1h] |
نمایهای را که کمترین تأخیر را دارد اجرا میکند. ابتدا نمایههایی را تست میکند که نتیجهای جدیدتر از --max-age ندارند. گروه پیشفرض همان گروهی است که Throne نشان میدهد. |
disconnect |
نمایهٔ در حال اجرا را متوقف میکند. |
toggle |
وقتی چیزی اجرا نمیشود، connect last؛ وگرنه disconnect. |
tun on، tun off، tun toggle |
حالت TUN را روشن یا خاموش میکند. |
proxy on، proxy off، proxy toggle |
پروکسی سیستمی را روشن یا خاموش میکند. |
routes |
نمایههای مسیریابی را فهرست میکند. |
route <id> |
یک نمایهٔ مسیریابی را فعال میکند و نمایهٔ در حال اجرا را دوباره اجرا میکند. |
test latency، test ip، test speed |
یک تست URL، تست IP یا تست سرعت اجرا میکند و نتایج را نشان میدهد. --group N (با --name REGEX اختیاری) یا شناسهٔ نمایهها را اضافه کنید. |
jobs، job <id>، cancel <id> |
تستهای اخیر را فهرست میکند، یک تست را نشان میدهد، یک تست را متوقف میکند. |
clear |
نتایج تست را پاک میکند. --group N (با --name REGEX اختیاری) یا شناسهٔ نمایهها را اضافه کنید. |
live |
نرخ فعلی ترافیک را نشان میدهد. |
traffic [--by profile] [--by app] [--since 24h] |
مجموع ترافیک را بر اساس نمایه (پیشفرض) یا بر اساس برنامه نشان میدهد. --since روز را هم میپذیرد، مانند 7d. |
import [--group N] FILE |
لینکهای اشتراکگذاری، محتوای یک اشتراک، یا یک پیکربندی Clash، sing-box، Xray، WireGuard یا OpenVPN را از فایلی تا حجم 900 KiB وارد میکند. - ورودی استاندارد را میخواند؛ --url URL باعث میشود Throne یک URL را یک بار دانلود کند. گروه پیشفرض همان گروهی است که Throne نشان میدهد. |
sub add <url> [--name NAME] |
یک گروه اشتراک اضافه میکند، که نامش بهطور پیشفرض از میزبان (host) URL گرفته میشود، و آن را بهروز میکند. --no-auto-update آن را از بهروزرسانیهای خودکار کنار میگذارد؛ با --no-update، اشتراک همین حالا دانلود نمیشود. |
sub update <id>…، sub update --all |
گروههای اشتراک را بهروز میکند، یا همهٔ گروههایی را که آرشیو نشدهاند. |
group add <name>، group rm <id> |
یک گروه اضافه میکند؛ یک گروه را همراه با نمایههایش حذف میکند. |
profile rm <id>…، profile rm --group N [--name REGEX] |
نمایهها را حذف میکند. |
settings [get] [KEY…] |
تنظیماتی را که API مدیریت میکند نشان میدهد. تنظیمات را ببینید. |
settings set KEY=VALUE… |
تنظیمات را تغییر میدهد. true، false و اعداد به همان شکل فرستاده میشوند و هر چیز دیگری بهصورت متن. |
backup create [-o FILE] [--parts LIST] |
یک آرشیو .thrbackup مینویسد، بهطور پیشفرض throne-backup-<time>.thrbackup. |
backup restore FILE [--parts LIST] [--yes] |
محتوای آرشیو را نشان میدهد، میپرسد، آن را بازیابی میکند و Throne را دوباره راهاندازی میکند. بخشهای پیشفرض: profiles,routes,otp,ip_lists. |
rulesets update |
مجموعهقوانین راهدور نمایهٔ در حال اجرا را دوباره دانلود میکند. |
geo، geo update [geoip] [geosite] [--only-missing] |
فایلهای geo مربوط به Xray را نشان میدهد؛ آنها را دوباره دانلود میکند. |
restart |
Throne را دوباره راهاندازی میکند. |
shutdown [--yes] |
پس از پرسیدن، از Throne خارج میشود. |
keygen [-o FILE] |
یک کلید جدید میسازد: آن را چاپ میکند، یا در فایل جدیدی مینویسد که فقط خودتان بتوانید بخوانید. به Throne متصل نمیشود. |
call <METHOD> <PATH> [key=value…] [--body JSON] |
هر درخواستی از مشخصات API را میفرستد و پاسخ را چاپ میکند. |
completion bash، zsh، fish یا powershell |
یک اسکریپت تکمیل خودکار در پوسته چاپ میکند. |
version |
نسخهٔ thronectl را چاپ میکند. |
خوب است بدانید:
--nameیک عبارت باقاعده (regular expression) است که به بزرگی و کوچکی حروف حساس نیست و میتواند با هر بخشی از نام منطبق شود. آن را در پوسته داخل نقلقول بگذارید، برای مثال--name 'DE|NL'.--partsفهرستی جداشده با ویرگول ازprofiles،routes،settings،otp،ip_listsوiconsرا میپذیرد.- فرمانهایی که یک نمایه را اجرا یا متوقف میکنند، تا
--timeoutمنتظر نتیجه میمانند. اگر Throne بیشتر طول بکشد،thronectlوضعیت فعلی، مانندconnecting، را نشان میدهد و Throne کار را خودش تمام میکند. وارد کردن، بهروزرسانی، حذف و دانلود هم به همین شکل منتظر میمانند. با--no-wait، فرمان بیدرنگ برمیگردد. - تستها و دانلود فایلهای geo ممکن است چند دقیقه طول بکشند، پس به آنها
--timeoutطولانیتری بدهید، برای مثال--timeout 15m. تستی که بیشتر طول بکشد، در Throne به کار خود ادامه میدهد؛ آن را باthronectl job <id>دنبال کنید. - Throne در هر لحظه فقط یک تست اجرا میکند، چه آن را از پنجره شروع کنید چه از راه API.
thronectlدر صورت موفقیت با0خارج میشود؛ با1برای خطایی از Throne (که بهصورتerror: <code>: <message>چاپ میشود)، بهروزرسانی ناموفق اشتراک، مجموعهقوانین یا فایلهای geo، یا پرسشی که به آن پاسخ منفی داده شود؛ با2برای فرمان یا پرچم نادرست؛ و با3وقتی نمیتواند متصل شود، کلید رد میشود یا فایلی خوانده نمیشود.
تنظیمات
thronectl settings تنظیماتی را که API میتواند تغییر دهد نشان میدهد و thronectl settings set آنها را تغییر میدهد، برای مثال thronectl settings set log_level=debug kill_switch=true. Throne ابتدا همهٔ مقدارها را بررسی میکند و اگر یکی نادرست باشد، هیچ چیز را تغییر نمیدهد.
| بخش | تنظیمات |
|---|---|
| شروع | remember_enable |
| گزارشها | log_level، xray_log_level |
| ورودی Mixed | inbound_enabled، inbound_address، inbound_port |
| تستها | test_url، test_concurrency، test_timeout_ms |
| بهروزرسانیهای خودکار | sub_auto_update، sub_respect_server_interval، route_auto_update (بر حسب دقیقه، 0 یعنی خاموش) |
| کیلسوییچ | kill_switch |
| TUN | tun_strict_route، tun_auto_redirect (Linux)، tun_mtu، tun_ipv6، tun_ipv4_cidr، tun_ipv6_cidr |
| پورتها و APIها | dns_in_port، clash_api_port، clash_listen_addr، singbox_api_port |
| DNS و زمان | remote_dns، direct_dns، ntp_enabled، ntp_server، ntp_interval |
بیشتر تغییرات گزارشها، ورودی، پورتها، DNS و NTP وقتی اعمال میشوند که نمایهٔ در حال اجرا دوباره اجرا شود. تنظیمات TUN فقط وقتی به این راهاندازی دوباره نیاز دارند که نمایه در حالت TUN اجرا شود؛ در غیر این صورت دفعهٔ بعد که حالت TUN شروع شود اعمال میشوند. تا وقتی راهاندازی دوباره لازم است، thronectl status این را میگوید؛ thronectl connect last --restart آنها را اعمال میکند. جدول تنظیمات در مشخصات API مقدارهای مجاز را دارد.
درخواستهای مدیریتی
این فرمانها درخواست مدیریتی میفرستند: import، sub add، group add، group rm، profile rm، settings set، backup، restart و shutdown. فرمانهای دیگر، از جمله sub update، rulesets update و geo update، درخواستهای کنترلی هستند. کلید برای هر دو نوع یکسان است.
- Throne فقط از رایانهٔ خودش، یعنی از
127.0.0.1یا::1، به درخواستهای مدیریتی پاسخ میدهد. - از دستگاه دیگر، این درخواستها با
forbiddenشکست میخورند، مگر اینکهاجازهٔ مدیریت از شبکهٔ محلیروشن باشد. Throne بدون رابط گرافیکی بهجای آن به--api-admin-lanنیاز دارد. - آرشیوهای پشتیبان، گذرواژهها و کلیدهای نمایههای شما و رمزهای OTP شما را بهصورت متن ساده نگه میدارند.
thronectlآنها را طوری میسازد که فقط خودتان بتوانید بخوانید. آنها را همینطور نگه دارید و وقتی دیگر لازمشان ندارید، حذفشان کنید. backup restoreآرشیوی را که نمایههایش روی رایانه برنامه اجرا میکنند یا فایل میخوانند، مانند نمایههای هستهٔ اضافی (Extra Core)، رد میکند (invalid_archive). چنین آرشیوی را در پنجرهٔ Throne بازیابی کنید.backup restoreوshutdownپیش از انجام کار میپرسند. در اسکریپتی که ترمینال ندارد،--yesرا اضافه کنید.
بازیابی settings تنظیماتی را که به این رایانه تعلق دارند نگه میدارد: Throne API، ورودی و پورتها، TUN، کیلسوییچ، آخرین نمایه را به خاطر بسپار (Remember last profile)، NTP، گزارشگیری، پروکسی سیستمی و مسیرهای فایل.
نمونهها
فرمانهای روزمره:
thronectl status
thronectl profiles --group 3 --name 'DE|NL'
thronectl connect 12
thronectl tun on
thronectl route 2
thronectl --timeout 2m test latency --group 3
thronectl traffic --by app --since 7d
thronectl sub add 'https://sub.example.com/abc' --name Provider
thronectl --timeout 2m sub update --all
thronectl backup create -o throne.thrbackup
اتصال به بهترین نمایه
نمایهای را اجرا کنید که در گروهی که Throne نشان میدهد کمترین تأخیر را دارد. نتایج قدیمیتر از ده دقیقه دوباره تست میشوند:
thronectl connect best --max-age 10m
اتصال به سریعترین نمایه
روی نمایههای گروه 3 که نامشان DE یا NL دارد تست سرعت اجرا کنید، سپس سریعترین را اجرا کنید. این کار به jq نیاز دارد:
best=$(thronectl --json --timeout 15m test speed --group 3 --name 'DE|NL' |
jq -r '[.results[] | select(.download_bps > 0)] | max_by(.download_bps) | .id // empty')
[ -n "$best" ] && thronectl connect "$best"
یک کلید برای اتصال و قطع اتصال
برای اینکه با یک کلید از Stream Deck، یک صفحهکلید ماکرو (macro pad) یا یک ابزار کلید میانبر متصل شوید و اتصال را قطع کنید، کلید را طوری تنظیم کنید که این فرمان را اجرا کند:
thronectl toggle
برنامههایی که با یک کلید فرمان اجرا میکنند، اغلب تنظیمات پوستهٔ شما را نمیخوانند. THRONE_KEY_FILE (و در صورت نیاز THRONE_ADDR) را بهعنوان متغیر محیطی حساب کاربری خود تنظیم کنید، یا --key-file را به فرمان اضافه کنید. Throne دسکتاپ هم برای Start/Stop Profile و Toggle Tun Mode کلیدهای میانبر سراسری دارد.
PowerShell
نمونهٔ تست سرعت در PowerShell:
$job = thronectl --json --timeout 15m test speed --group 3 --name 'DE|NL' | ConvertFrom-Json
$best = $job.results | Where-Object download_bps -gt 0 | Sort-Object download_bps -Descending | Select-Object -First 1
if ($best) { thronectl connect $best.id }
تکمیل خودکار در پوسته
thronectl completion <shell> اسکریپتی چاپ میکند که فرمانها، پرچمها، نام تنظیمات، بخشهای پشتیبان و دیگر مقدارهای ثابت را در bash، zsh، fish و PowerShell کامل میکند. وقتی Throne در کمتر از یک ثانیه پاسخ دهد، شناسهٔ نمایهها، گروهها، نمایههای مسیریابی و تستها را هم همراه با نامشان کامل میکند.
# bash: in ~/.bashrc (on macOS, ~/.bash_profile)
eval "$(thronectl completion bash)"
# zsh: in ~/.zshrc
autoload -Uz compinit && compinit
source <(thronectl completion zsh)
# fish
thronectl completion fish > ~/.config/fish/completions/thronectl.fish
# In $PROFILE
thronectl completion powershell | Out-String | Invoke-Expression
این اسکریپتها از خود thronectl میپرسند چه چیزی را کامل کنند، بنابراین وقتی thronectl را بهروز میکنید، درست باقی میمانند.
امنیت
- هر کس کلید را داشته باشد، اتصال، حالتها و مسیریابی Throne را کنترل میکند و میتواند نام، نشانی، نتایج تست و ترافیک نمایههای شما را بخواند. از همین رایانه، یا از شبکهٔ محلی وقتی
اجازهٔ مدیریت از شبکهٔ محلیروشن است، کلید اجازهٔ وارد کردن، حذف، تغییر تنظیمات و پشتیبانگیری را هم میدهد، و پشتیبانها اطلاعات ورود شما را بهصورت متن ساده دارند. - کلید را در خط فرمانها و اسکریپتهایی که دیگران میتوانند بخوانند قرار ندهید. از فایل کلیدی استفاده کنید که فقط خودتان بتوانید بخوانید، یا از
THRONE_KEYکه از یک مدیر گذرواژه یا یک انبار اسرار (secret store) میآید. - همهٔ پیامهای میان
thronectlو Throne با کلید رمزگذاری و احراز هویت میشوند، در شبکهٔ محلی هم. محرمانگی پیشرو (forward secrecy) وجود ندارد: هر کس کلید را به دست آورد، میتواند ترافیکی را که پیشتر ضبط شده است بخواند. - اگر کلید فاش شد، روی
Regenerateکلیک کنید و کلید جدید را به اسکریپتهایتان بدهید. برای Throne بدون رابط گرافیکی، محافظت در برابر قطع دسترسی و بازیابی را ببینید. Listen onرا رویThis computer onlyنگه دارید، مگر اینکه API را روی شبکه لازم داشته باشید. روی شبکه، دستگاههایی را که اجازهٔ اتصال دارند درAllowed addressesفهرست کنید.- پس از 5 تلاش ناموفق برای اتصال در یک دقیقه از یک نشانی، Throne آن نشانی را به مدت 60 ثانیه رد میکند. تا پایان این مدت، کلاینتهای دیگری هم که پشت همان نشانی هستند، برای مثال پشت همان روتر، نمیتوانند متصل شوند. Throne هرگز
127.0.0.1را رد نمیکند، و نه نشانیای را که در 10 دقیقهٔ گذشته کلاینتی با موفقیت از آن وارد شده است. - پاسخها هرگز اطلاعات ورود نمایههای شما یا URL اشتراکهایتان را ندارند. پشتیبانها استثنا هستند.
کتابخانهٔ Go
مخزن Throne-api یک کتابخانهٔ Go هم دارد، یعنی github.com/throneproj/Throne-api، که برای هر درخواست یک متد دارد. مشخصات API هم با پروتکل ارتباطی (wire protocol) در همین مخزن است، تا بتوانید به زبان دیگری کلاینت بنویسید.