MCPcopy Index your code
hub / github.com/ShahabSL/Skirk

github.com/ShahabSL/Skirk @v0.1.55

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.1.55 ↗ · + Follow
1,479 symbols 5,173 edges 73 files 1 documented · 0%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Skirk

English

Skirk logo

Skirk یک ابزار Go-first برای تست شبکه‌های محدود است. روی دستگاه کلاینت یک پروکسی SOCKS5، پروکسی HTTP اختیاری، یا VPN اندروید می‌دهد و ترافیک TCP را به صورت رمزگذاری‌شده از مسیر یک mailbox folder در Google Drive به یک دستگاه خروجی می‌رساند. دستگاه خروجی همان جایی است که اینترنت معمولی دارد و درخواست‌ها را به مقصد واقعی وصل می‌کند.

استفاده از Skirk فقط برای کار قانونی، با اجازه، روی اکانت و شبکه‌ای است که خودتان حق استفاده از آن را دارید. این پروژه وابسته به Google، Google Cloud، Google Drive، Cloudflare، GitHub، Microsoft، Android یا هیچ ارائه‌دهنده‌ی دیگری نیست. قبل از استفاده یا انتشار، حتما DISCLAIMER.md را بخوانید.

چه چیزهایی لازم دارید

  • یک دستگاه خروجی با اینترنت عادی. VPS بهتر است، چون همیشه روشن می‌ماند؛ ولی لپ‌تاپ یا سرور خانگی هم تا وقتی آنلاین باشد کار می‌کند.
  • یک اکانت Google برای mailbox داخل Drive.
  • یک پروفایل skirk:... که می‌توانید برای دستگاه‌های کلاینت بفرستید.

کلاینت‌ها لازم نیست وارد Google شوند، gcloud نصب کنند، یا پروژه Google Cloud داشته باشند. راه‌اندازی فقط یک بار روی دستگاه خروجی انجام می‌شود و در آخر یک متن یک‌خطی می‌دهد که برای کلاینت فرستاده می‌شود. همان پروفایل را می‌شود روی چند دستگاه import کرد. هر کلاینت برای خودش یک شناسه محلی می‌سازد و هر بار اتصال هم یک شناسه اجرای تازه دارد، برای همین جواب‌های Drive بین دو دستگاه قاطی نمی‌شود.

شروع سریع

روی دستگاه خروجی Skirk را نصب کنید:

curl -fsSL https://raw.githubusercontent.com/ShahabSL/Skirk/main/install.sh | sh
export PATH="$HOME/.local/bin:$PATH"

یک kit بسازید:

skirk setup init --out skirk-kit --reset-google-login

setup یک لینک Google و یک کد کوتاه نشان می‌دهد. لینک را در مرورگر باز کنید، کد را وارد کنید، دسترسی Drive را تایید کنید، و ترمینال ادامه می‌دهد.

بعد exit را روشن کنید:

skirk serve-exit --config skirk-kit/exit.json

فایل skirk-kit/client.skirk همان پروفایل یک‌خطی کلاینت است. آن را برای کلاینت بفرستید.

روی کلاینت Linux:

curl -fsSL https://raw.githubusercontent.com/ShahabSL/Skirk/main/install.sh | sh
export PATH="$HOME/.local/bin:$PATH"

read -r SKIRK_CLIENT_CONFIG
# پروفایل skirk:... را paste کنید، Enter بزنید، بعد:
skirk serve-client --config "$SKIRK_CLIENT_CONFIG" --listen 127.0.0.1:18080

برای تست:

curl --socks5-hostname 127.0.0.1:18080 http://example.com/

اگر برنامه‌ای که استفاده می‌کنید گزینه socks5h دارد، همان را انتخاب کنید تا DNS هم از مسیر exit رد شود.

کلاینت‌ها

روی Linux یا سرورهای بدون محیط گرافیکی، همان CLI کافی است:

skirk serve-client --config client.skirk --listen 127.0.0.1:18080

اگر روی یک Linux همیشه از همین کلاینت استفاده می‌کنید، بهتر است یک client ID ثابت بدهید. این مقدار secret نیست؛ فقط این دستگاه را از بقیه دستگاه‌هایی که همان پروفایل را دارند جدا می‌کند:

skirk serve-client --config client.skirk --listen 127.0.0.1:18080 --client-id my-laptop

روی Windows، نسخه portable دسکتاپ را از Release دانلود کنید. برنامه همان پروفایل یک‌خطی skirk: را import می‌کند و sidecar داخلی Skirk را بالا می‌آورد. فعلا مسیر Windows proxy-first است؛ یعنی مرورگر یا برنامه را روی SOCKS5 127.0.0.1:18080 تنظیم کنید.

روی Android، برنامه Android را نصب کنید، پروفایل یک‌خطی را import کنید، حالت VPN را انتخاب کنید و Connect بزنید. Android دفعه اول اجازه VPN می‌خواهد. حالت Proxy هم هست، ولی فقط وقتی مناسب است که خود برنامه یا دستگاه دیگری در LAN بتواند SOCKS5 را مستقیم تنظیم کند.

جزئیات بیشتر در docs/clients.md آمده است.

تست در شبکه محدود

پروفایل‌های کلاینت به صورت پیش‌فرض از google_front_pinned استفاده می‌کنند؛ یعنی ترافیک Google API را از مسیری با ظاهر Google و متصل به IP ثابت Google عبور می‌دهند. exit معمولا direct است، چون خودش اینترنت عادی دارد.

پروفایل‌های لینوکس که قبل از v0.1.51 ساخته شده‌اند با آپدیت به صورت خودکار بازنویسی نمی‌شوند. kit را دوباره بسازید یا هنگام اجرای کلاینت --route-mode google_front_pinned --google-ip 216.239.38.120 را بدهید.

اگر شبکه محدود روی سیستم شما به شکل یک SOCKS محلی در دسترس است:

skirk serve-client \
  --config "$SKIRK_CLIENT_CONFIG" \
  --listen 127.0.0.1:18080 \
  --route-mode google_front_pinned \
  --upstream-proxy socks5h://127.0.0.1:11093

برای تست سرعت روی اینترنت عادی، --upstream-proxy را حذف کنید. اگر خواستید مستقیم به Google API وصل شوید:

skirk serve-client --config "$SKIRK_CLIENT_CONFIG" --listen 127.0.0.1:18080 --route-mode direct

بنچمارک و لاگ

وقتی exit روشن است، latency، throughput و مصرف تقریبی Drive API را این‌طور اندازه بگیرید:

skirk bench-live --config skirk-kit/client.skirk --samples 5

تست از مسیر شبکه محدود:

skirk bench-live \
  --config skirk-kit/client.skirk \
  --upstream-proxy socks5h://127.0.0.1:11093 \
  --route-mode google_front_pinned \
  --samples 3

برای تست حجم بالاتر:

skirk bench-live --config skirk-kit/client.skirk --bulk-url http://example.com/big.bin

لاگ‌ها در هر دقیقه تعداد عملیات Drive، quota تخمینی، خطاها، حجم پاسخ‌ها و زمان عملیات‌ها را نشان می‌دهند. اگر OAuth client خودتان را استفاده می‌کنید، Google Cloud Console منبع دقیق‌تر برای quota پروژه است.

قطع کردن و پاکسازی

در حالت عادی، runtime فایل‌های mailbox را بعد از پردازش حذف می‌کند. serve-exit هم یک janitor خودکار دارد که آبجکت‌های قدیمی مسیرهای transport mux را که بیشتر از ۲۴ ساعت مانده‌اند پاک می‌کند.

پاکسازی دستی به صورت dry-run:

skirk cleanup --config skirk-kit/exit.json --older-than 2h

حذف واقعی:

skirk cleanup --config skirk-kit/exit.json --older-than 2h --delete

برای revoke کردن OAuth token داخل config:

skirk revoke --config skirk-kit/exit.json --revoke-oauth

بعد فایل‌های ساخته‌شده را پاک کنید:

rm -rf skirk-kit

اگر پروفایل کلاینت leak شد، OAuth را revoke کنید و kit جدید بسازید. با client.skirk، client.json و exit.json مثل پسورد رفتار کنید.

امکانات پیشرفته

اگر می‌خواهید خروجی exit از یک پروکسی دیگر رد شود، مثلا WARP/wireproxy:

skirk serve-exit --config skirk-kit/exit.json --exit-proxy socks5h://127.0.0.1:40000

اگر علاوه بر SOCKS5، پروکسی HTTP/HTTPS هم می‌خواهید:

skirk serve-client \
  --config skirk-kit/client.skirk \
  --listen 127.0.0.1:18080 \
  --http-proxy-listen 127.0.0.1:18081

مسیر پایدار runtime از fresh prefix listing روی Google Drive استفاده می‌کند. مقدار --poll-ms knob اصلی latency سمت کلاینت است و مقدار پیش‌فرض/پیشنهادی 100 میلی‌ثانیه است؛ polling تهاجمی‌تر می‌تواند رقابت بیشتری روی Drive ایجاد کند.

مستندات

Extension points exported contracts — how you extend this code

BlobStore (Interface)
(no doc) [6 implementers]
internal/skirk/store.go
ObjectPutStore (Interface)
(no doc) [5 implementers]
internal/skirk/store.go
ObjectIDStore (Interface)
(no doc) [5 implementers]
internal/skirk/store.go
ObjectPutIDStore (Interface)
(no doc) [3 implementers]
internal/skirk/store.go
ObjectIDReserveStore (Interface)
(no doc) [3 implementers]
internal/skirk/store.go

Core symbols most depended-on inside this repo

Close
called by 135
cmd/skirk/exit_lock_unix.go
Get
called by 62
internal/skirk/store.go
prompt
called by 47
cmd/skirk/menu.go
key
called by 42
internal/skirk/mux.go
close
called by 36
internal/skirk/mux.go
NewMemoryStore
called by 33
internal/skirk/memory.go
promptYesNo
called by 32
cmd/skirk/menu.go
NewAccessTokenSource
called by 30
internal/skirk/config.go

Shape

Function 856
Method 471
Struct 99
Class 36
Interface 12
Enum 3
FuncType 2

Languages

Go75%
Kotlin10%
Rust9%
Python3%
TypeScript3%

Modules by API surface

internal/skirk/mux.go227 symbols
internal/skirk/tunnel_test.go214 symbols
clients/desktop/src-tauri/src/lib.rs109 symbols
internal/skirk/drive.go84 symbols
internal/skirk/tunnel.go61 symbols
cmd/skirk/main.go54 symbols
clients/android/app/src/main/java/app/skirk/client/MainActivity.kt51 symbols
cmd/skirk/setup.go41 symbols
internal/skirk/config.go40 symbols
clients/desktop/src/App.tsx40 symbols
internal/skirk/drive_test.go33 symbols
internal/skirk/store.go32 symbols

For agents

$ claude mcp add Skirk \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page