وی لس net.vless
پروتکل پراکسی ویلس: کارخواه و سرور، TCP و UDP، پیوندهای اشتراکی vless:// و اجرا روی TCP، TLS، وبسوکت یا هر جریان تونل.
واردسازی شبکه.وی لس
نام آرگومانها شناسهی خود کد است و معادل فارسی ندارد؛ گونهها، کلیدواژهها و نام بستهها با معادل فارسی نوشته میشوند.
ویلس یک پروتکل پراکسی بسیار کوچک از خانوادهی Xray و V2Ray است. کارخواه به سرور وصل میشود و یک سرآیند میفرستد که میگوید کیست (یک UUID)، چه میخواهد (یک اتصال TCP یا بستههای UDP) و به کجا (میزبان و درگاه). سرور UUID را میسنجد، با دو بایت پاسخ میدهد و از آن به بعد اتصال بار را بدون تغییر میبرد. همین. ویلس خودش هیچ رمزگذاریای ندارد. حفاظت باید از چیزی بیاید که آن را حمل میکند، و برای همین روی TLS (تی ال اس در تنظیمات انتقال شبکه) و معمولاً داخل وبسوکت پشت CDN به کار میرود.
این بسته هر دو نیمه است. شماره گیری کارخواه را از راه انتقال شبکه وصل میکند و سرآیند را میفرستد؛ پذیرش در سرور سرآیند را میخواند و با فهرستی از کاربران میسنجد. بعد خواندن و نوشتن بار را جابهجا میکنند، خواندن بسته و نوشتن بسته بستههای UDP را، و تجزیه پیوند پیوندهای اشتراکی vless:// را میخواند که برنامهها رد و بدل میکنند. به عنوان جریان، اتصال روی جریان و پذیرش روی جریان آن را به جریانهای تونل وصل میکنند، پس میتواند یک گام از زنجیره باشد یا داخل پروتکل دیگری اجرا شود. وارد کردن این بسته انتقال شبکه را هم میآورد، و برای ساختن مقدار تنظیمات و نشانی مقصد خودتان هم باید آن را وارد کنید.
روی سیم چه میگذرد
| جهت | بایتها |
|---|---|
| کارخواه به سرور، یک بار | نگارش 0، شناسهی ۱۶ بایتی کاربر، طول بلوک افزودنی (۰، یا نام جریان در یک پیام پروتوباف کوچک)، فرمان (1 TCP، 2 UDP، 3 مالتیپلکس)، درگاه، نوع نشانی و نشانی. فرمان مالتیپلکس نشانی ندارد. |
| سرور به کارخواه، یک بار | نگارش 0 و طول بلوک افزودنی (این بسته هر افزودنی را رد میکند). |
| پس از آن، TCP | بار در دو جهت. |
| پس از آن، UDP | هر بسته با طولش در دو بایت پیشوند. |
کارخواه برای فرستادن داده منتظر پاسخ سرور نمیماند. دو بایت پاسخ را اولین خواندن میخواند، و سروری که کاربر را رد کند فقط اتصال را میبندد، پس کارخواه از همانجا باخبر میشود و نه از شماره گیری.
چیزهایی که گیر میاندازند
- بدون TLS شناسهی کاربر دیده میشود و چیزی رمزگذاری نمیشود. اتصال ویلس روی TCP ساده یک تونل متنی است که جلویش یک گذرواژه دارد. از TLS استفاده کنید، یا ویلس را داخل چیزی بگذارید که رمزگذاری میکند.
- کارخواه ردشده موفقیت میبیند.
شماره گیریفقط سرآیند را میفرستد. UUID اشتباه به شکل شکست اولینخواندندیده میشود، و در سرور به شکلunknown user. - جریان باید همخوان باشد. کاربر سروری که با
کاربر جدید(id، "")ساخته شده درخواست بدون جریان را میپذیرد. درخواستی که جریانی غیر از جریان کاربر را نام ببرد رد میشود. - UDP بستههای طولدار روی همان یک اتصال است. شکل ساده است؛ قالب بستهی XUDP Xray پیاده نشده.
بستندرخواست را آزاد میکند. وقتی کارتان تمام شد، در هر دو طرف یک باربستنرا صدا بزنید؛ انتقال زیرین را هم میبندد.
سرآیند درخواست
کدگذاری درخواست و کدگشایی درخواست خود سرآیند هستند، بدون اتصال. آزمونها آنها را با بایتهای شناختهشده مقایسه میکنند و برای دیدن اینکه سرور دقیقاً چه میگیرد مفیدند. کدگشایی درخواست تعداد بایتهایی را که مصرف کرد برمیگرداند، یا ۱- وقتی بایتها ناقصاند، نگارششان اشتباه است یا فرمان ناشناخته دارند.
// زبان: فارسی
واردسازی شبکه.انتقال شبکه
واردسازی شبکه.وی لس
پایا ID := "b831381d-6324-4d53-ad4f-8cda48b30811"
تابع ریشه:
ناپایا r := وی لس.درخواست {}
r.شناسه = انتقال شبکه.تجزیه یو یو آی دی(ID)
r.فرمان = وی لس.فرمان تی سی پی
r.نشانی = انتقال شبکه.نشانی جدید("example.com"، 443)
wire := وی لس.کدگذاری درخواست(r)
سرچاپ انتقال شبکه.به هگزا(wire)
سرچاپ wire.طول، "بایت: نگارش، ۱۶ بایت شناسه، ۰ بایت افزودنی، فرمان، درگاه، نوع نشانی، طول، نام"
ناپایا back := وی لس.درخواست {}
used := وی لس.کدگشایی درخواست(wire، back)
سرچاپ used برابر wire.طول، back.نشانی.میزبان، back.نشانی.درگاه، back.فرمان، انتقال شبکه.قالب یو یو آی دی(back.شناسه) برابر ID
cut := انتقال شبکه.از هگزا("00b831381d63244d53ad4f8cda48b3081100" + "0101bb020b6578616d")
سرچاپ "سرآیند ناقص کدگشایی میشود به"، وی لس.کدگشایی درخواست(cut، back)
odd := انتقال شبکه.از هگزا("01b831381d63244d53ad4f8cda48b3081100" + "0101bb020b6578616d706c652e636f6d")
سرچاپ "نگارش اشتباه کدگشایی میشود به"، وی لس.کدگشایی درخواست(odd، back)
پایانپیوندهای اشتراکی
برنامهها یک سرور را به شکل یک متن vless://uuid@host:port?query#name به اشتراک میگذارند. تجزیه پیوند آن را در یک پیوند میخواند: اول معتبر را ببینید و اگر نادرست بود خطا را بخوانید. تنظیمات پیوند پیوند را به تنظیمات انتقال شبکه تبدیل میکند (پسوند ?ed=2048 مسیر به داده زودهنگام میرود)، قالب پیوند به متن برمیگردد و شماره گیری پیوند کل اتصال را انجام میدهد. تجزیهگر چیزی را که بسته نمیتواند انجام دهد با پیامی که دلیل را میگوید رد میکند: security=reality، type=grpc، type=h2، type=xhttp، encryption غیر از none و UUID بد.
// زبان: فارسی
واردسازی شبکه.وی لس
تابع ریشه:
text := "vless://b831381d-6324-4d53-ad4f-8cda48b30811@cdn.example.com:443?encryption=none&security=tls&sni=front.example.net&alpn=http%2F1.1&fp=chrome&type=ws&host=vpn.example.org&path=%2Fws-8f3a%3Fed%3D2048#My%20Server"
l := وی لس.تجزیه پیوند(text)
سرچاپ l.معتبر، l.میزبان، l.درگاه، l.برچسب
سرچاپ l.امنیت، l.شبکه، l.نام سرور، l.سربرگ میزبان، l.مسیر
s := وی لس.تنظیمات پیوند(l)
سرچاپ s.شبکه، s.تی ال اس، s.نام سرور، s.سربرگ میزبان، s.مسیر، s.داده زودهنگام
again := وی لس.تجزیه پیوند(وی لس.قالب پیوند(l))
سرچاپ "رفتوبرگشت مسیر را نگه میدارد:"، again.مسیر برابر l.مسیر
سرچاپ وی لس.تجزیه پیوند("vless://b831381d-6324-4d53-ad4f-8cda48b30811@h:443?security=quic").خطا
سرچاپ وی لس.تجزیه پیوند("vless://b831381d-6324-4d53-ad4f-8cda48b30811@h:443?type=kcp").خطا
سرچاپ وی لس.تجزیه پیوند("vless://b831381d-6324-4d53-ad4f-8cda48b30811@h:443?encryption=aes").خطا
سرچاپ وی لس.تجزیه پیوند("vless://oops@h:443").خطا
پایانشروع سریع: کارخواه و سرور روی TCP
سرور با انتقال شبکه.شنود گوش میدهد، با انتقال شبکه.پذیرش میپذیرد و اتصال را با فهرست کاربرانش به وی لس.پذیرش میدهد. کارخواه با وی لس.شماره گیری وصل میشود. نشانی مقصد در سرآیند همان جایی است که سرور باید بعداً به آن وصل شود؛ این سرور پژواک فقط آن را چاپ میکند. در سرور واقعی به آن مقصد وصل میشوید (با تی سی پی یا یک شمارهگیر تونل) و بایتها را در دو جهت کپی میکنید.
// زبان: فارسی
واردسازی رشته
واردسازی حافظه
واردسازی همگام سازی
واردسازی شبکه.انتقال شبکه
واردسازی شبکه.وی لس
پایا ID := "b831381d-6324-4d53-ad4f-8cda48b30811"
ناپایا port := 0
ناپایا ready := همگام سازی.گروه انتظار جدید()
ناپایا seen := ""
تابع server():
l := انتقال شبکه.شنود(0، انتقال شبکه.تنظیمات {})
port = انتقال شبکه.درگاه شنونده(l)
همگام سازی.اتمام(ready)
ناپایا users := وکتور {} برگردان وکتور<وی لس.کاربر>
users.بیفزا(وی لس.کاربر جدید(ID، ""))
ناپایا c := وی لس.پذیرش(انتقال شبکه.پذیرش(l)، users)
اگر c.معتبر:
seen = c.درخواست.نشانی.میزبان + ":" + رشته.از عدد(c.درخواست.نشانی.درگاه برگردان صحیح۶۴)
buf := حافظه.تخصیص(4096 برگردان طبیعی۶۴)
n := وی لس.خواندن(c، buf، 4096)
وی لس.نوشتن(c، buf، n)
حافظه.آزادسازی(buf)
وگرنه:
seen = "refused: " + c.خطا
پایان
وی لس.بستن(c)
انتقال شبکه.بستن شنونده(l)
پایان
تابع ریشه:
همگام سازی.افزودن(ready، 1 برگردان صحیح۶۴)
t := نخساز(server)
همگام سازی.انتظار(ready)
target := انتقال شبکه.نشانی جدید("example.com"، 443)
ناپایا c := وی لس.شماره گیری("127.0.0.1"، port، انتقال شبکه.تنظیمات {}، ID، ""، وی لس.فرمان تی سی پی، target)
ناپایا msg := انتقال شبکه.از رشته("hello through vless")
وی لس.نوشتن(c، msg.نشانگر، msg.طول)
buf := حافظه.تخصیص(4096 برگردان طبیعی۶۴)
n := وی لس.خواندن(c، buf، 4096)
سرچاپ (buf برگردان رشته).زیررشته(0، n)
حافظه.آزادسازی(buf)
انتقال شبکه.آزادسازی بایتها(msg)
وی لس.بستن(c)
نخپیوند(t)
سرچاپ "سرور مقصد را دید"، seen
پایانکاربری که سرور نمیشناسد
کارخواه خودش نمیتواند بفهمد. سرور unknown user میبیند، اتصال را میبندد و اولین خواندن کارخواه شکست میخورد.
// زبان: فارسی
واردسازی همگام سازی
واردسازی شبکه.انتقال شبکه
واردسازی شبکه.وی لس
پایا GOOD := "b831381d-6324-4d53-ad4f-8cda48b30811"
پایا OTHER := "5783a3e7-e373-51cd-8642-c83782b807c5"
ناپایا port := 0
ناپایا ready := همگام سازی.گروه انتظار جدید()
ناپایا verdict := ""
تابع server():
l := انتقال شبکه.شنود(0، انتقال شبکه.تنظیمات {})
port = انتقال شبکه.درگاه شنونده(l)
همگام سازی.اتمام(ready)
ناپایا users := وکتور {} برگردان وکتور<وی لس.کاربر>
users.بیفزا(وی لس.کاربر جدید(GOOD، ""))
ناپایا c := وی لس.پذیرش(انتقال شبکه.پذیرش(l)، users)
verdict = c.معتبر ? "accepted " + c.کاربر : "refused: " + c.خطا
وی لس.بستن(c)
انتقال شبکه.بستن شنونده(l)
پایان
تابع ریشه:
همگام سازی.افزودن(ready، 1 برگردان صحیح۶۴)
t := نخساز(server)
همگام سازی.انتظار(ready)
ناپایا c := وی لس.شماره گیری("127.0.0.1"، port، انتقال شبکه.تنظیمات {}، OTHER، ""، وی لس.فرمان تی سی پی، انتقال شبکه.نشانی جدید("example.com"، 80))
سرچاپ "سمت کارخواه تا وقتی نخوانده سالم به نظر میرسد:"، c.معتبر
نخپیوند(t)
سرچاپ verdict
وی لس.بستن(c)
پایانبستههای UDP
با فرمان یو دی پی و مقصد بسته (اینجا یک سرور دیاناس) شمارهگیری کنید. هر نوشتن بسته یک بسته میفرستد و هر خواندن بسته یک بستهی کامل را در بافر برمیگرداند؛ یک بسته حداکثر ۶۵۵۳۵ بایت است. بستهی بیطول خالی خوانده میشود.
// زبان: فارسی
واردسازی رشته
واردسازی همگام سازی
واردسازی شبکه.انتقال شبکه
واردسازی شبکه.وی لس
پایا ID := "b831381d-6324-4d53-ad4f-8cda48b30811"
ناپایا port := 0
ناپایا ready := همگام سازی.گروه انتظار جدید()
تابع server():
l := انتقال شبکه.شنود(0، انتقال شبکه.تنظیمات {})
port = انتقال شبکه.درگاه شنونده(l)
همگام سازی.اتمام(ready)
ناپایا users := وکتور {} برگردان وکتور<وی لس.کاربر>
users.بیفزا(وی لس.کاربر جدید(ID، ""))
ناپایا c := وی لس.پذیرش(انتقال شبکه.پذیرش(l)، users)
تا c.معتبر:
ناپایا p := انتقال شبکه.بایتهای جدید(64)
اگر وارونه وی لس.خواندن بسته(c، p):
انتقال شبکه.آزادسازی بایتها(p)
بشکن
پایان
وی لس.نوشتن بسته(c، p.نشانگر، p.طول)
انتقال شبکه.آزادسازی بایتها(p)
پایان
وی لس.بستن(c)
انتقال شبکه.بستن شنونده(l)
پایان
تابع ریشه:
همگام سازی.افزودن(ready، 1 برگردان صحیح۶۴)
t := نخساز(server)
همگام سازی.انتظار(ready)
dns := انتقال شبکه.نشانی جدید("8.8.8.8"، 53)
ناپایا c := وی لس.شماره گیری("127.0.0.1"، port، انتقال شبکه.تنظیمات {}، ID، ""، وی لس.فرمان یو دی پی، dns)
تکرار 3 در i:
ناپایا msg := انتقال شبکه.از رشته("datagram " + رشته.از عدد(i برگردان صحیح۶۴))
وی لس.نوشتن بسته(c، msg.نشانگر، msg.طول)
ناپایا back := انتقال شبکه.بایتهای جدید(64)
وی لس.خواندن بسته(c، back)
سرچاپ back.طول، (back.نشانگر برگردان رشته).زیررشته(0، back.طول)
انتقال شبکه.آزادسازی بایتها(back)
انتقال شبکه.آزادسازی بایتها(msg)
پایان
وی لس.بستن(c)
نخپیوند(t)
پایانداخل یک جریان دیگر
اتصال روی جریان و پذیرش روی جریان پروتکل را بهجای اتصال شبکه روی هر tunnel.Stream اجرا میکنند و به عنوان جریان نتیجه را دوباره به جریان تبدیل میکند. زنجیره اینطور ساخته میشود: خروجی یک پروتکل حامل بعدی است. مثال هر دو سر را روی یک لولهی درونحافظه اجرا میکند.
// زبان: فارسی
واردسازی حافظه
واردسازی همگام سازی
واردسازی شبکه.انتقال شبکه
واردسازی شبکه.تونل
واردسازی شبکه.وی لس
پایا ID := "b831381d-6324-4d53-ad4f-8cda48b30811"
ناپایا pipe := تونل.لوله جدید()
ناپایا done := همگام سازی.گروه انتظار جدید()
ناپایا seen := ""
تابع server():
ناپایا users := وکتور {} برگردان وکتور<وی لس.کاربر>
users.بیفزا(وی لس.کاربر جدید(ID، ""))
c := وی لس.پذیرش روی جریان(تونل.سر دوم لوله(pipe)، users)
seen = c.درخواست.نشانی.میزبان
s := وی لس.به عنوان جریان(c)
buf := حافظه.تخصیص(256 برگردان طبیعی۶۴)
n := s.خواندن بایت(buf، 256)
s.نوشتن بایت(buf، n)
حافظه.آزادسازی(buf)
s.بستن()
همگام سازی.اتمام(done)
پایان
تابع ریشه:
همگام سازی.افزودن(done، 1 برگردان صحیح۶۴)
_t := نخساز(server)
c := وی لس.اتصال روی جریان(تونل.سر اول لوله(pipe)، ID، ""، وی لس.فرمان تی سی پی، انتقال شبکه.نشانی جدید("inner.example"، 443))
s := وی لس.به عنوان جریان(c)
s.نوشتن("hello over a pipe")
buf := حافظه.تخصیص صفرشده(256 برگردان طبیعی۶۴)
n := s.خواندن بایت(buf، 256)
سرچاپ (buf برگردان رشته).زیررشته(0، n)
حافظه.آزادسازی(buf)
s.بستن()
همگام سازی.انتظار(done)
سرچاپ "سرور دید"، seen
پایانویلس روی وبسوکت و TLS پشت CDN
رایجترین استقرار. گامهای CDN را از صفحهی انتقال شبکه انجام دهید: دامنهی پراکسیشده، مسیر محرمانهی وبسوکت، TLS به CDN با نام جلویی در نام سرور و دامنهی خودتان در سربرگ میزبان. آنوقت پیوند اشتراکی همهی اینها را دارد و یک فراخوانی وصل میکند:
// زبان: فارسی
واردسازی شبکه.انتقال شبکه
واردسازی شبکه.وی لس
پایا SHARE := "vless://b831381d-6324-4d53-ad4f-8cda48b30811@front.example.net:443?encryption=none&security=tls&sni=front.example.net&alpn=http%2F1.1&type=ws&host=vpn.example.org&path=%2Fws-8f3a#cdn"
تابع ریشه:
l := وی لس.تجزیه پیوند(SHARE)
اگر وارونه l.معتبر:
سرچاپ "پیوند نادرست:"، l.خطا
برگشت
پایان
target := انتقال شبکه.نشانی جدید("example.com"، 80)
ناپایا c := وی لس.شماره گیری پیوند(l، وی لس.فرمان تی سی پی، target)
اگر وارونه c.معتبر:
سرچاپ "اتصال ممکن نشد:"، c.خطا
برگشت
پایان
ناپایا req := انتقال شبکه.از رشته("HEAD / HTTP/1.0\r\nHost: example.com\r\n\r\n")
وی لس.نوشتن(c، req.نشانگر، req.طول)
انتقال شبکه.آزادسازی بایتها(req)
وی لس.بستن(c)
پایاندر سرور با شبکه = "ws"، همان مسیر و سربرگ میزبان گوش دهید، با تی ال اس خاموش وقتی CDN یا پراکسی معکوس شما TLS را تمام میکند (و روشن، با گواهی و کلید، وقتی نه). اتصالها را با انتقال شبکه.پذیرش خام بپذیرید و برای هر کدام در یک نخ کارگر انتقال شبکه.ارتقا و بعد وی لس.پذیرش را اجرا کنید.
دو نکته. اول، ویلس رمزگذاری ندارد (encryption=none)، پس CDN میتواند ترافیک بین دو پای TLS خودش را بخواند. برای CDNهای دشمن از وی مس با امنیت ای ای اس۱۲۸ جی سی ام استفاده کنید که خود بار را رمزگذاری میکند. دوم، اگر گام اول بهخاطر نام سرور TLS مسدود است، گزینههای تکهتکه کردن انتقال شبکه را بگذارید؛ مثل هر شمارهگیری دیگر روی این هم اثر میکنند.
محدودیتها
- ویژن فقط لایهی لایهگذاری است. با جریان
xtls-rprx-vision۸ نوشتن اول هر جهت در قابهای ویژن (شناسهی کاربر، فرمان، محتوا و لایهی تصادفی، مثل Xray) پیچیده میشود و آخرین آنها به همتا میگوید لایهگذاری تمام شد. کارخواه و کارساز ما با هم کار میکنند و قاببندی از Xray پیروی میکند؛ گام «کپی مستقیم» که پس از دستدهی TLS 1.3 درونی TLS بیرونی را دور میزند پیاده نشده و داده در اتصال بیرونی میماند. همتایی که فرمان مستقیم بفرستد پایان لایهگذاریاش شمرده میشود. ویژن فقط برایفرمان تی سی پیاست و با سرور واقعی Xray اجرا نشده. - XHTTP و کوییک پشتیبانی نمیشود و
تجزیه پیوندپیوندهایشان را رد میکند. انتقالهاtcp،ws،httpupgradeوgrpcهستند (در پیوندserviceNameوmode=gun|multi) با امنیتnone،tlsیاreality(pbk،sid،spx،fp). - چندپلکسی همان Mux.Cool است. با
فرمان مالتی پلکسوصل شوید وچندگانه ساز کارخواهرا صدا بزنید؛ در سرور بسنجید کهپذیرشدرخواستی بافرمان مالتی پلکسداده وچندگانه ساز کارسازرا صدا بزنید. نشستها ازnet.transportمیآیند (باز کردن نشست،پذیرش نشست). اثر انگشتیک پیوند فقط اطلاعاتی است. ذخیره و دوباره نوشته میشود، اما دستدهی TLS را عوض نمیکند.- آزمون همکنشپذیری زنده با Xray یا V2Ray انجام نشده. سرآیند با بردارهای بایتی ثابت سنجیده شده و کارخواه و سرور روی TCP، TLS، وبسوکت و ارتقای HTTP با هم آزموده شدهاند، اما با یک ساخت واقعی Xray نه.
- بازگشتهای سرور (fallback) نیست. اتصالی که ویلس نباشد یا کاربر ناشناخته داشته باشد بسته میشود؛ مثل آنچه Xray میکند به یک وبسرور داده نمیشود.
- دادهی زودهنگام به
شماره گیری با داده زودهنگامنیاز دارد.تنظیمات پیوندداده زودهنگامرا از?ed=میگذارد، اماشماره گیریوشماره گیری پیوندهیچ باری زودهنگام نمیفرستند.
گونهها
ویژن Vision
ساختار ویژن| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| شناسه | uuid | انتقال شبکه.بایتها | شناسهی کاربر. |
| نوشتن ها | writes | صحیح = 0 | چند قاب لایهدار این سمت فرستاده. |
| نوشتن تمام | write_done | منطقی = نادرست | درست وقتی این سمت لایهگذاری را پایان داده. |
| شناسه فرستاده شد | uuid_sent | منطقی = نادرست | درست پس از آنکه اولین قاب شناسهی کاربر را برد. |
| خواندن تمام | read_done | منطقی = نادرست | درست وقتی همتا لایهگذاری را پایان داده. |
| خواندن خام | read_raw | منطقی = نادرست | درست وقتی همتا ویژن نمیگوید و بایتها بیتغییر میگذرند. |
| آغاز خواندن | read_init | منطقی = درست | درست تا وقتی اولین قاب با شناسهی کاربر سنجیده نشده. |
| باقی سرآیند | head_left | صحیح = 0 | بایتهای سرآیند قاب بعدی که هنوز خوانده نشده. |
| باقی محتوا | content_left | صحیح = 0 | بایتهای محتوای قاب جاری که هنوز خوانده نشده. |
| باقی لایه | pad_left | صحیح = 0 | بایتهای لایهی قاب جاری که هنوز باید رد شود. |
| فرمان | command | صحیح = 0 | فرمان قابی که خوانده میشود. |
| تغییر کرد | switched | منطقی = نادرست | پس از فرمان مستقیم، وقتی خواندن به سوکت خام سپرده شد درست است. |
| معلق | pending | انتقال شبکه.بایتها | بایتهای دریافتی که هنوز لایهشان برداشته نشده. |
| آماده | ready | انتقال شبکه.بایتها | بایتهای بدون لایه که منتظر خوانندهاند. |
درخواست Request
ساختار درخواست| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| شناسه | uuid | انتقال شبکه.بایتها | شناسهی ۱۶ بایتی کاربر. |
| جریان | flow | رشته = "" | نام جریان، خالی یعنی هیچ. |
| فرمان | command | صحیح = 1 | فرمان تی سی پی، فرمان یو دی پی یا فرمان مالتی پلکس. |
| نشانی | addr | انتقال شبکه.نشانی | نشانی مقصد. فرمان مالتی پلکس از آن استفاده نمیکند. |
کاربر User
ساختار کاربر| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| شناسه | id | رشته = "" | شناسهی کاربر به صورت متن. |
| بایت های شناسه | uuid | انتقال شبکه.بایتها | شناسهی کاربر به صورت ۱۶ بایت. |
| جریان | flow | رشته = "" | جریانی که کاربر میتواند نام ببرد. خالی فقط درخواست بدون جریان را میپذیرد، و درخواست با جریان خالی همیشه پذیرفته میشود. |
پیوند Link
ساختار پیوندvless:// تجزیهشده.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| معتبر | ok | منطقی = نادرست | پیوند فهمیده شد و فقط از چیزی استفاده میکند که این بسته پشتیبانی میکند. |
| خطا | err | رشته = "" | دلیل ردشدن پیوند، وقتی معتبر درست است خالی. |
| شناسه | uuid | رشته = "" | متن شناسهی کاربر. |
| میزبان | host | رشته = "" | میزبان سرور یا نشانی IP. IP نسخه ۶ در پیوند داخل کروشه نوشته میشود. |
| درگاه | port | صحیح = 443 | درگاه سرور. پیشفرض ۴۴۳ است. |
| برچسب | remark | رشته = "" | نام بعد از #، رمزگشاییشده از درصد. |
| رمزگذاری | encryption | رشته = "none" | مقدار encryption. فقط none پذیرفته میشود. |
| جریان | flow | رشته = "" | مقدار flow، وقتی نباشد خالی. |
| امنیت | security | رشته = "none" | none، tls یا reality. |
| نام سرور | sni | رشته = "" | نام سرور TLS. وقتی sni نباشد کلید peer خوانده میشود. |
| الپن | alpn | رشته = "" | مقدار ALPN، رمزگشاییشده از درصد. |
| اثر انگشت | fingerprint | رشته = "" | مقدار fp. ذخیره و دوباره نوشته میشود و دستدهی را عوض نمیکند. |
| شبکه | network | رشته = "tcp" | tcp، ws، httpupgrade یا grpc. مقدارهای دیگر، مثل h2، رد میشوند. |
| سربرگ میزبان | host_header | رشته = "" | مقدار host، سرآیند Host درخواست وبسوکت. |
| مسیر | path | رشته = "" | مقدار path، رمزگشاییشده از درصد، با پسوند ?ed= اگر داشته باشد. |
| اجازه ناامن | allow_insecure | منطقی = نادرست | وقتی پیوند allowInsecure=1، insecure=1 یا واژهی true را بگوید درست است. |
| ریلیتی | reality | ریالیتی.تنظیمات | پارامترهای ریالیتی پیوند (pbk، sid، spx، fp) وقتی امنیت reality است. |
| نام سرویس | service_name | رشته = "" | نام سرویس gRPC از بخش serviceName پرسمان. |
| حالت جی آر پی سی | grpc_mode | رشته = "gun" | gun یا multi از بخش mode پرسمان. |
اتصال Conn
ساختار اتصال| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| انتقال | t | انتقال شبکه.اتصال | اتصال انتقال شبکهی زیرین. |
| کارخواه | client | منطقی = نادرست | در سمت کارخواه درست است. |
| معتبر | ok | منطقی = نادرست | وقتی گام دستدهی موفق بود و اتصال قابل استفاده است درست است. |
| خطا | err | رشته = "" | دلیل شکست، و در غیر این صورت خالی. |
| درخواست | req | درخواست | سرآیند درخواست: در سرور آنچه کارخواه فرستاد، در کارخواه آنچه خودش فرستاد. |
| کاربر | user | رشته = "" | در سرور: شناسهی کاربری که جور شد. |
| پاسخ معلق | resp_pending | منطقی = نادرست | درونی: دو بایت پاسخ سرور هنوز خوانده نشده. |
| بسته شده | closed | منطقی = نادرست | درونی: بستن صدا زده شده. |
| ویژن روشن | vis_on | منطقی = نادرست | درست وقتی اتصال جریان ویژن را اجرا میکند. |
| ویژن | vis | ویژن | وضعیت لایهگذاری ویژن وقتی جریان ویژن است. |
پایاها و متغیرها
جریان ویژن FlowVision
پایا جریان ویژن: رشته = "xtls-rprx-vision"xtls-rprx-vision.فرمان ادامه ویژن VisionContinue
پایا فرمان ادامه ویژن: صحیح۳۲ = 0فرمان خاتمه ویژن VisionEnd
پایا فرمان خاتمه ویژن: صحیح۳۲ = 1فرمان مستقیم ویژن VisionDirect
پایا فرمان مستقیم ویژن: صحیح۳۲ = 2بسته های لایه گذاری شده ویژن VisionPaddedPackets
پایا بسته های لایه گذاری شده ویژن: صحیح۳۲ = 8فرمانها Cmd…
فرمان تی سی پی اتصال TCP به مقصد باز میکند، فرمان یو دی پی بستههای UDP میبرد، فرمان مالتی پلکس فرمان چندپلکسی است که سرآیند میتواند حمل کند اما چیزی پیادهاش نکرده.| نام | انگلیسی | مقدار |
|---|---|---|
| فرمان تی سی پی | CmdTCP | 1 |
| فرمان یو دی پی | CmdUDP | 2 |
| فرمان مالتی پلکس | CmdMux | 3 |
تابعها
به عنوان جریان AsStream
تابع به عنوان جریان(c: اتصال): dyn تونل.جریانtunnel.Stream میپیچد تا بتواند حامل پروتکل دیگری باشد یا به کد تونل داده شود.اتصال روی جریان DialOver
تابع اتصال روی جریان(s: dyn تونل.جریان، uuid: رشته، flow: رشته، command: صحیح، target: انتقال شبکه.نشانی): اتصالپذیرش روی جریان AcceptOver
تابع پذیرش روی جریان(s: dyn تونل.جریان، users: وکتور<کاربر>): اتصالچندگانه ساز کارخواه MuxClient
تابع چندگانه ساز کارخواه(c: اتصال): انتقال شبکه.چندگانه سازCmdMux ساخته شده راه میاندازد.چندگانه ساز کارساز MuxServer
تابع چندگانه ساز کارساز(c: اتصال): انتقال شبکه.چندگانه سازCmdMux است راه میاندازد.ویژن جدید NewVision
تابع ویژن جدید(uuid: انتقال شبکه.بایتها): ویژنآزادسازی ویژن FreeVision
تابع آزادسازی ویژن(v &: ویژن)لایه گذاری ویژن VisionPad
تابع لایه گذاری ویژن(v &: ویژن، p: تهی*، n: صحیح، command: صحیح، long_padding: منطقی): انتقال شبکه.بایتهابرداشتن لایه ویژن VisionUnpad
تابع برداشتن لایه ویژن(v &: ویژن، p: تهی*، n: صحیح، out &: انتقال شبکه.بایتها): منطقیout میافزاید. نادرست در شکست حافظه.نوشتن ویژن VisionWrite
تابع نوشتن ویژن(t &: انتقال شبکه.اتصال، v &: ویژن، p: تهی*، n: صحیح): منطقیخواندن ویژن VisionRead
تابع خواندن ویژن(t &: انتقال شبکه.اتصال، v &: ویژن، buf: تهی*، max: صحیح): صحیحکدگذاری درخواست EncodeRequest
تابع کدگذاری درخواست(r: درخواست): انتقال شبکه.بایتهاtransport.FreeBytes آزاد کنید.کدگشایی درخواست DecodeRequest
تابع کدگشایی درخواست(b: انتقال شبکه.بایتها، r &: درخواست): صحیحخواندن درخواست ReadRequest
تابع خواندن درخواست(t &: انتقال شبکه.اتصال، r &: درخواست): منطقیکاربر جدید NewUser
تابع کاربر جدید(uuid: رشته، flow: رشته): کاربرکارخواه Client
تابع کارخواه(t: انتقال شبکه.اتصال، uuid: رشته، flow: رشته، command: صحیح، addr: انتقال شبکه.نشانی): اتصالمعتبر نادرست است.شماره گیری Dial
تابع شماره گیری(host: رشته، port: صحیح، s: انتقال شبکه.تنظیمات، uuid: رشته، flow: رشته، command: صحیح، target: انتقال شبکه.نشانی): اتصالtransport.Dial و تنظیمات دادهشده وصل میشود و بعد سرآیند را میفرستد. پاسخ هنوز خوانده نمیشود: کاربر ردشده در اولین خواندن دیده میشود.پذیرش Accept
تابع پذیرش(t: انتقال شبکه.اتصال، users: وکتور<کاربر>): اتصالمعتبر نادرست است، خطا دلیل را میگوید (unknown user، bad request header، unsupported flow) و انتقال بسته میشود.خواندن Read
تابع خواندن(c &: اتصال، buf: تهی*، max: صحیح): صحیحنوشتن Write
تابع نوشتن(c &: اتصال، p: تهی*، n: صحیح): منطقیخواندن بسته ReadPacket
تابع خواندن بسته(c &: اتصال، out &: انتقال شبکه.بایتها): منطقینوشتن بسته WritePacket
تابع نوشتن بسته(c &: اتصال، p: تهی*، n: صحیح): منطقیبستن Close
تابع بستن(c &: اتصال)تجزیه پیوند ParseLink
تابع تجزیه پیوند(link: رشته): پیوندvless:// را تجزیه میکند. معتبر را ببینید؛ خطا میگوید چه چیز اشتباه یا پشتیبانینشده بود.قالب پیوند FormatLink
تابع قالب پیوند(l: پیوند): رشتهتنظیمات پیوند LinkSettings
تابع تنظیمات پیوند(l: پیوند): انتقال شبکه.تنظیماتtransport.Settingsای که با پیوند جور است: شبکه، TLS، نامها، مسیر و اندازهی دادهی زودهنگام از ?ed=.شماره گیری پیوند DialLink
تابع شماره گیری پیوند(l: پیوند، command: صحیح، target: انتقال شبکه.نشانی): اتصال