تروجان net.trojan
پروتکل تروجان: کارخواه و کارساز TLS که مثل یک سایت HTTPS معمولی دیده میشوند، یک وبسایت جایگزین برای همهی کسانی که کارخواه نیستند، حالت وبسوکت، UDP و اتصالدهندهی زنجیرهی پراکسی.
واردسازی شبکه.تروجان
نام آرگومانها شناسهی خود کد است و معادل فارسی ندارد؛ گونهها، کلیدواژهها و نام بستهها با معادل فارسی نوشته میشوند.
تروجان پروتکل پراکسیای است که طوری ساخته شده که چیز خاصی از آن به چشم نیاید. کارخواه یک اتصال TLS معمولی به یک کارساز باز میکند و یک سطر میفرستد که درهم گذرواژه و مقصد خواستهاش را دارد؛ اگر درهم درست باشد کارساز به آنجا وصل میشود و بایتها را رله میکند. اگر بایتهای نخست درخواست معتبر تروجان نباشند، کارساز شکایتی نمیکند. اتصال را با همهی بایتهایش به یک وبسایت معمولی میدهد، پس بازدیدکننده یا کاوشگر از یک سایت واقعی یک صفحهی واقعی میگیرد. این بسته هر دو سمت را دارد: شماره گیری کارخواه است و سرویسدهی کارساز را راه میاندازد. به تونل هم وصل میشود، به شکل پذیرنده تروجان و اتصالدهنده برای مسیریابی و زنجیرهی پراکسی. برای دیدن اینکه تکهها در یک برنامه چگونه کنار هم مینشینند، ساختن برنامهای به سبک v2ray یا VPN را بخوانید.
ایدههای اصلی:
- گذرواژه هرگز فرستاده نمیشود. آنچه روی سیم میرود درهم SHA-224 آن است (
درهم گذرواژه) به شکل ۵۶ نویسهی هگز. کارساز درهمها را نگه میدارد (افزودن گذرواژه،افزودن درهم گذرواژه). - TLS پنهان میکند. درخواست تروجان درون جریان TLS است و کارسازی با گواهی معتبر و یک وبسایت واقعی در
درگاه جایگزینمثل هر سایت HTTPS دیگر دیده میشود. - شکست بیصدا است. گذرواژهی غلط، یک مرورگر، یک پویشگر: همه سایت جایگزین را میگیرند.
جایگزینشدهآنها را میشمارد. پیونداتصالی روی TCP، TLS یا وبسوکت است.شماره گیرییکی برمیگرداند؛ باخواندن پیوندونوشتن متن پیوندبخوانید و بنویسید و بابستن پیوندببندید.با وبسوکتتروجان را درون یک وبسوکت میبرد تا CDN یا پراکسی معکوس بتواند جلویش بنشیند.شماره گیری یو دی پییک نشست UDP باز میکند که هر بسته مقصد خودش را نام میبرد (ارسال یو دی پی،خواندن بسته یو دی پی).
چیزهایی که آدم را گیر میاندازد:
- از TLS با گواهی واقعی استفاده کنید.
سرویسدهیکارساز واقعی است.سرویسدهی بدون رمزوسرویسدهی وبسوکتTLS ندارند: درهم گذرواژه و همهی ترافیک برای هر کس سر راه خواناست و درهم قابل بازپخش است. آنها را روی loopback، در آزمون، یا پشت پراکسی معکوسی که TLS را تمام میکند به کار ببرید.ناامنبررسی گواهی را خاموش میکند؛ بیرون از آزمون هرگز. - سایت جایگزین باید واقعی باشد. جایگزینی که نباشد، خالی باشد یا آشکارا ساختگی باشد کارساز را بهآسانی قابل شناسایی میکند. بدون
درگاه جایگزینکارخواه ناموفق فقط قطع میشود که خودش نشانه است. محتوای واقعی بدهید، روی همان دستگاه و با همان نام گواهی. - حالت وبسوکت جایگزین ندارد. کارخواه ناموفق
سرویسدهی وبسوکتفقط بسته میشود. بگذارید پراکسی معکوسِ جلو تصمیم بگیرد دنیای بیرون چه ببیند. - حفاظت در برابر بازپخش نیست. درخواست nonce ندارد، پس هر کس بتواند آن را بخواند (اتصال ساده، بررسی گواهی خراب) میتواند بازپخشش کند. سانسورشکن یک
سانسورشکن.حافظه تکرارو یکسانسورشکن.نگهبان کاوشدارد، ولی این بسته خودش از آنها استفاده نمیکند. - کارساز کجا گوش میدهد.
سرویسدهی(حالت تی ال اس) روی هر رابط IPv4 گوش میدهد چون چهرهی عمومی کارساز است؛ پس گذرواژههای طولانی و تصادفی بگذارید.سرویسدهی بدون رمزوسرویسدهی وبسوکتمگرbind_hostچیز دیگری بگوید روی127.0.0.1گوش میدهند؛0.0.0.0را فقط وقتی بدهید که چیزی زیر کنترل شما از بیرون به آنها میرسد. - گذرواژه و درهمش همارزند. هر کس درهم را داشته باشد میتواند احراز شود. پیکربندی را مثل پروندهی گذرواژه نگه دارید.
پیوندیکتونل.جریاننیست.پیوندنوع اتصال خود بسته است. برایتونل.زنجیرهو مسیریابی از سازگارکنندههایاتصالدهندهوپذیرنده تروجاناستفاده کنید که روی جریانها کار میکنند.
یک کارساز، یک کارخواه و یک جایگزین
این برنامه همهی ایده را روی loopback و بدون گواهی اجرا میکند: یک کارساز تروجان جلوی یک سرور پژواک، با یک وبسرور به عنوان جایگزین. کارخواه واقعی پژواک را میگیرد؛ هر کس دیگری ترافیک وب معمولی به همان درگاه میفرستد و صفحهی وب را میگیرد. در کار واقعی سرویسدهی همین رفتار را با TLS جلویش اضافه میکند.
// زبان: فارسی
واردسازی حافظه
واردسازی شبکه.تی سی پی
واردسازی شبکه.تروجان
واردسازی همگام سازی
ناپایا echo_port := 0
ناپایا web_port := 0
ناپایا web_seen := ""
ناپایا ready := همگام سازی.گروه انتظار جدید()
تابع echo_server():
srv := تی سی پی.پیوند(0)
echo_port = تی سی پی.درگاه(srv)
همگام سازی.اتمام(ready)
تا درست:
c := تی سی پی.پذیرش(srv)
تا درست:
data := تی سی پی.خواندن(c، 4096)
اگر data.طول() برابر 0:
بشکن
پایان
تی سی پی.نوشتن(c، "echo:" + data)
پایان
تی سی پی.بستن(c)
پایان
پایان
تابع web_server():
srv := تی سی پی.پیوند(0)
web_port = تی سی پی.درگاه(srv)
همگام سازی.اتمام(ready)
تا درست:
c := تی سی پی.پذیرش(srv)
web_seen = تی سی پی.خواندن(c، 4096)
تی سی پی.نوشتن(c، "HTTP/1.1 200 OK\r\nContent-Length: 12\r\nConnection: close\r\n\r\nhello probes")
تی سی پی.بستن(c)
پایان
پایان
تابع start_servers():
همگام سازی.افزودن(ready، 2 برگردان صحیح۶۴)
_a := نخساز(echo_server)
_b := نخساز(web_server)
همگام سازی.انتظار(ready)
پایان
تابع text_of(p: تهی*، n: صحیح): رشته:
buf := حافظه.تخصیص((n + 1) برگردان طبیعی۶۴)
حافظه.کپی(buf، p، n برگردان طبیعی۶۴)
(buf برگردان طبیعی۸*)[n] = 0 برگردان طبیعی۸
برگشت buf برگردان رشته
پایان
تابع read_text(l &: تروجان.پیوند، want: صحیح): رشته:
buf := حافظه.تخصیص(8192 برگردان طبیعی۶۴)
دیرکن حافظه.آزادسازی(buf)
ناپایا out := ""
تا out.طول() کوچکتر want:
n := تروجان.خواندن پیوند(l، buf، 8192)
اگر n کوچکتربرابر 0:
بشکن
پایان
out += text_of(buf، n)
پایان
برگشت out
پایان
تابع ریشه:
start_servers()
ناپایا config := تروجان.پیکربندی کارساز جدید(""، "")
تروجان.اجازه آدرسهای خصوصی(config، درست)
تروجان.افزودن گذرواژه(config، "secret")
تروجان.تعیین جایگزین(config، "127.0.0.1"، web_port)
server := تروجان.سرویسدهی بدون رمز(config، 0)
ناپایا client := تروجان.پیکربندی کارخواه جدید("127.0.0.1"، server.درگاه، "secret")
client.با تی ال اس = نادرست
ناپایا link := تروجان.شماره گیری(client، "127.0.0.1"، echo_port)
تروجان.نوشتن متن پیوند(link، "through trojan")
سرچاپ read_text(link، 19)
تروجان.بستن پیوند(link)
stranger := تی سی پی.شماره گیری("127.0.0.1"، server.درگاه)
تی سی پی.نوشتن(stranger، "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n")
سرچاپ تی سی پی.خواندن(stranger، 4096).زیررشته(0، 15)
تی سی پی.بستن(stranger)
تروجان.توقف(server)
پایانبا TLS، گواهی و کلید را به پیکربندی بدهید و با سرویسدهی شروعش کنید. تعیین جایگزین را به یک وبسرور واقعی روی همان دستگاه اشاره بدهید و دامنهی گواهی را به عنوان نامی که کارخواهها به آن وصل میشوند به کار ببرید.
ناپایا config := تروجان.پیکربندی کارساز جدید("fullchain.pem"، "privkey.pem")
تروجان.افزودن گذرواژه(config، "یک گذرواژهی بلند و تصادفی")
تروجان.تعیین جایگزین(config، "127.0.0.1"، 8080)
server := تروجان.سرویسدهی(config، 443)
استفاده از تروجان در زنجیرهی پراکسی
برای مسیریابی و زنجیره، اتصالدهنده درخواست تروجان را روی هر جریانی که از پیش به کارساز میرسد مینویسد و پذیرنده تروجان آن را سمت کارساز میخواند. جریان زیرین تعیین میکند چه چیز خصوصی است: روی جریان TCP ساده این گام خواناست، پس زیرش TLS بگذارید. با یک تونل.شمارهگیر که TLS را به عنوان بالادست میدهد، تونل.از طریق یک خروجی کامل میسازد:
hop := تروجان.اتصالدهنده جدید("proxy.example.com"، 443، "یک گذرواژهی بلند و تصادفی")
outbound := تونل.از طریق(your_tls_dialer، hop)
راهنمای تونل کل خط لوله را با همین اتصالدهنده نشان میدهد. برای کارخواهی که مسیریابی نمیخواهد، شماره گیری خودش TLS را انجام میدهد و سادهتر است.
چه باید دانست
سرویسدهیرا با گواهی واقعی و وبسایت جایگزین واقعی به کار ببرید.سرویسدهی بدون رمزوسرویسدهی وبسوکتبرای loopback، آزمون و استفاده پشت چیزی هستند که TLS را تمام میکند.- حفاظت در برابر بازپخش و محدودکنندهای در برابر حملهی brute force ندارد. گذرواژههای بلند و تصادفی بگذارید.
- کارساز در حالت TLS روی هر رابط IPv4 و در حالت ساده و وبسوکت روی loopback گوش میدهد؛ با
تعیین میزبان شنودعوضش کنید. - IPv6 کار میکند: کارساز میتواند روی
::1یا::گوش دهد (تعیین میزبان شنود)، هدفهای TCP و UDP میتوانند IPv6 باشند و آزمونهای loopback روی::1اجرا میشوند. نام مقصد را کارساز حل میکند. - UDP درون همان اتصال اجرا میشود.
خواندن بسته یو دی پیهر بار یک بسته میدهد. - آنچه میگیرید آزاد کنید:
بستن پیوندبرایپیوند،آزاد کردن نشستبراینشست. - هیچ گزارشی خودکار نوشته نمیشود.
گونهها
اتصالدهنده Connector
ساختار اتصالدهندهتونل.زنجیره: روی جریانی که از پیش به کارساز تروجان میرسد درخواست تروجان را برای یک مقصد مینویسد. با اتصالدهنده جدید ساخته میشود. برای خصوصی بودن این گام، جریان زیرین باید از پیش رمزشده (TLS) باشد.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| نشانی کارساز | server | تونل.نشانی | نشانی کارساز تروجان. |
| گذرواژه | password | رشته = "" | گذرواژه. به شکل درهم SHA-224 فرستاده میشود. |
// زبان: فارسی
واردسازی حافظه
واردسازی شبکه.تروجان
واردسازی شبکه.تونل
واردسازی فشرده سازی
تابع text_of(p: تهی*، n: صحیح): رشته:
buf := حافظه.تخصیص((n + 1) برگردان طبیعی۶۴)
حافظه.کپی(buf، p، n برگردان طبیعی۶۴)
(buf برگردان طبیعی۸*)[n] = 0 برگردان طبیعی۸
برگشت buf برگردان رشته
پایان
تابع ریشه:
hop := تروجان.اتصالدهنده جدید("vpn.example.com"، 443، "password")
سرچاپ hop.نام()، hop.کارساز().میزبان، hop.کارساز().درگاه
pair := تونل.لوله جدید()
سرچاپ hop.دستدهی(تونل.سر اول لوله(pair)، تونل.نشانی جدید("example.com"، 443))
ناپایا expected := تروجان.کدگذاری درخواست("password"، تروجان.فرمان اتصال، "example.com"، 443)
buf := حافظه.تخصیص(256 برگردان طبیعی۶۴)
n := تونل.سر دوم لوله(pair).خواندن بایت(buf، 256)
سرچاپ n، n برابر expected.طول، text_of(buf، n) برابر text_of(expected.داده، expected.طول)
ناپایا inbound := تروجان.پذیرنده جدید()
تروجان.افزودن گذرواژه به پذیرنده(inbound، "password")
تروجان.افزودن گذرواژه به پذیرنده(inbound، "other")
سرچاپ inbound.نام()، inbound.درهم گذرواژهها.طول()، inbound.شمار پاسخها
good := تونل.لوله جدید()
تونل.سر دوم لوله(good).نوشتن(text_of(expected.داده، expected.طول) + "payload")
session := inbound.دستدهی(تونل.سر اول لوله(good))
سرچاپ session.موفق، session.مقصد.میزبان، session.مقصد.درگاه، session.پروتکل، session.فرمان، session.داده آغازین
web := تونل.لوله جدید()
تونل.سر دوم لوله(web).نوشتن("GET / HTTP/1.1\r\nHost: x\r\n\r\n")
stranger := inbound.دستدهی(تونل.سر اول لوله(web))
سرچاپ stranger.موفق، stranger.خطا، stranger.داده آغازین.طول()
wrong := تروجان.کدگذاری درخواست("nope"، تروجان.فرمان اتصال، "example.com"، 443)
bad := تونل.لوله جدید()
تونل.سر دوم لوله(bad).نوشتن(text_of(wrong.داده، wrong.طول))
rejected := inbound.دستدهی(تونل.سر اول لوله(bad))
سرچاپ rejected.موفق، rejected.داده آغازین.طول() برابر wrong.طول
inbound.پاسخ(تونل.سر اول لوله(bad)، rejected، نادرست)
ناپایا chain := تونل.زنجیره جدید(تونل.مستقیم())
تونل.افزودن گام(chain، hop)
سرچاپ chain.نام()
فشرده سازی.آزادسازی بافر(expected)
پایانکارساز Server
تابع کارساز(): تونل.نشانینمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Adapter.salam
دستدهی Handshake
تابع دستدهی(s: dyn تونل.جریان، target: تونل.نشانی): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Adapter.salam
نام Name
تابع نام(): رشتهtrojan را برمیگرداند.نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Adapter.salam
پذیرنده تروجان Inbound
ساختار پذیرنده تروجانتونل.پذیرنده: درخواست را از یک جریان میخواند، درهم گذرواژه را بررسی میکند و مقصد را برمیگرداند. درخواستی که بررسی را نگذراند پاسخ نمیگیرد و بایتهای خواندهشده تا آن لحظه در تونل.داده آغازین میمانند، تا فراخواننده بتواند آنها را به یک سایت طعمه بدهد. با پذیرنده جدید ساخته میشود.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| درهم گذرواژهها | hashes | وکتور<رشته> | درهمهای پذیرفتهشدهی گذرواژه، به شکل متن هگز ۵۶ نویسهای. |
| شمار پاسخها | replies | صحیح = 0 | شمارندهای که سازگارکننده نگه میدارد. تروجان پاسخی نمیفرستد، پس صفر میماند. |
نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Adapter.salam
نام Name
تابع نام(): رشتهtrojan را برمیگرداند.نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Adapter.salam
دستدهی Handshake
تابع دستدهی(s: dyn تونل.جریان): تونل.نشستنمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Adapter.salam
پاسخ Reply
تابع پاسخ(_s: dyn تونل.جریان، _sess: تونل.نشست، _ok: منطقی)نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Adapter.salam
پیکربندی کارخواه ClientConfig
ساختار پیکربندی کارخواهپیکربندی کارخواه جدید ساخته میشود.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| میزبان کارساز | server_host | رشته = "" | نام میزبان یا IP کارساز. |
| درگاه کارساز | server_port | صحیح = 443 | درگاه کارساز. پیشفرض ۴۴۳. |
| گذرواژه | password | رشته = "" | گذرواژه. به شکل درهم SHA-224 آن فرستاده میشود. |
| نام سرور | sni | رشته = "" | نام سروری که در دستدهی TLS فرستاده و در گواهی بررسی میشود. خالی یعنی همان میزبان. |
| پروتکل برنامه | alpn | رشته = "" | پروتکل ALPN که پیشنهاد میشود، مثلا h2 یا http/1.1. خالی یعنی هیچ. |
| ناامن | insecure | منطقی = نادرست | درست یعنی بررسی گواهی نادیده گرفته شود. فقط برای آزمون: حفاظتی را که TLS میدهد برمیدارد. |
| با تی ال اس | use_tls | منطقی = درست | درست یعنی روی TLS اجرا شود، تنظیم عادی و امن. پیشفرض درست. با با وبسوکت تعیین میکند wss باشد یا ws. |
| با وبسوکت | use_ws | منطقی = نادرست | درست یعنی تروجان درون یک وبسوکت برده شود (تا CDN یا پراکسی معکوس بتواند جلویش بنشیند). پیشفرض نادرست. |
| مسیر وبسوکت | ws_path | رشته = "/" | مسیر وبسوکت. پیشفرض /. |
| سرآیند همراه نخستین داده | lazy_header | منطقی = نادرست | درست یعنی درخواست تروجان نگه داشته شود و همراه نخستین دادهای که مینویسید فرستاده شود، تا بستهی نخست درخواستی با اندازهی ثابت نباشد. پیشفرض نادرست. |
| مهلت اتصال | timeout_ms | صحیح = 10000 | اتصال چند میلیثانیه میتواند طول بکشد. پیشفرض ۱۰۰۰۰. |
// زبان: فارسی
واردسازی حافظه
واردسازی شبکه.تی سی پی
واردسازی شبکه.تروجان
واردسازی همگام سازی
ناپایا echo_port := 0
ناپایا web_port := 0
ناپایا web_seen := ""
ناپایا ready := همگام سازی.گروه انتظار جدید()
تابع echo_server():
srv := تی سی پی.پیوند(0)
echo_port = تی سی پی.درگاه(srv)
همگام سازی.اتمام(ready)
تا درست:
c := تی سی پی.پذیرش(srv)
تا درست:
data := تی سی پی.خواندن(c، 4096)
اگر data.طول() برابر 0:
بشکن
پایان
تی سی پی.نوشتن(c، "echo:" + data)
پایان
تی سی پی.بستن(c)
پایان
پایان
تابع web_server():
srv := تی سی پی.پیوند(0)
web_port = تی سی پی.درگاه(srv)
همگام سازی.اتمام(ready)
تا درست:
c := تی سی پی.پذیرش(srv)
web_seen = تی سی پی.خواندن(c، 4096)
تی سی پی.نوشتن(c، "HTTP/1.1 200 OK\r\nContent-Length: 12\r\nConnection: close\r\n\r\nhello probes")
تی سی پی.بستن(c)
پایان
پایان
تابع start_servers():
همگام سازی.افزودن(ready، 2 برگردان صحیح۶۴)
_a := نخساز(echo_server)
_b := نخساز(web_server)
همگام سازی.انتظار(ready)
پایان
تابع text_of(p: تهی*، n: صحیح): رشته:
buf := حافظه.تخصیص((n + 1) برگردان طبیعی۶۴)
حافظه.کپی(buf، p، n برگردان طبیعی۶۴)
(buf برگردان طبیعی۸*)[n] = 0 برگردان طبیعی۸
برگشت buf برگردان رشته
پایان
تابع read_text(l &: تروجان.پیوند، want: صحیح): رشته:
buf := حافظه.تخصیص(8192 برگردان طبیعی۶۴)
دیرکن حافظه.آزادسازی(buf)
ناپایا out := ""
تا out.طول() کوچکتر want:
n := تروجان.خواندن پیوند(l، buf، 8192)
اگر n کوچکتربرابر 0:
بشکن
پایان
out = out + text_of(buf، n)
پایان
برگشت out
پایان
تابع ریشه:
start_servers()
ناپایا config := تروجان.پیکربندی کارساز جدید(""، "")
تروجان.اجازه آدرسهای خصوصی(config، درست)
تروجان.افزودن گذرواژه(config، "secret")
تروجان.افزودن درهم گذرواژه(config، تروجان.درهم گذرواژه("second"))
سرچاپ config.درهم گذرواژهها.طول()، config.مهلت دستدهی
server := تروجان.سرویسدهی بدون رمز(config، 0)
سرچاپ "server up:"، server.معتبر، تروجان.درگاه کارساز(server) برابر server.درگاه
ناپایا client := تروجان.پیکربندی کارخواه جدید("127.0.0.1"، server.درگاه، "secret")
client.با تی ال اس = نادرست
سرچاپ client.درگاه کارساز نابرابر 443، client.با وبسوکت، client.سرآیند همراه نخستین داده، client.مهلت اتصال
ناپایا link := تروجان.شماره گیری(client، "127.0.0.1"، echo_port)
سرچاپ "dial ok:"، تروجان.پیوند معتبر(link)، link.نوع برابر تروجان.پیوند تی سی پی
سرچاپ تروجان.نوشتن متن پیوند(link، "hello trojan")
سرچاپ read_text(link، 17)
big := حافظه.تخصیص(30000 برگردان طبیعی۶۴)
حافظه.تنظیم(big، 97، 30000 برگردان طبیعی۶۴)
سرچاپ تروجان.نوشتن پیوند(link، big، 30000)
ناپایا total := 0
تا total کوچکتر 30005:
buf := حافظه.تخصیص(8192 برگردان طبیعی۶۴)
n := تروجان.خواندن پیوند(link، buf، 8192)
حافظه.آزادسازی(buf)
اگر n کوچکتربرابر 0:
بشکن
پایان
total += n
پایان
سرچاپ "echoed"، total
حافظه.آزادسازی(big)
تروجان.تنظیم مهلت پیوند(link، 1000)
تروجان.بستن پیوند(link)
ناپایا second := تروجان.پیکربندی کارخواه جدید("127.0.0.1"، server.درگاه، "second")
second.با تی ال اس = نادرست
second.سرآیند همراه نخستین داده = درست
ناپایا lazy := تروجان.شماره گیری(second، "127.0.0.1"، echo_port)
سرچاپ تروجان.نوشتن متن پیوند(lazy، "lazy header")
سرچاپ read_text(lazy، 16)
تروجان.بستن پیوند(lazy)
همگام سازی.خواب میلی ثانیه(300)
stats := تروجان.آمار(server)
سرچاپ "stats:"، stats.پذیرفتهشده، stats.احرازشده، stats.جایگزینشده
تروجان.توقف(server)
پایاندرخواست Request
ساختار درخواست| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| وضعیت | status | صحیح = 1 | تجزیه موفق، تجزیه نیازمند داده بیشتر یا تجزیه نامعتبر. نخست آن را بررسی کنید. |
| درهم | hash | رشته = "" | درهم ۵۶ نویسهای گذرواژه از درخواست. |
| فرمان | cmd | صحیح = 0 | فرمان اتصال یا فرمان یو دی پی. |
| نوع نشانی | atyp | صحیح = 0 | نوع نشانی مقصد. |
| میزبان | host | رشته = "" | نام میزبان یا IP مقصد. |
| درگاه | port | صحیح = 0 | درگاه مقصد. |
| بایتهای مصرفشده | consumed | صحیح = 0 | درخواست چند بایت گرفت. هر چه پس از آن باشد بار است. |
// زبان: فارسی
واردسازی شبکه.تروجان
واردسازی فشرده سازی
تابع ریشه:
سرچاپ تروجان.اساچای۲۲۴ هگز("")
سرچاپ تروجان.اساچای۲۲۴ هگز("abc")
سرچاپ تروجان.درهم گذرواژه("password")
digest := تروجان.اساچای۲۲۴("abc" برگردان تهی*، 3)
سرچاپ digest.طول، تروجان.هگز(digest) برابر تروجان.اساچای۲۲۴ هگز("abc")
request := تروجان.کدگذاری درخواست("password"، تروجان.فرمان اتصال، "example.com"، 443)
سرچاپ تروجان.هگز(request)
parsed := تروجان.تجزیه درخواست(request.داده، request.طول)
سرچاپ parsed.وضعیت برابر تروجان.تجزیه موفق، parsed.فرمان برابر تروجان.فرمان اتصال، parsed.نوع نشانی برابر تروجان.نوع نشانی دامنه، parsed.میزبان، parsed.درگاه، parsed.بایتهای مصرفشده
سرچاپ parsed.درهم برابر تروجان.درهم گذرواژه("password")
same := تروجان.کدگذاری درخواست با درهم(تروجان.درهم گذرواژه("password")، تروجان.فرمان اتصال، "example.com"، 443)
سرچاپ تروجان.هگز(same) برابر تروجان.هگز(request)
سرچاپ "short:"، تروجان.تجزیه درخواست(request.داده، request.طول - 3).وضعیت برابر تروجان.تجزیه نیازمند داده بیشتر
junk := تروجان.تجزیه درخواست("GET / HTTP/1.1\r\nHost: a\r\n\r\n" برگردان تهی*، 28)
سرچاپ "junk:"، junk.وضعیت برابر تروجان.تجزیه نامعتبر
udp_request := تروجان.کدگذاری درخواست("password"، تروجان.فرمان یو دی پی، "2001:db8::1"، 53)
p6 := تروجان.تجزیه درخواست(udp_request.داده، udp_request.طول)
سرچاپ p6.فرمان برابر تروجان.فرمان یو دی پی، p6.نوع نشانی برابر تروجان.نوع نشانی آیپی۶، p6.میزبان، p6.درگاه
packet := تروجان.کدگذاری بسته یو دی پی("8.8.8.8"، 53، "hi" برگردان تهی*، 2)
سرچاپ تروجان.هگز(packet)
up := تروجان.تجزیه بسته یو دی پی(packet.داده، packet.طول)
سرچاپ up.وضعیت برابر تروجان.تجزیه موفق، up.نوع نشانی برابر تروجان.نوع نشانی آیپی۴، up.میزبان، up.درگاه، up.آغاز داده، up.طول داده، up.بایتهای مصرفشده
addr := تروجان.کدگذاری نشانی("example.com"، 443)
سرچاپ تروجان.هگز(addr)
ناپایا atyp := 0
ناپایا host := ""
ناپایا port := 0
سرچاپ تروجان.تجزیه نشانی(addr.داده، addr.طول، 0، atyp، host، port)، atyp، host، port
ناپایا ip4 := فشرده سازی.بافر بایت جدید()
سرچاپ تروجان.تجزیه آیپی۴("192.168.1.20"، ip4)، تروجان.قالبدهی آیپی۴(ip4.داده، 0)
ناپایا ip6 := فشرده سازی.بافر بایت جدید()
سرچاپ تروجان.تجزیه آیپی۶("2001:db8::1"، ip6)، تروجان.قالبدهی آیپی۶(ip6.داده، 0)
سرچاپ تروجان.فرمان اتصال، تروجان.فرمان یو دی پی، تروجان.نوع نشانی آیپی۴، تروجان.نوع نشانی آیپی۶، تروجان.تجزیه نیازمند داده بیشتر، تروجان.تجزیه نامعتبر
پایانبسته یو دی پی UDPPacket
ساختار بسته یو دی پی| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| وضعیت | status | صحیح = 1 | تجزیه موفق، تجزیه نیازمند داده بیشتر یا تجزیه نامعتبر. |
| نوع نشانی | atyp | صحیح = 0 | نوع نشانی. |
| میزبان | host | رشته = "" | میزبانی که دیتاگرام برایش است یا از آن آمده. |
| درگاه | port | صحیح = 0 | درگاه. |
| آغاز داده | payload_off | صحیح = 0 | آفست بار در بایتهای تجزیهشده. |
| طول داده | payload_len | صحیح = 0 | طول بار. |
| بایتهای مصرفشده | consumed | صحیح = 0 | بسته در مجموع چند بایت گرفت. |
نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Wire.salam
پیوند Link
ساختار پیوندشماره گیری یکی برمیگرداند؛ کارساز برای هر کارخواه یکی میسازد. آن را با ارجاع به تابعهای خواندن و نوشتن بدهید.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| نوع | kind | صحیح = 0 | پیوند تی سی پی، پیوند تی ال اس یا پیوند وبسوکت. |
| اتصال تی سی پی | tc | تی سی پی.اتصال شبکه | اتصال TCP، وقتی نوع برابر پیوند تی سی پی است. |
| اتصال امن | sc | تی ال اس.اتصال | اتصال TLS، وقتی نوع برابر پیوند تی ال اس است. |
| اتصال وبسوکت | ws | وبسوکت.اتصال وب | اتصال وبسوکت، وقتی نوع برابر پیوند وبسوکت است. |
| بافر خواندن | rbuf | فشرده سازی.بافر بایت | بایتهایی که از همتا خوانده شده ولی هنوز تحویل داده نشده. |
| جایگاه خواندن | roff | صحیح = 0 | چه مقدار از بافر خواندن تحویل داده شده است. |
| بافر یو دی پی | ubuf | فشرده سازی.بافر بایت | بایتهای یک بستهی UDP که هنوز در حال سرهم شدن است. |
| سرآیند معلق | pending | فشرده سازی.بافر بایت | درخواست تروجانی که سرآیند همراه نخستین داده تا نخستین نوشتن نگه داشته است. |
نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Client.salam
جریان پیوند LinkStream
ساختار جریان پیوندپیوند که به صورت tunnel.Stream دیده میشود تا اتصال تروجان را بتوان با ابزارهای net.tunnel رله، مسیریابی و شمارش کرد. با به صورت جریان ساخته میشود. بستن آن فقط اتصال را خاموش میکند؛ بستن پیوند هنوز پیوند را آزاد میکند.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| پیوند | link | پیوند* | پیوندی که دربرمیگیرد. |
// زبان: فارسی
/*
* Salam Programming Language (2024-2026)
*
* +-------------------+
* | S A L A M |
* +-------------------+
*
* Designed by Seyyed Ali Mohammadiyeh and the Salam Team
* Born from a decade of language design experience (since 2018)
*
* Repository: https://github.com/SalamLang/Salam
*
*/
واردسازی حافظه
واردسازی شبکه.تی سی پی
واردسازی شبکه.یو دی پی
واردسازی شبکه.تروجان
واردسازی شبکه.تونل
واردسازی فشرده سازی
واردسازی همگام سازی
ناپایا echo_port := 0
ناپایا udp_port := 0
ناپایا ready := همگام سازی.گروه انتظار جدید()
تابع text_of(p: تهی*، n: صحیح): رشته:
buf := حافظه.تخصیص((n + 1) برگردان طبیعی۶۴)
حافظه.کپی(buf، p، n برگردان طبیعی۶۴)
(buf برگردان طبیعی۸*)[n] = 0 برگردان طبیعی۸
برگشت buf برگردان رشته
پایان
تابع echo_server():
srv := تی سی پی.پیوند(0)
echo_port = تی سی پی.درگاه(srv)
همگام سازی.اتمام(ready)
تا درست:
c := تی سی پی.پذیرش(srv)
تا درست:
s := تی سی پی.خواندن(c، 4096)
اگر s.طول() برابر 0:
بشکن
پایان
_n := تی سی پی.نوشتن(c، s)
پایان
تی سی پی.بستن(c)
پایان
پایان
تابع udp_server():
s := یو دی پی.پیوند(0)
udp_port = یو دی پی.درگاه(s)
همگام سازی.اتمام(ready)
تا درست:
p := یو دی پی.دریافت(s، 2048)
اگر p.داده.طول() بزرگتر 0:
_n := یو دی پی.ارسال(s، p.میزبان فرستنده، p.درگاه فرستنده، "echo:" + p.داده)
پایان
پایان
پایان
تابع read_all_text(l &: تروجان.پیوند، want: صحیح): رشته:
buf := حافظه.تخصیص(8192 برگردان طبیعی۶۴)
دیرکن حافظه.آزادسازی(buf)
ناپایا out := ""
تا out.طول() کوچکتر want:
n := تروجان.خواندن پیوند(l، buf، 8192)
اگر n کوچکتربرابر 0:
بشکن
پایان
out = out + text_of(buf، n)
پایان
برگشت out
پایان
تابع ریشه:
همگام سازی.افزودن(ready، 2 برگردان صحیح۶۴)
_t1 := نخساز(echo_server)
_t2 := نخساز(udp_server)
همگام سازی.انتظار(ready)
ناپایا cfg := تروجان.پیکربندی کارساز جدید(""، "")
تروجان.اجازه آدرسهای خصوصی(cfg، درست)
تروجان.افزودن گذرواژه(cfg، "secret")
تروجان.تعیین حالت(cfg، تروجان.حالت ساده)
stats := تونل.آمار جدید()
تروجان.تعیین آمار ترافیک(cfg، stats)
srv := تروجان.شنود(cfg، 0)
سرچاپ "listen ok"، srv.معتبر، srv.میزبان
ناپایا ccfg := تروجان.پیکربندی کارخواه جدید("127.0.0.1"، srv.درگاه، "secret")
ccfg.با تی ال اس = نادرست
ناپایا ulink := تروجان.شماره گیری یو دی پی(ccfg)
سرچاپ تروجان.ارسال یو دی پی(ulink، "127.0.0.1"، udp_port، "one" برگردان تهی*، 3)
سرچاپ تروجان.ارسال یو دی پی(ulink، "127.0.0.1"، udp_port، "two" برگردان تهی*، 3)
ناپایا pkt := تروجان.بسته یو دی پی جدید()
ناپایا payload := فشرده سازی.بافر بایت جدید()
سرچاپ تروجان.خواندن بسته یو دی پی(ulink، pkt، payload)، text_of(payload.داده، payload.طول)
سرچاپ تروجان.خواندن بسته یو دی پی(ulink، pkt، payload)، text_of(payload.داده، payload.طول)
تروجان.بستن پیوند(ulink)
ناپایا link := تروجان.شماره گیری(ccfg، "127.0.0.1"، echo_port)
سرچاپ تروجان.نوشتن متن پیوند(link، "hello stats")
سرچاپ read_all_text(link، 11)
تروجان.بستن پیوند(link)
همگام سازی.خواب میلی ثانیه(300)
سرچاپ "up"، stats.بایت بارگذاری() بزرگتربرابر 17، "down"، stats.بایت دریافت() بزرگتربرابر 17، "total"، stats.شمار کل()
تروجان.توقف(srv)
ناپایا rt := تونل.مسیریاب جدید("direct")
ناپایا rule := تونل.قاعده جدید("block")
سرچاپ تونل.قاعده درگاه(rule، "" + echo_port)
تونل.افزودن قاعده(rt، rule)
ناپایا rd := تونل.شمارهگیر مسیریاب جدید(rt)
تونل.افزودن به شمارهگیر مسیریاب(rd، "block"، تونل.مسدود())
ناپایا cfg2 := تروجان.پیکربندی کارساز جدید(""، "")
تروجان.اجازه آدرسهای خصوصی(cfg2، درست)
تروجان.افزودن گذرواژه(cfg2، "secret")
تروجان.تعیین مسیریاب(cfg2، rd)
تروجان.تعیین میزبان شنود(cfg2، "127.0.0.1")
تروجان.تعیین حالت(cfg2، تروجان.حالت ساده)
srv2 := تروجان.شنود(cfg2، 0)
ناپایا c2 := تروجان.پیکربندی کارخواه جدید("127.0.0.1"، srv2.درگاه، "secret")
c2.با تی ال اس = نادرست
ناپایا blocked := تروجان.شماره گیری(c2، "127.0.0.1"، echo_port)
سرچاپ تروجان.نوشتن متن پیوند(blocked، "x")
سرچاپ "blocked read"، read_all_text(blocked، 1).طول()
تروجان.بستن پیوند(blocked)
تروجان.توقف(srv2)
پایانخواندن Read
تابع خواندن(max: صحیح): رشتهmax بایت را به صورت متن میخواند.نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Modes.salam
خواندن بایت ReadBytes
تابع خواندن بایت(buf: تهی*، max: صحیح): صحیحmax بایت را در یک بافر میخواند و شمار آن را برمیگرداند.نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Modes.salam
نوشتن Write
تابع نوشتن(data: رشته): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Modes.salam
نوشتن بایت WriteBytes
تابع نوشتن بایت(ptr: تهی*، n: صحیح): صحیحn بایت مینویسد و n برمیگرداند، یا ۱- در شکست.نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Modes.salam
تنظیم مهلت SetDeadline
تابع تنظیم مهلت(millis: صحیح)نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Modes.salam
خاموش کردن Shutdown
تابع خاموش کردن()نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Modes.salam
بستن نوشتن CloseWrite
تابع بستن نوشتن()Shutdown در هر دو جهت خاموش میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Modes.salam
بستن Close
تابع بستن()Shutdown: صاحب پیوند آن را با بستن پیوند میبندد.نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Modes.salam
معتبر Ok
تابع معتبر(): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Modes.salam
پیکربندی کارساز ServerConfig
ساختار پیکربندی کارسازپیکربندی کارساز جدید شروع کنید.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| پرونده گواهی | cert_file | رشته = "" | پروندهی گواهی PEM برای TLS. گواهی یک دامنهی واقعی را به کار ببرید. |
| پرونده کلید | key_file | رشته = "" | پروندهی کلید خصوصی PEM. |
| درهم گذرواژهها | hashes | وکتور<رشته> | درهمهای پذیرفتهشدهی گذرواژه. افزودن گذرواژه و افزودن درهم گذرواژه به آن اضافه میکنند. |
| میزبان جایگزین | fallback_host | رشته = "" | میزبان وبسایتی که هر اتصالِ غیرکارخواه معتبر تروجان را میگیرد. خالی یعنی 127.0.0.1. |
| درگاه جایگزین | fallback_port | صحیح = 0 | درگاه آن وبسایت. ۰، پیشفرض، یعنی نیست و چنین اتصالهایی فقط بسته میشوند. |
| بیشینه دست دادن مبدا | max_per_source | صحیح = 32 | چند اتصال از یک نشانی میتوانند همزمان در دستدهی باشند. ۰ یعنی بدون سقف. |
| مهلت دستدهی | handshake_timeout_ms | صحیح = 5000 | کارخواه چند میلیثانیه وقت دارد یک درخواست کامل بفرستد. پیشفرض ۵۰۰۰. |
| مهلت اتصال مقصد | connect_timeout_ms | صحیح = 10000 | رسیدن به مقصد (یا سایت جایگزین) چند میلیثانیه میتواند طول بکشد. پیشفرض ۱۰۰۰۰. |
| مهلت بیکاری | idle_timeout_ms | صحیح = 0 | اتصال را پس از آنکه راه افتاد، با این همه میلیثانیه سکوت قطع کن. ۰، پیشفرض، یعنی هرگز. |
| حالت | mode | صحیح = 0 | حالتی که شنود با آن سرویس میدهد: حالت تی ال اس (پیشفرض)، حالت ساده یا حالت وبسوکت. |
| میزبان شنود | bind_host | رشته = "" | نشانیای که روی آن گوش داده میشود. خالی برای هر حالت پیشفرض امن میگیرد: همهی رابطها برای حالت تی ال اس و 127.0.0.1 برای حالت ساده و حالت وبسوکت که پشت چیزی که TLS را تمام میکند مینشینند. برای گوش دادن عمدی روی همهجا 0.0.0.0 بدهید. |
| شمارهگیر | dialer | dyn تونل.شمارهگیر | tunnel.Dialerای که به مقصدها میرسد. وقتی has_dialer درست است به کار میرود؛ وگرنه مقصدها مستقیم و با connect_timeout_ms وصل میشوند. |
| دارای شمارهگیر | has_dialer | منطقی = نادرست | پس از تعیین شمارهگیر یا تعیین مسیریاب درست است. |
| آمار ترافیک | stats | تونل.آمار | tunnel.Statsای که بایتها و اتصالهای این کارساز را میشمارد. وقتی has_stats درست است به کار میرود. |
| دارای آمار ترافیک | has_stats | منطقی = نادرست | پس از تعیین آمار ترافیک درست است. |
| اجازه یو دی پی | allow_udp | منطقی = درست | درست (پیشفرض) یعنی نشستهای UDP پذیرفته میشوند. UDP همیشه مستقیم فرستاده میشود و از شمارهگیر نمیگذرد؛ اگر مسیریاب باید بتواند همهچیز را ببندد این را نادرست کنید. |
| سیاست مقصد | policy | تونل.سیاست مقصد | کدام مقصدها قابل دسترسیاند. بهطور پیشفرض نشانیهای حلقه محلی، خصوصی، پیوند محلی، فراداده و دیگر نشانیهای ویژه رد میشوند. به DestPolicy نگاه کنید. |
| مسیریاب | router | تونل.شمارهگیر مسیریاب | مسیریابی که با تعیین مسیریاب تنظیم شده؛ هدفهای یو دی پی که به خروجی مسدود میرود رها میشوند. |
| دارای مسیریاب | has_router | منطقی = نادرست | درست وقتی یک مسیریاب تعیین شده است. |
| بیشینه اتصال همزمان | max_connections | صحیح = 1024 | بیشترین شمار اتصال همزمان؛ بیشتر از آن بسته میشود (ساکس) یا با ۵۰۳ پاسخ داده میشود (اچتیتیپی). پیشفرض ۱۰۲۴ است و ۰ سقف را برمیدارد. |
| مهلت کل دستدهی | handshake_deadline_ms | صحیح = 10000 | کل زمانی که یک اتصال برای پایان دستدهی دارد، به میلیثانیه، هر قدر هم آهسته بفرستد. پیشفرض ۱۰۰۰۰ است و ۰ آن را خاموش میکند. |
نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Client.salam
نشست Session
ساختار نشستدستدهی: آیا کارخواه معتبری حرف زد، چه خواست و بایتهای درگیر کداماند.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| معتبر | ok | منطقی = نادرست | درست وقتی درخواست معتبر بود و درهم گذرواژهاش شناختهشده است. |
| درخواست | req | درخواست | درخواست تجزیهشده: فرمان و مقصد. |
| بایتهای خواندهشده | seen | فشرده سازی.بافر بایت | همهی بایتهایی که در دستدهی خوانده شد. وقتی معتبر نادرست است همینها هستند که جایگزین برای وبسایت بازپخش میکند. |
| داده همراه | extra | فشرده سازی.بافر بایت | باری که در همان خواندنِ درخواست رسیده و باید نخست به مقصد برود. |
// زبان: فارسی
واردسازی شبکه.تی سی پی
واردسازی شبکه.تروجان
واردسازی همگام سازی
ناپایا port := 0
ناپایا ready := همگام سازی.گروه انتظار جدید()
ناپایا config := تروجان.پیکربندی کارساز جدید(""، "")
تروجان.اجازه آدرسهای خصوصی(config، درست)
تابع serve_one():
listener := تی سی پی.پیوند(0)
port = تی سی پی.درگاه(listener)
همگام سازی.اتمام(ready)
c := تی سی پی.پذیرش(listener)
ناپایا link := تروجان.پیوند تی سی پی جدید(c)
ناپایا session := تروجان.دستدهی(link، config)
سرچاپ "server saw a valid client:"، session.معتبر
سرچاپ session.درخواست.میزبان، session.درخواست.درگاه، session.درخواست.فرمان برابر تروجان.فرمان اتصال
سرچاپ "bytes read:"، session.بایتهای خواندهشده.طول، "payload after the request:"، session.داده همراه.طول
تروجان.آزاد کردن نشست(session)
تروجان.بستن پیوند(link)
پایان
تابع ریشه:
تروجان.افزودن گذرواژه(config، "secret")
همگام سازی.افزودن(ready، 1 برگردان صحیح۶۴)
t := نخساز(serve_one)
همگام سازی.انتظار(ready)
conn := تی سی پی.شماره گیری("127.0.0.1"، port)
request := تروجان.کدگذاری درخواست("secret"، تروجان.فرمان اتصال، "example.com"، 443)
ناپایا link := تروجان.پیوند تی سی پی جدید(conn)
تروجان.نوشتن بافر پیوند(link، request)
سرچاپ تروجان.پیوند معتبر(link)، تروجان.توصیفگر پیوند(link) بزرگتر 0
نخپیوند(t)
تروجان.بستن پیوند(link)
پایانآمار کارساز ServerStats
ساختار آمار کارسازآمار آنها را برمیگرداند.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| پذیرفتهشده | accepted | صحیح۶۴ = 0 | اتصالهای پذیرفتهشده. |
| احرازشده | authed | صحیح۶۴ = 0 | اتصالهایی که کارخواه معتبر تروجان بودند. |
| جایگزینشده | fallbacks | صحیح۶۴ = 0 | اتصالهایی که به وبسایت جایگزین سپرده شدند. |
نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Client.salam
کارساز Server
ساختار کارسازسرویسدهی، سرویسدهی بدون رمز و سرویسدهی وبسوکت آن را برمیگردانند و توقف پایانش میدهد.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| معتبر | ok | منطقی = نادرست | درست وقتی درگاه بسته شد و کارساز در حال اجراست. |
| درگاه | port | صحیح = 0 | درگاهی که روی آن گوش میدهد؛ وقتی ۰ خواستهاید به کار میآید. |
| میزبان | host | رشته = "" | نشانیای که کارساز روی آن گوش میدهد. |
| وضعیت | st | ServerState* | وضعیت درونی: پرچم توقف و شمارندهها. |
نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Client.salam
پایاها و متغیرها
فرمانها Cmd…
فرمان.| نام | انگلیسی | مقدار |
|---|---|---|
| فرمان اتصال | CmdConnect | 1 |
| فرمان یو دی پی | CmdUDP | 3 |
نوعهای نشانی Atyp…
نوع نشانی.| نام | انگلیسی | مقدار |
|---|---|---|
| نوع نشانی آیپی۴ | AtypIPv4 | 1 |
| نوع نشانی دامنه | AtypDomain | 3 |
| نوع نشانی آیپی۶ | AtypIPv6 | 4 |
نتیجههای تجزیه Parse…
وضعیت و وضعیت.| نام | انگلیسی | مقدار |
|---|---|---|
| تجزیه موفق | ParseOK | 0 |
| تجزیه نیازمند داده بیشتر | ParseNeedMore | 1 |
| تجزیه نامعتبر | ParseInvalid | 2 |
نوعهای پیوند Link…
نوع.| نام | انگلیسی | مقدار |
|---|---|---|
| پیوند تی سی پی | LinkTCP | 0 |
| پیوند تی ال اس | LinkTLS | 1 |
| پیوند وبسوکت | LinkWS | 2 |
حالتهای کارساز Mode…
mode: حالت تی ال اس، حالت ساده و حالت وبسوکت.| نام | انگلیسی | مقدار |
|---|---|---|
| حالت تی ال اس | ModeTLS | 0 |
| حالت ساده | ModePlain | 1 |
| حالت وبسوکت | ModeWS | 2 |
نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Modes.salam
تابعها
اتصالدهنده جدید NewConnector
تابع اتصالدهنده جدید(server_host: رشته، server_port: صحیح، password: رشته): اتصالدهندهاتصالدهنده میسازد.نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Adapter.salam
پذیرنده جدید NewInbound
تابع پذیرنده جدید(): پذیرنده تروجانپذیرنده تروجان بدون گذرواژه برمیگرداند. با افزودن گذرواژه به پذیرنده اضافهشان کنید.نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Adapter.salam
افزودن گذرواژه به پذیرنده InboundAddPassword
تابع افزودن گذرواژه به پذیرنده(inb &: پذیرنده تروجان، password: رشته)نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Adapter.salam
پیکربندی کارخواه جدید NewClientConfig
تابع پیکربندی کارخواه جدید(server_host: رشته، server_port: صحیح، password: رشته): پیکربندی کارخواهنمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Client.salam
شماره گیری Dial
تابع شماره گیری(cfg: پیکربندی کارخواه، host: رشته، port: صحیح): پیوندپیوند برای خواندن و نوشتن برمیگرداند؛ پیوند معتبر را بررسی کنید. با سرآیند همراه نخستین داده درخواست منتظر نخستین نوشتن شما میماند.نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Client.salam
شماره گیری یو دی پی DialUDP
تابع شماره گیری یو دی پی(cfg: پیکربندی کارخواه): پیوندارسال یو دی پی و خواندن بسته یو دی پی را به کار ببرید.// زبان: فارسی
واردسازی حافظه
واردسازی شبکه.تروجان
واردسازی شبکه.یو دی پی
واردسازی همگام سازی
واردسازی فشرده سازی
ناپایا udp_port := 0
ناپایا ready := همگام سازی.گروه انتظار جدید()
تابع udp_server():
s := یو دی پی.پیوند(0)
udp_port = یو دی پی.درگاه(s)
همگام سازی.اتمام(ready)
تا درست:
p := یو دی پی.دریافت(s، 2048)
اگر p.داده.طول() بزرگتر 0:
یو دی پی.ارسال(s، p.میزبان فرستنده، p.درگاه فرستنده، "echo:" + p.داده)
پایان
پایان
پایان
تابع ریشه:
همگام سازی.افزودن(ready، 1 برگردان صحیح۶۴)
_t := نخساز(udp_server)
همگام سازی.انتظار(ready)
ناپایا config := تروجان.پیکربندی کارساز جدید(""، "")
تروجان.اجازه آدرسهای خصوصی(config، درست)
تروجان.افزودن گذرواژه(config، "secret")
server := تروجان.سرویسدهی بدون رمز(config، 0)
ناپایا client := تروجان.پیکربندی کارخواه جدید("127.0.0.1"، server.درگاه، "secret")
client.با تی ال اس = نادرست
ناپایا link := تروجان.شماره گیری یو دی پی(client)
سرچاپ "udp session:"، تروجان.پیوند معتبر(link)
سرچاپ تروجان.نوشتن بسته یو دی پی(link، "127.0.0.1"، udp_port، "ping" برگردان تهی*، 4)
ناپایا packet := تروجان.بسته یو دی پی جدید()
ناپایا payload := فشرده سازی.بافر بایت جدید()
سرچاپ تروجان.خواندن بسته یو دی پی(link، packet، payload)
سرچاپ packet.میزبان، packet.درگاه برابر udp_port، packet.وضعیت
buf := حافظه.تخصیص((payload.طول + 1) برگردان طبیعی۶۴)
حافظه.کپی(buf، payload.داده، payload.طول برگردان طبیعی۶۴)
(buf برگردان طبیعی۸*)[payload.طول] = 0 برگردان طبیعی۸
سرچاپ buf برگردان رشته
تروجان.بستن پیوند(link)
تروجان.توقف(server)
پایانارسال یو دی پی SendUDP
تابع ارسال یو دی پی(l &: پیوند، host: رشته، port: صحیح، p: تهی*، n: صحیح): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Udp.salam
تجزیه آیپی۴ ParseIPv4
تابع تجزیه آیپی۴(text: رشته، out &: فشرده سازی.بافر بایت): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Wire.salam
تجزیه آیپی۶ ParseIPv6
تابع تجزیه آیپی۶(text: رشته، out &: فشرده سازی.بافر بایت): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Wire.salam
قالبدهی آیپی۴ FormatIPv4
تابع قالبدهی آیپی۴(p: تهی*، off: صحیح): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Wire.salam
قالبدهی آیپی۶ FormatIPv6
تابع قالبدهی آیپی۶(p: تهی*، off: صحیح): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Wire.salam
کدگذاری نشانی EncodeAddr
تابع کدگذاری نشانی(host: رشته، port: صحیح): فشرده سازی.بافر بایتنمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Wire.salam
تجزیه نشانی ParseAddr
تابع تجزیه نشانی(p: تهی*، n: صحیح، off: صحیح، atyp &: صحیح، host &: رشته، port &: صحیح): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Wire.salam
کدگذاری درخواست با درهم EncodeRequestHash
تابع کدگذاری درخواست با درهم(hash: رشته، cmd: صحیح، host: رشته، port: صحیح): فشرده سازی.بافر بایتنمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Wire.salam
کدگذاری درخواست EncodeRequest
تابع کدگذاری درخواست(password: رشته، cmd: صحیح، host: رشته، port: صحیح): فشرده سازی.بافر بایتنمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Wire.salam
تجزیه درخواست ParseRequest
تابع تجزیه درخواست(p: تهی*، n: صحیح): درخواستوضعیت را بررسی کنید؛ در موفقیت بایتهای مصرفشده میگوید بار از کجا شروع میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Wire.salam
کدگذاری بسته یو دی پی EncodeUDPPacket
تابع کدگذاری بسته یو دی پی(host: رشته، port: صحیح، payload: تهی*، n: صحیح): فشرده سازی.بافر بایتنمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Wire.salam
تجزیه بسته یو دی پی ParseUDPPacket
تابع تجزیه بسته یو دی پی(p: تهی*، n: صحیح): بسته یو دی پیوضعیت را بررسی کنید.نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Wire.salam
پیوند تی سی پی جدید NewTCPLink
تابع پیوند تی سی پی جدید(c: تی سی پی.اتصال شبکه): پیوندپیوند میپوشاند.نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Handshake.salam
پیوند تی ال اس جدید NewTLSLink
تابع پیوند تی ال اس جدید(c: تی ال اس.اتصال): پیوندپیوند میپوشاند.// زبان: فارسی
واردسازی شبکه.تروجان
تابع ریشه:
ناپایا config := تروجان.پیکربندی کارساز جدید("fullchain.pem"، "privkey.pem")
تروجان.افزودن گذرواژه(config، "a long random password")
تروجان.تعیین جایگزین(config، "127.0.0.1"، 8080)
server := تروجان.سرویسدهی(config، 443)
سرچاپ "trojan up:"، server.معتبر
ناپایا client := تروجان.پیکربندی کارخواه جدید("proxy.example.com"، 443، "a long random password")
client.نام سرور = "proxy.example.com"
client.پروتکل برنامه = "h2"
client.سرآیند همراه نخستین داده = درست
ناپایا link := تروجان.شماره گیری(client، "example.com"، 443)
سرچاپ تروجان.پیوند معتبر(link)، link.نوع برابر تروجان.پیوند تی ال اس
تروجان.بستن پیوند(link)
تروجان.توقف(server)
پایانپیوند وبسوکت جدید NewWSLink
تابع پیوند وبسوکت جدید(c: وبسوکت.اتصال وب): پیوندپیوند میپوشاند.پیوند معتبر LinkOk
تابع پیوند معتبر(l: پیوند): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Client.salam
توصیفگر پیوند LinkFd
تابع توصیفگر پیوند(l: پیوند): صحیح۶۴نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Handshake.salam
خواندن پیوند LinkRead
تابع خواندن پیوند(l &: پیوند، buf: تهی*، max: صحیح): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Client.salam
نوشتن پیوند LinkWrite
تابع نوشتن پیوند(l &: پیوند، p: تهی*، n: صحیح): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Client.salam
نوشتن بافر پیوند LinkWriteBuf
تابع نوشتن بافر پیوند(l &: پیوند، b: فشرده سازی.بافر بایت): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Handshake.salam
نوشتن متن پیوند LinkWriteStr
تابع نوشتن متن پیوند(l &: پیوند، s: رشته): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Client.salam
تنظیم مهلت پیوند LinkSetTimeout
تابع تنظیم مهلت پیوند(l: پیوند، millis: صحیح)نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Client.salam
خاموش کردن پیوند LinkShutdown
تابع خاموش کردن پیوند(l: پیوند)// زبان: فارسی
واردسازی حافظه
واردسازی شبکه.تی سی پی
واردسازی شبکه.تروجان
واردسازی همگام سازی
ناپایا echo_port := 0
ناپایا web_port := 0
ناپایا web_seen := ""
ناپایا ready := همگام سازی.گروه انتظار جدید()
تابع echo_server():
srv := تی سی پی.پیوند(0)
echo_port = تی سی پی.درگاه(srv)
همگام سازی.اتمام(ready)
تا درست:
c := تی سی پی.پذیرش(srv)
تا درست:
data := تی سی پی.خواندن(c، 4096)
اگر data.طول() برابر 0:
بشکن
پایان
تی سی پی.نوشتن(c، "echo:" + data)
پایان
تی سی پی.بستن(c)
پایان
پایان
تابع web_server():
srv := تی سی پی.پیوند(0)
web_port = تی سی پی.درگاه(srv)
همگام سازی.اتمام(ready)
تا درست:
c := تی سی پی.پذیرش(srv)
web_seen = تی سی پی.خواندن(c، 4096)
تی سی پی.نوشتن(c، "HTTP/1.1 200 OK\r\nContent-Length: 12\r\nConnection: close\r\n\r\nhello probes")
تی سی پی.بستن(c)
پایان
پایان
تابع start_servers():
همگام سازی.افزودن(ready، 2 برگردان صحیح۶۴)
_a := نخساز(echo_server)
_b := نخساز(web_server)
همگام سازی.انتظار(ready)
پایان
تابع text_of(p: تهی*، n: صحیح): رشته:
buf := حافظه.تخصیص((n + 1) برگردان طبیعی۶۴)
حافظه.کپی(buf، p، n برگردان طبیعی۶۴)
(buf برگردان طبیعی۸*)[n] = 0 برگردان طبیعی۸
برگشت buf برگردان رشته
پایان
تابع read_text(l &: تروجان.پیوند، want: صحیح): رشته:
buf := حافظه.تخصیص(8192 برگردان طبیعی۶۴)
دیرکن حافظه.آزادسازی(buf)
ناپایا out := ""
تا out.طول() کوچکتر want:
n := تروجان.خواندن پیوند(l، buf، 8192)
اگر n کوچکتربرابر 0:
بشکن
پایان
out = out + text_of(buf، n)
پایان
برگشت out
پایان
تابع ریشه:
start_servers()
ناپایا config := تروجان.پیکربندی کارساز جدید(""، "")
تروجان.اجازه آدرسهای خصوصی(config، درست)
تروجان.افزودن گذرواژه(config، "wspass")
server := تروجان.سرویسدهی وبسوکت(config، 0)
سرچاپ "ws server up:"، server.معتبر
ناپایا client := تروجان.پیکربندی کارخواه جدید("127.0.0.1"، server.درگاه، "wspass")
client.با تی ال اس = نادرست
client.با وبسوکت = درست
client.مسیر وبسوکت = "/trojan"
ناپایا link := تروجان.شماره گیری(client، "127.0.0.1"، echo_port)
سرچاپ "ws dial ok:"، تروجان.پیوند معتبر(link)، link.نوع برابر تروجان.پیوند وبسوکت
تروجان.نوشتن متن پیوند(link، "over websocket")
سرچاپ read_text(link، 19)
تروجان.خاموش کردن پیوند(link)
تروجان.بستن پیوند(link)
تروجان.توقف(server)
پایانبستن پیوند LinkClose
تابع بستن پیوند(l &: پیوند)نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Client.salam
رله Relay
تابع رله(a: پیوند*، b: پیوند*): صحیح۶۴بسته یو دی پی جدید NewUDPPacket
تابع بسته یو دی پی جدید(): بسته یو دی پیبسته یو دی پی خالی برمیگرداند تا خواندن بسته یو دی پی آن را پر کند.نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Udp.salam
خواندن بسته یو دی پی ReadUDPPacket
تابع خواندن بسته یو دی پی(l &: پیوند، pkt &: بسته یو دی پی، payload &: فشرده سازی.بافر بایت): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Udp.salam
نوشتن بسته یو دی پی WriteUDPPacket
تابع نوشتن بسته یو دی پی(l &: پیوند، host: رشته، port: صحیح، p: تهی*، n: صحیح): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Udp.salam
اساچای۲۲۴ Sha224
تابع اساچای۲۲۴(p: تهی*، n: صحیح): فشرده سازی.بافر بایتنمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Wire.salam
هگز HexOf
تابع هگز(b: فشرده سازی.بافر بایت): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Wire.salam
اساچای۲۲۴ هگز Sha224Hex
تابع اساچای۲۲۴ هگز(s: رشته): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Wire.salam
درهم گذرواژه PasswordHash
تابع درهم گذرواژه(password: رشته): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Wire.salam
پیکربندی کارساز جدید NewServerConfig
تابع پیکربندی کارساز جدید(cert_file: رشته، key_file: رشته): پیکربندی کارسازسرویسدهی بدون رمز و سرویسدهی وبسوکت که TLS ندارند اشکالی ندارد.نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Client.salam
تعیین جایگزین SetFallback
تابع تعیین جایگزین(cfg &: پیکربندی کارساز، host: رشته، port: صحیح)// زبان: فارسی
واردسازی حافظه
واردسازی شبکه.تی سی پی
واردسازی شبکه.تروجان
واردسازی همگام سازی
ناپایا echo_port := 0
ناپایا web_port := 0
ناپایا web_seen := ""
ناپایا ready := همگام سازی.گروه انتظار جدید()
تابع echo_server():
srv := تی سی پی.پیوند(0)
echo_port = تی سی پی.درگاه(srv)
همگام سازی.اتمام(ready)
تا درست:
c := تی سی پی.پذیرش(srv)
تا درست:
data := تی سی پی.خواندن(c، 4096)
اگر data.طول() برابر 0:
بشکن
پایان
تی سی پی.نوشتن(c، "echo:" + data)
پایان
تی سی پی.بستن(c)
پایان
پایان
تابع web_server():
srv := تی سی پی.پیوند(0)
web_port = تی سی پی.درگاه(srv)
همگام سازی.اتمام(ready)
تا درست:
c := تی سی پی.پذیرش(srv)
web_seen = تی سی پی.خواندن(c، 4096)
تی سی پی.نوشتن(c، "HTTP/1.1 200 OK\r\nContent-Length: 12\r\nConnection: close\r\n\r\nhello probes")
تی سی پی.بستن(c)
پایان
پایان
تابع start_servers():
همگام سازی.افزودن(ready، 2 برگردان صحیح۶۴)
_a := نخساز(echo_server)
_b := نخساز(web_server)
همگام سازی.انتظار(ready)
پایان
تابع text_of(p: تهی*، n: صحیح): رشته:
buf := حافظه.تخصیص((n + 1) برگردان طبیعی۶۴)
حافظه.کپی(buf، p، n برگردان طبیعی۶۴)
(buf برگردان طبیعی۸*)[n] = 0 برگردان طبیعی۸
برگشت buf برگردان رشته
پایان
تابع read_text(l &: تروجان.پیوند، want: صحیح): رشته:
buf := حافظه.تخصیص(8192 برگردان طبیعی۶۴)
دیرکن حافظه.آزادسازی(buf)
ناپایا out := ""
تا out.طول() کوچکتر want:
n := تروجان.خواندن پیوند(l، buf، 8192)
اگر n کوچکتربرابر 0:
بشکن
پایان
out = out + text_of(buf، n)
پایان
برگشت out
پایان
تابع ریشه:
start_servers()
ناپایا config := تروجان.پیکربندی کارساز جدید(""، "")
تروجان.اجازه آدرسهای خصوصی(config، درست)
تروجان.افزودن گذرواژه(config، "secret")
تروجان.تعیین جایگزین(config، "127.0.0.1"، web_port)
سرچاپ config.میزبان جایگزین، config.درگاه جایگزین برابر web_port
server := تروجان.سرویسدهی بدون رمز(config، 0)
ناپایا wrong := تروجان.پیکربندی کارخواه جدید("127.0.0.1"، server.درگاه، "not the password")
wrong.با تی ال اس = نادرست
ناپایا stranger := تروجان.شماره گیری(wrong، "127.0.0.1"، echo_port)
answer := read_text(stranger، 40)
سرچاپ "wrong password gets a web page:"، answer.شروع با("HTTP/1.1 200 OK")، answer.دربردارد("hello probes")
تروجان.بستن پیوند(stranger)
probe := تی سی پی.شماره گیری("127.0.0.1"، server.درگاه)
تی سی پی.نوشتن(probe، "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n")
page := تی سی پی.خواندن(probe، 4096)
سرچاپ "plain web request gets the page too:"، page.دربردارد("hello probes")
تی سی پی.بستن(probe)
سرچاپ "the site saw:"، web_seen.زیررشته(0، 14)
ناپایا right := تروجان.پیکربندی کارخواه جدید("127.0.0.1"، server.درگاه، "secret")
right.با تی ال اس = نادرست
ناپایا member := تروجان.شماره گیری(right، "127.0.0.1"، echo_port)
تروجان.نوشتن متن پیوند(member، "real client")
سرچاپ read_text(member، 16)
تروجان.بستن پیوند(member)
همگام سازی.خواب میلی ثانیه(300)
stats := تروجان.آمار(server)
سرچاپ "accepted"، stats.پذیرفتهشده، "authed"، stats.احرازشده، "fallbacks"، stats.جایگزینشده
تروجان.توقف(server)
پایانافزودن گذرواژه AddPassword
تابع افزودن گذرواژه(cfg &: پیکربندی کارساز، password: رشته)نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Client.salam
افزودن درهم گذرواژه AddPasswordHash
تابع افزودن درهم گذرواژه(cfg &: پیکربندی کارساز، hash: رشته)نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Client.salam
دستدهی Handshake
تابع دستدهی(l &: پیوند، cfg: پیکربندی کارساز): نشستنشست برمیگرداند. هرگز به کارخواه پاسخ نمیدهد.نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Handshake.salam
آزاد کردن نشست FreeSession
تابع آزاد کردن نشست(s &: نشست)نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Handshake.salam
جایگزین Fallback
تابع جایگزین(lp: پیوند*، cfg: پیکربندی کارساز، seen: فشرده سازی.بافر بایت): منطقیپاسخ به پیوند ServeLink
تابع پاسخ به پیوند(lp: پیوند*، cfg: پیکربندی کارساز): صحیحبه صورت جریان AsStream
تابع به صورت جریان(lp: پیوند*): dyn تونل.جریانپیوند را به صورت tunnel.Stream درمیآورد.نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Modes.salam
تعیین حالت SetMode
تابع تعیین حالت(cfg &: پیکربندی کارساز، mode: صحیح)شنود به کار میبرد برمیگزیند.نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Modes.salam
تعیین میزبان شنود SetBind
تابع تعیین میزبان شنود(cfg &: پیکربندی کارساز، host: رشته)شنود میبندد تعیین میکند؛ bind_host را ببینید.نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Modes.salam
تعیین شمارهگیر SetDialer
تابع تعیین شمارهگیر(cfg &: پیکربندی کارساز، d: dyn تونل.شمارهگیر)tunnel.Dialer میگذراند، مثلاً یک زنجیره یا پراکسی دیگر.نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Modes.salam
تعیین مسیریاب SetRouter
تابع تعیین مسیریاب(cfg &: پیکربندی کارساز، rd: تونل.شمارهگیر مسیریاب)tunnel.RouterDialer میگذراند تا قاعدهها برای هر مقصد تعیین کنند مستقیم برود، از پراکسی بگذرد یا بسته شود.نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Modes.salam
تعیین سیاست مقصد SetPolicy
تابع تعیین سیاست مقصد(cfg &: پیکربندی کارساز، p: تونل.سیاست مقصد)اجازه آدرسهای خصوصی AllowPrivate
تابع اجازه آدرسهای خصوصی(cfg &: پیکربندی کارساز، enabled: منطقی)تعیین آمار ترافیک SetStats
تابع تعیین آمار ترافیک(cfg &: پیکربندی کارساز، st: تونل.آمار)tunnel.Stats که نگه میدارید میشمارد.نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Modes.salam
شنود Listen
تابع شنود(cfg: پیکربندی کارساز، port: صحیح): کارسازحالت تی ال اس، حالت ساده یا حالت وبسوکت) روی نشانی پیکربندیشده و یک درگاه (۰ یکی آزاد برمیگزیند) راه میاندازد. سرویسدهی، سرویسدهی بدون رمز و سرویسدهی وبسوکت همین فراخوانی با حالت ثابتاند. معتبر را بررسی کنید.نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Modes.salam
سرویسدهی Serve
تابع سرویسدهی(cfg: پیکربندی کارساز، port: صحیح): کارسازمعتبر را بررسی کنید.نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Tls.salam
سرویسدهی بدون رمز ServePlain
تابع سرویسدهی بدون رمز(cfg: پیکربندی کارساز، port: صحیح): کارسازنمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Client.salam
سرویسدهی وبسوکت ServeWS
تابع سرویسدهی وبسوکت(cfg: پیکربندی کارساز، port: صحیح): کارسازنمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-WebSocket.salam
درگاه کارساز ServerPort
تابع درگاه کارساز(s: کارساز): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Client.salam
آمار Stats
تابع آمار(s: کارساز): آمار کارسازنمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Client.salam
توقف Stop
تابع توقف(s: کارساز)نمونهی این مورد همراه با موارد بالاتر آمده است: net-trojan-Client.salam