أداة شبكة قابلة للبرمجة عبر الأنظمة الأساسية.
❤️ Shiliew - تطبيق شبكة مصمم لأولئك الذين يقدرون وقتهم
bash <(curl https://bash.ooo/nami.sh)
nami install brook
brook server -l :9999 -p hello
قد ترغب في استخدام
brook link
لتخصيص بعض المعلمات
ستقوم Brook GUI بتمرير متغيرات عامة مختلفة إلى البرنامج النصي في أوقات مختلفة، ويحتاج البرنامج النصي فقط إلى تعيين نتيجة المعالجة للمتغير out
قبل مناقشة عميل واجهة المستخدم الرسومية، دعنا نتحدث أولاً عن عميل سطر الأوامر brook
. كما نعلم، بعد نشر الخادم، يمكنك استخدام عميل سطر الأوامر brook
لإنشاء وكيل SOCKS5 محلي أو وكيل http على جهازك، ثم تكوينه في إعدادات وكيل النظام لديك أو في متصفحك لاستخدام هذا الوكيل. لكن:
للحصول على تفاصيل SOCKS5 وHTTP الوكيل، يمكنك قراءة هذه المقالة.
لا يستخدم عميل واجهة المستخدم الرسومية وضع الوكيل socks5 وhttp، لذلك لا توجد مشكلة في عدم استخدام بعض البرامج لوكيل النظام. وبدلاً من ذلك، يستخدم بطاقة شبكة افتراضية لتولي شبكة النظام بالكامل، بما في ذلك http3 المستند إلى UDP. علاوة على ذلك، يتيح لنا Brook التحكم في طلبات الشبكة برمجيًا، لذلك من الضروري أن يكون لدينا معرفة أساسية بطلبات الشبكة.
ملاحظة: عندما نتحدث عن العناوين، فإننا نقصد العناوين التي تتضمن رقم المنفذ، مثل عنوان المجال:
google.com:443
، أو عنوان IP:8.8.8.8:53
google.com:443
8.8.8.8:53
، للاستعلام عن IP الخاص بـ google.com
google.com
، مثل 1.2.3.4
، إلى التطبيق1.2.3.4:443
1.2.3.4:443
في العملية المذكورة أعلاه، يقوم التطبيق فعليًا بإرسال طلبين للشبكة: أحدهما إلى عنوان IP 8.8.8.8:53
والآخر إلى عنوان IP 1.2.3.4:443
. بمعنى آخر، اسم المجال هو في الأساس اسم مستعار لعنوان IP، ويجب الحصول على عنوان IP الخاص بالمجال لتأسيس اتصال.
يتمتع Brook بميزة Fake DNS، والتي يمكنها تحليل اسم المجال من طلبات الاستعلام التي يرسلها التطبيق إلى نظام DNS الخاص بالنظام وتحديد كيفية الرد على التطبيق.
google.com:443
8.8.8.8:53
، للاستعلام عن عنوان IP الخاص بـ google.com
8.8.8.8:53
. سيؤدي هذا إلى تشغيل المتغير in_dnsquery
الذي يحمل معلومات مثل domain
240.0.0.1
240.0.0.1:443
240.0.0.1:443
240.0.0.1:443
، ويكتشف أن هذا عنوان IP مزيف، وسيقوم بتحويل عنوان IP المزيف مرة أخرى إلى عنوان المجال google.com:443
. سيؤدي هذا إلى تشغيل المتغير in_address
الذي يحمل معلومات مثل domainaddress
google.com:443
إلى خادم Brookgoogle.com
، مثل تلقي 1.2.3.4
1.2.3.4:443
1.2.3.4:443
ويعيد البيانات إلى عميل Brookومع ذلك، في حالة حدوث المواقف التالية، لن/لا يمكن تحليل اسم المجال، مما يعني أن عميل Brook لن/لا يستطيع معرفة اسم المجال وسيتعامل معه كطلب عادي تم إرساله إلى عنوان IP:
لتجنب عدم فعالية DNS المزيف، يرجى الرجوع إلى هذه المقالة.
google.com:443
8.8.8.8:53
، للاستعلام عن عنوان IP الخاص بـ google.com
8.8.8.8:53
. سيؤدي هذا إلى تشغيل المتغير in_address
الذي يحمل معلومات مثل ipaddress
8.8.8.8:53
إلى خادم Brook8.8.8.8:53
ويعيد النتيجة، مثل 1.2.3.4
، إلى عميل Brook1.2.3.4:443
1.2.3.4:443
1.2.3.4:443
. سيؤدي هذا إلى تشغيل المتغير in_address
الذي يحمل معلومات مثل ipaddress
1.2.3.4:443
إلى خادم Brook1.2.3.4:443
ويعيد البيانات إلى عميل Brookgoogle.com:443
8.8.8.8:443
، للاستعلام عن IP الخاص بموقع google.com
8.8.8.8:443
. سيؤدي هذا إلى تشغيل المتغير in_address
الذي يحمل معلومات مثل ipaddress
8.8.8.8:443
إلى خادم Brook8.8.8.8:443
ويعيد النتيجة، مثل 1.2.3.4
، إلى عميل Brook1.2.3.4:443
1.2.3.4:443
1.2.3.4:443
. سيؤدي هذا إلى تشغيل المتغير in_address
الذي يحمل معلومات مثل ipaddress
1.2.3.4:443
إلى خادم Brook1.2.3.4:443
ويعيد البيانات إلى عميل Brookلتجنب عدم فعالية DNS المزيف، يرجى الرجوع إلى هذه المقالة.
in_brooklinks
:in_dnsquery
، يمكنك المعالجة حسب الحاجة، مثل:in_address
، يمكنك المعالجة حسب الحاجة، مثل:in_httprequest
و in_httpresponse
.in_httprequest
، يمكنك المعالجة حسب الحاجة، مثل:in_httpresponse
، يمكنك المعالجة حسب الحاجة، مثل:للحصول على معلومات مفصلة عن خصائص واستجابات المتغيرات، يرجى الرجوع إلى المحتوى التالي.
عامل | يكتب | حالة | توقيت | وصف | نوع خارج |
---|---|---|---|---|---|
in_brooklinks | رسم خريطة | / | قبل الاتصال | قم بالتعريف المسبق لارتباطات جدول متعددة، ثم حدد الارتباط الذي تريد الاتصال به برمجيًا | رسم خريطة |
in_dnsquery | رسم خريطة | نظام أسماء النطاقات المزيف: قيد التشغيل | عند حدوث استعلام DNS | يمكن للبرنامج النصي أن يقرر كيفية التعامل مع هذا الطلب | رسم خريطة |
in_address | رسم خريطة | / | عند الاتصال بالعنوان | البرنامج النصي يمكن أن يقرر كيفية الاتصال | رسم خريطة |
in_httprequest | رسم خريطة | / | عندما يأتي طلب HTTP(S). | يمكن للبرنامج النصي أن يقرر كيفية التعامل مع هذا الطلب | رسم خريطة |
in_httprequest,in_httpresponse | رسم خريطة | / | عندما تأتي استجابة HTTP(S). | يمكن للبرنامج النصي أن يقرر كيفية التعامل مع هذه الاستجابة | رسم خريطة |
مفتاح | يكتب | وصف | مثال |
---|---|---|---|
_ | منطقي | لا معنى له | حقيقي |
out
، تم تجاهله إن لم يكن من نوع map
مفتاح | يكتب | وصف | مثال |
---|---|---|---|
... | ... | ... | ... |
اسم مخصص | خيط | رابط البروك | بروك://... |
... | ... | ... | ... |
مفتاح | يكتب | وصف | مثال |
---|---|---|---|
اِختِصاص | خيط | اسم المجال | google.com |
يكتب | خيط | نوع الاستعلام | أ |
appid | خيط | معرف التطبيق أو المسار | com.google.Chrome.helper |
واجهة | خيط | واجهة الشبكة. ماك فقط | أون0 |
out
، إذا كان سيتم تسجيل نوع error
في السجل. تم تجاهله إن لم يكن من نوع map
مفتاح | يكتب | وصف | مثال |
---|---|---|---|
حاجز | منطقي | سواء كان الحظر، false الافتراضي | خطأ شنيع |
الملكية الفكرية | خيط | حدد IP مباشرة، وهو صالح فقط عندما يكون type A / AAAA | 1.2.3.4 |
نظام | منطقي | الحل عن طريق نظام DNS، الافتراضي false | خطأ شنيع |
تجاوز | منطقي | الحل عن طريق تجاوز DNS، الافتراضي false | خطأ شنيع |
com.brooklinkkey | خيط | عندما تحتاج إلى توصيل الخادم، بدلاً من ذلك، اتصل بالخادم المحدد بواسطة المفتاح in_brooklinks | اسم مخصص |
مفتاح | يكتب | وصف | مثال |
---|---|---|---|
شبكة | خيط | نوع الشبكة، وقيمة tcp / udp | tcp |
com.ipaddress | خيط | عنوان نوع IP. لا يوجد سوى ipaddress و domainaddress. لاحظ أنه لا توجد علاقة بين هذين الأمرين | 1.2.3.4:443 |
عنوان المجال | خيط | عنوان نوع المجال، بسبب FakeDNS يمكننا الحصول على عنوان اسم المجال هنا | جوجل.كوم:443 |
appid | خيط | معرف التطبيق أو المسار | com.google.Chrome.helper |
واجهة | خيط | واجهة الشبكة. ماك فقط | أون0 |
out
، إذا كان سيتم تسجيل نوع error
في السجل. تم تجاهله إن لم يكن من نوع map
مفتاح | يكتب | وصف | مثال |
---|---|---|---|
حاجز | منطقي | سواء كان الحظر، false الافتراضي | خطأ شنيع |
com.ipaddress | خيط | عنوان نوع IP، أعد كتابة الوجهة | 1.2.3.4:443 |
ipaddressfrombypassdns | خيط | استخدم Bypass DNS للحصول على A أو AAAA IP وإعادة كتابة الوجهة، صالح فقط عند وجود domainaddress ، القيمة A / AAAA | أ |
تجاوز | منطقي | تجاوز، false افتراضي. إذا كان true و domainaddress ، فيجب تحديد ipaddress أو ipaddressfrombypassdns | خطأ شنيع |
ميتم | منطقي | ما إذا كان سيتم تنفيذ MITM أم لا، فالوضع الافتراضي false . صالحة فقط عندما تكون network tcp . تحتاج إلى تثبيت CA، انظر أدناه | خطأ شنيع |
com.mitmprotocol | خيط | يجب تحديد بروتوكول MITM بشكل صريح، والقيمة هي http / https | https |
mitmcertdomain | خيط | اسم مجال شهادة MITM، المأخوذ من domainaddress افتراضيًا. إذا كان ipaddress و mitm true وكان mitmprotocol هو https ، فيجب تحديدهما بشكل صريح | example.com |
mitmwithbody | منطقي | ما إذا كان سيتم التعامل مع نص http أم لا، false الافتراضي هو . سوف يقرأ نص الطلب والاستجابة في الذاكرة ويتفاعل مع البرنامج النصي. قد يؤدي الحد الإجمالي للذاكرة لنظام iOS 50M إلى إنهاء العملية | خطأ شنيع |
com.mitmautohandlecompress | منطقي | ما إذا كان سيتم إلغاء ضغط نص http تلقائيًا عند التفاعل مع البرنامج النصي، أم لا، فالوضع الافتراضي false | خطأ شنيع |
mitmclienttimeout | كثافة العمليات | مهلة تحدث MITM إلى الخادم، الثانية، الافتراضية 0 | 0 |
mitmserverreadtimeout | كثافة العمليات | مهلة MITM للقراءة من العميل، الثانية، الافتراضية 0 | 0 |
mitmserverwritetimeout | كثافة العمليات | مهلة الكتابة إلى العميل لـ MITM، الثانية، الافتراضية 0 | 0 |
com.brooklinkkey | خيط | عندما تحتاج إلى توصيل الخادم، بدلاً من ذلك، اتصل بالخادم المحدد بواسطة المفتاح in_brooklinks | اسم مخصص |
مفتاح | يكتب | وصف | مثال |
---|---|---|---|
عنوان URL | خيط | عنوان URL | https://example.com/hello |
طريقة | خيط | طريقة HTTP | يحصل |
جسم | بايت | نص طلب HTTP | / |
... | خيط | الحقول الأخرى هي رؤوس HTTP | / |
out
، يجب ضبطه على طلب أو استجابة
مفتاح | يكتب | وصف | مثال |
---|---|---|---|
رمز الحالة | كثافة العمليات | رمز حالة HTTP | 200 |
جسم | بايت | نص استجابة HTTP | / |
... | خيط | الحقول الأخرى هي رؤوس HTTP | / |
out
، يجب ضبطه على الاستجابة
في Brook GUI، يتم تلخيص البرامج النصية في وحدات . توجد بالفعل بعض الوحدات، وليس هناك أي سحر، فهي تجمع تلقائيًا بين _header.tengo و_footer.tengo، لذلك تحتاج فقط إلى كتابة الوحدة نفسها.
modules = append(modules, {
// If you want to predefine multiple brook links, and then programmatically specify which one to connect to, then define `brooklinks` key a function
brooklinks: func(m) {
// Please refer to the example in `brooklinks.tengo`
},
// If you want to intercept and handle a DNS query, then define `dnsquery` key a function, `m` is the `in_dnsquery`
dnsquery: func(m) {
// Please refer to the example in `block_aaaa.tengo`
},
// If you want to intercept and handle an address, then define `address` key a function, `m` is the `in_address`
address: func(m) {
// Please refer to the example in `block_google_secure_dns.tengo`
},
// If you want to intercept and handle a http request, then define `httprequest` key a function, `request` is the `in_httprequest`
httprequest: func(request) {
// Please refer to the example in `ios_app_downgrade.tengo` or `redirect_google_cn.tengo`
},
// If you want to intercept and handle a http response, then define `httpresponse` key a function, `request` is the `in_httprequest`, `response` is the `in_httpresponse`
httpresponse: func(request, response) {
// Please refer to the example in `response_sample.tengo`
}
})
https://github.com/txthinking/tun2brook
إذا كنت تستخدم tun2brook، فيمكنك دمج وحدات متعددة يدويًا في برنامج نصي كامل بالطريقة التالية. على سبيل المثال:
cat _header.tengo > my.tengo
cat block_google_secure_dns.tengo >> my.tengo
cat block_aaaa.tengo >> my.tengo
cat _footer.tengo >> my.tengo
بناء جملة لغة تينغو
مكتبة
النص: التعبيرات العادية، وتحويل السلسلة، والتلاعب
الرياضيات: الثوابت والدوال الرياضية
الأوقات: الوظائف المرتبطة بالوقت
راند: وظائف عشوائية
FMT: وظائف التنسيق
json: وظائف JSON
التعداد: وظائف التعداد
عرافة: وظائف التشفير وفك التشفير
base64: وظائف التشفير وفك التشفير base64
brook
: وحدة بروك
Constants
* os: string, linux/darwin/windows/ios/android
Functions
* splithostport(address string) => map/error: splits a network address of the form "host:port" to { "host": "xxx", "port": "xxx" }
* country(ip string) => string/error: get country code from ip
* cidrcontainsip(cidr string, ip string) => bool/error: reports whether the network includes ip
* parseurl(url string) => map/error: parses a raw url into a map, keys: scheme/host/path/rawpath/rawquery
* parsequery(query string) => map/error: parses a raw query into a kv map
* map2query(kv map) => string/error: convert map{string:string} into a query string
* bytes2ints(b bytes) => array/error: convert bytes into [int]
* ints2bytes(ints array) => bytes/error: convert [int] into bytes
* bytescompare(a bytes, b bytes) => int/error: returns an integer comparing two bytes lexicographically. The result will be 0 if a == b, -1 if a < b, and +1 if a > b
* bytescontains(b bytes, sub bytes) => bool/error: reports whether sub is within b
* byteshasprefix(s bytes, prefix bytes) => bool/error: tests whether the bytes s begins with prefix
* byteshassuffix(s bytes, suffix bytes) => bool/error: tests whether the bytes s ends with suffix
* bytesindex(s bytes, sep bytes) => int/error: returns the index of the first instance of sep in s, or -1 if sep is not present in s
* byteslastindex(s bytes, sep bytes) => int/error: returns the index of the last instance of sep in s, or -1 if sep is not present in s
* bytesreplace(s bytes, old bytes, new bytes, n int) => bytes/error: returns a copy of the s with the first n non-overlapping instances of old replaced by new. If n < 0, there is no limit on the number of replacements
* pathescape(s string) => string/error: escapes the string so it can be safely placed inside a URL path segment, replacing special characters (including /) with %XX sequences as needed
* pathunescape(s string) => string/error: does the inverse transformation of pathescape
* queryescape(s string) => string/error: escapes the string so it can be safely placed inside a URL query
* queryunescape(s string) => string/error: does the inverse transformation of queryescape
* hexdecode(s string) => bytes/error: returns the bytes represented by the hexadecimal string s
* hexencode(s string) => string/error: returns the hexadecimal encoding of src
إذا كنت تكتب نصوصًا معقدة، فقد لا تكون واجهة المستخدم الرسومية ملائمة لتصحيح الأخطاء. يوصى باستخدام tun2brook على سطح المكتب لتصحيح الأخطاء باستخدام fmt.println
https://txthinking.github.io/ca/ca.pem
نظام التشغيل | كيف |
---|---|
دائرة الرقابة الداخلية | https://www.youtube.com/watch?v=HSGPC2vpDGk |
أندرويد | يحتوي Android على CA للمستخدم ونظام CA، ويجب تثبيتهما في CA الخاص بالنظام بعد ROOT |
ماك | nami install mad ca.txthinking ، sudo mad install --ca ~/.nami/bin/ca.pem |
ويندوز | nami install mad ca.txthinking ، المشرف: mad install --ca ~/.nami/bin/ca.pem |
قد لا تتمكن بعض البرامج من قراءة CA الخاص بالنظام، ويمكنك استخدام
curl --cacert ~/.nami/bin/ca.pem
لتصحيح الأخطاء
Brook OpenWRT: يدعم بشكل مثالي IPv4/IPv6/TCP/UDP
يعتبر موقف Brook بشأن IPv6 إيجابيًا، إذا لم يكن خادمك أو بيئتك المحلية تحتوي على مكدس IPv6، فاقرأ هذه المقالة.
brook link --address
، فسيحاول عميل Brook تحليل عنوان IP الخاص بالمجال باستخدام DNS المحلي، مفضلاً سجل AAAA. على سبيل المثال:Connectivity Check
. إذا كان يعمل أحياناً دون أخرى، فهذا يدل على عدم الاستقرار.Test IPv4 TCP
للاختبار؛ لقد قام هذا الاختبار بترميز عنوان IP بشكل ثابت، لذا لا يؤدي إلى تشغيل تحليل DNS.Test IPv4 UDP
للاختبار؛ لقد قام هذا الاختبار بترميز عنوان IP بشكل ثابت، لذا لا يؤدي إلى تشغيل تحليل DNS.Test IPv6 TCP
للاختبار؛ لقد قام هذا الاختبار بترميز عنوان IP بشكل ثابت، لذا لا يؤدي إلى تشغيل تحليل DNS.Test IPv6 UDP
للاختبار؛ لقد قام هذا الاختبار بترميز عنوان IP بشكل ثابت، لذا لا يؤدي إلى تشغيل تحليل DNS.Echo Client
للاختبار. إذا كان خادم الصدى الذي تم إدخاله عبارة عن عنوان مجال، فسيؤدي إلى تشغيل تحليل DNS.Block Google Secure DNS
. بالنسبة للحالات الأخرى، راجع هذه المقالة.Block Google Secure DNS
Bypass Geo
Bypass Apple
: لمنع حدوث مشكلات في تلقي إشعارات رسائل Apple.Bypass China domain
أو Bypass China domain A
: يستخدم الأول Bypass DNS
للحصول على عنوان IP، ثم يقرر Bypass Geo
أو الوحدات الأخرى ما إذا كان سيتم التجاوز أم لا؛ يتم تجاوز هذا الأخير مباشرة بعد الحصول على IP باستخدام Bypass DNS
باستخدام سجلات A. هذا الأخير مطلوب إذا كان جهازك المحلي لا يدعم IPv6. يحتوي كل أمر فرعي على معلمة --example
التي يمكنها طباعة الحد الأدنى من أمثلة الاستخدام
Brook - أداة شبكة قابلة للبرمجة عبر الأنظمة الأساسية
بروك
brook --help
الاستخدام :
Brook [GLOBAL OPTIONS] command [COMMAND OPTIONS] [ARGUMENTS...]
--blockCIDR4List ="": CIDR واحد لكل سطر، https://، http:// أو المسار المطلق للملف المحلي، مثل: https://raw.githubusercontent.com/txthinking/brook/master/programmable/list/example_cidr4 .رسالة قصيرة. يعمل مع الخادم/wsserver/wssserver/quicserver
--blockCIDR6List ="": CIDR واحد لكل سطر، https://، http:// أو المسار المطلق للملف المحلي، مثل: https://raw.githubusercontent.com/txthinking/brook/master/programmable/list/example_cidr6 .رسالة قصيرة. يعمل مع الخادم/wsserver/wssserver/quicserver
--blockDomainList ="": مجال واحد في كل سطر، وضع مطابقة اللاحقة. https://، http:// أو المسار المطلق للملف المحلي. مثل: https://raw.githubusercontent.com/txthinking/brook/master/programmable/list/example_domain.txt. يعمل مع الخادم/wsserver/wssserver/quicserver
--blockGeoIP ="": حظر IP عن طريق رمز البلد الجغرافي، مثل الولايات المتحدة. يعمل مع الخادم/wsserver/wssserver/quicserver
--blockListUpdateInterval ="": تحديث القائمة --blockDomainList,--blockCIDR4List,--blockCIDR6List الفاصل الزمني، ثانية. الافتراضي 0، القراءة مرة واحدة فقط في البداية (الافتراضي: 0)
--clientHKDFInfo ="": معلومات العميل HKDF، في معظم الأوقات لا تحتاج إلى تغيير هذا، إذا تم التغيير، يجب أن تكون جميع روابط الجدول في جانب العميل هي نفسها، أعني كل منها (الافتراضي: "brook")
--dialWithDNS ="": عندما يلزم حل اسم المجال، استخدم DNS المحدد. مثل 8.8.8.8:53 أو https://dns.google/dns-query?address=8.8.8.8%3A443، العنوان مطلوب. لاحظ أنه بالنسبة للأوامر من جانب العميل، فإن هذا لا يؤثر على العميل الذي يقوم بتمرير عنوان المجال إلى الخادم
--dialWithDNSPrefer ="": يُستخدم هذا مع المعلمة dialWithDNS. تفضل سجل أو سجل AAAA. القيمة هي A أو AAAA
--dialWithIP4 ="": عندما يقوم الجهاز الحالي بإنشاء اتصال شبكة بـ IPv4 الخارجي، كل من TCP وUDP، يتم استخدامه لتحديد IPv4 المستخدم
--dialWithIP6 ="": عندما يقوم الجهاز الحالي بإنشاء اتصال شبكة بـ IPv6 الخارجي، كل من TCP وUDP، يتم استخدامه لتحديد IPv6 المستخدم
--dialWithNIC ="": عندما يقوم الجهاز الحالي بإنشاء اتصال شبكة بالخارج، يتم استخدام كل من TCP وUDP لتحديد بطاقة NIC المستخدمة
--dialWithSocks5 ="": عندما يقوم الجهاز الحالي بإنشاء اتصال شبكة بالخارج، كل من TCP وUDP، مع وكيل Socks5، مثل 127.0.0.1:1081
--dialWithSocks5Password ="": إذا كان هناك
--dialWithSocks5TCPTimeout ="": الوقت (الأوقات) (الافتراضي: 0)
--dialWithSocks5UDPTimeout ="": الوقت (الأوقات) (الافتراضي: 60)
--dialWithSocks5Username ="": إذا كان هناك
--ipLimitInterval ="": الفاصل الزمني (الفترات) لـ ipLimitMax (الافتراضي: 0)
--ipLimitMax ="": حدد عدد عناوين IP للعميل، وكن حذرًا عند استخدام هذه المعلمة، حيث قد يكون لدى العميل IP ديناميكي. يعمل مع الخادم/wsserver/wssserver/quicserver (الافتراضي: 0)
--ipLimitWait ="": كم من الوقت يجب انتظار الاسترداد بعد تجاوز ipLimitMax (الافتراضي: 0)
--log ="": تمكين السجل. القيمة الصالحة هي مسار الملف أو "وحدة التحكم". أرسل لي SIGUSR1 لإعادة ضبط ملف السجل على نظام يونكس. إذا كنت تريد تصحيح أخطاء SOCKS5 lib، فاضبط env SOCKS5_DEBUG=true
--pid ="": مسار ملف يستخدم لتخزين pid. أرسل لي SIGUSR1 لإعادة ضبط ملف --serverLog على نظام يونكس
--pprof ="": اذهب إلى http pprof واستمع إلى العنوان، مثل :6060
--prometheus ="": عنوان الاستماع لـ prometheus http، مثل :7070. إذا تم نقله على الشبكة العامة، فمن المستحسن استخدامه مع نيكو
--prometheusPath ="": مسار http الخاص ببروميثيوس، مثل /xxx. إذا تم نقله على الشبكة العامة، فمن المستحسن استخدام قيمة يصعب تخمينها
--serverHKDFInfo ="": معلومات خادم HKDF، في معظم الأحيان لا تحتاج إلى تغيير هذا، إذا تم تغييرها، يجب أن تكون جميع روابط الجدول في جانب العميل هي نفسها، أعني كل منها (الافتراضي: "brook")
--serverLog ="": تمكين سجل الخادم وحركة المرور والمزيد. القيمة الصالحة هي مسار الملف أو "وحدة التحكم". أرسل لي SIGUSR1 لإعادة ضبط ملف السجل على نظام يونكس. حصريًا بشكل متبادل مع المعلمة --log. يعمل مع الخادم/wsserver/wssserver/quicserver مع بروتوكول Brook
--speedLimit ="": السرعة القصوى (b)، 500 كيلو بايت/ثانية مثل: 500000، تعمل مع الخادم/wsserver/wssserver/quicserver (الافتراضي: 0)
--tag ="": يمكن استخدام العلامة في العملية، وسيتم إلحاقها بالسجل أو سجل الخادم، مثل: 'key1:value1'. سيتم أيضًا إلحاق جميع العلامات كمعلمات استعلام واحدة تلو الأخرى إلى userAPI
--userAPI ="": عندما تقوم بإنشاء نظام المستخدم الخاص بك، سيرسل Brook Server طلب GET إلى userAPI الخاص بك للتحقق مما إذا كان الرمز المميز صالحًا، على سبيل المثال: https://your-api-server.com/a_unpredictable_path. نعم، يوصى بإضافة مسار غير متوقع إلى واجهة برمجة تطبيقات https الخاصة بك، وبالطبع، يمكنك أيضًا استخدام واجهة برمجة تطبيقات http للاتصالات الداخلية بالشبكة. تنسيق الطلب هو https://your-api-server.com/a_unpredictable_path?token=xxx. عندما تكون الاستجابة 200، يجب أن يكون النص هو المعرف الفريد للمستخدم، مثل معرف المستخدم؛ تعتبر كافة رموز الحالة الأخرى تمثل مستخدمًا غير شرعي، وفي هذه الحالات، يجب أن يكون النص عبارة عن سلسلة تصف الخطأ. يجب استخدامه مع --serverLog وserver/wsserver/wssserver/quicserver مع بروتوكول Brook. لمزيد من المعلومات، يرجى قراءة https://github.com/txthinking/brook/blob/master/protocol/user.md
--userAPIInvalidCacheTime ="": بمجرد التحقق من الرمز المميز وعدم صلاحيته، لن يُطلب من userAPI التحقق من صحته مرة أخرى لفترة (فترات) معينة. يجب تعيين قيمة معقولة، وإلا فإنها ستؤثر على أداء كل اتصال وارد. لاحظ أن هذا قد يؤثر على تجربة المستخدم، عندما تقوم بتغيير حالة المستخدم من غير صالح إلى صالح في نظام المستخدم الخاص بك (الافتراضي: 1800)
--userAPIValidCacheTime ="": بمجرد التحقق من الرمز المميز وصلاحيته، لن يُطلب من userAPI التحقق من صحته مرة أخرى لفترة (فترات) معينة. يجب تعيين قيمة معقولة، وإلا فإنها ستؤثر على أداء كل اتصال وارد (الافتراضي: 3600)
--version, -v : اطبع النسخة
قم بتشغيل خادم Brook الذي يدعم TCP وUDP
--blockCIDR4List ="": ستتم إزالة هذا الخيار في إصدار مستقبلي، يرجى استخدام الخيار العام بدلاً من ذلك
--blockCIDR6List ="": ستتم إزالة هذا الخيار في إصدار مستقبلي، يرجى استخدام الخيار العام بدلاً من ذلك
--blockDomainList ="": ستتم إزالة هذا الخيار في إصدار مستقبلي، يرجى استخدام الخيار العام بدلاً من ذلك
--blockGeoIP ="": ستتم إزالة هذا الخيار في إصدار مستقبلي، يرجى استخدام الخيار العام بدلاً من ذلك
--example : أظهر مثالًا بسيطًا للاستخدام
--listen, -l ="": عنوان الاستماع، مثل: ':9999'
--password, -p ="": كلمة مرور الخادم
--tcpTimeout ="": الوقت (الأوقات) (الافتراضي: 0)
--udpTimeout ="": الوقت (الأوقات) (الافتراضي: 0)
--updateListInterval ="": ستتم إزالة هذا الخيار في إصدار مستقبلي، يرجى استخدام الخيار العام بدلاً من ذلك (الافتراضي: 0)
ابدأ تشغيل عميل Brook الذي يدعم TCP وUDP. يمكنه فتح وكيل SOCKS5، [src <-> SOCKS5 <-> $ Brook Client <-> $ Brook Server <-> DST]
--example : أظهر مثالًا بسيطًا للاستخدام
--http ="": مكان الاستماع إلى اتصالات وكيل HTTP
--link ="": رابط Brook، يمكنك الحصول عليه عبر رابط $ Brook. سيتم تجاهل معلمات wssserver وكلمة المرور
--password, -p ="": كلمة مرور خادم Brook
--server, -s ="": عنوان خادم Brook، مثل: 1.2.3.4:9999
--socks5 ="": مكان الاستماع إلى اتصالات SOCKS5 (الافتراضي: 127.0.0.1:1080)
--socks5ServerIP ="": فقط إذا كان IP لخادم Sock5 الخاص بك مختلفًا عن IP الخاص بالاستماع
--tcpTimeout ="": الوقت (الأوقات) (الافتراضي: 0)
--udpTimeout ="": الوقت (الأوقات) (الافتراضي: 0)
ابدأ تشغيل خادم Brook wsserver الذي يدعم TCP وUDP. يفتح خادم http قياسي وخادم websocket
--blockCIDR4List ="": ستتم إزالة هذا الخيار في إصدار مستقبلي، يرجى استخدام الخيار العام بدلاً من ذلك
--blockCIDR6List ="": ستتم إزالة هذا الخيار في إصدار مستقبلي، يرجى استخدام الخيار العام بدلاً من ذلك
--blockDomainList ="": ستتم إزالة هذا الخيار في إصدار مستقبلي، يرجى استخدام الخيار العام بدلاً من ذلك
--blockGeoIP ="": ستتم إزالة هذا الخيار في إصدار مستقبلي، يرجى استخدام الخيار العام بدلاً من ذلك
--example : أظهر مثالًا بسيطًا للاستخدام
--listen, -l ="": عنوان الاستماع، مثل: ':80'
--password, -p ="": كلمة مرور الخادم
--path ="": مسار URL (الافتراضي: /ws)
--tcpTimeout ="": الوقت (الأوقات) (الافتراضي: 0)
--udpTimeout ="": الوقت (الأوقات) (الافتراضي: 0)
--updateListInterval ="": ستتم إزالة هذا الخيار في إصدار مستقبلي، يرجى استخدام الخيار العام بدلاً من ذلك (الافتراضي: 0)
--withoutBrookProtocol : لن يتم تشفير البيانات باستخدام بروتوكول Brook
--xForwardedFor : استبدل الحقل from في --log، لاحظ أن هذا قد يكون مزورًا
بدء تشغيل wsclient Brook الذي يدعم TCP وUDP. يمكنه فتح وكيل SOCKS5، [src <-> Socks5 <-> $ Brook wsclient <-> $ Brook wsserver <-> dst]
--example : أظهر مثالًا بسيطًا للاستخدام
--http ="": مكان الاستماع إلى اتصالات وكيل HTTP
--link ="": رابط Brook، يمكنك الحصول عليه عبر رابط $ Brook. سيتم تجاهل معلمات wssserver وكلمة المرور
--password, -p ="": كلمة مرور Brook wsserver
--socks5 ="": مكان الاستماع إلى اتصالات SOCKS5 (الافتراضي: 127.0.0.1:1080)
--socks5ServerIP ="": فقط إذا كان IP لخادم Sock5 الخاص بك مختلفًا عن IP الخاص بالاستماع
--tcpTimeout ="": الوقت (الأوقات) (الافتراضي: 0)
--udpTimeout ="": الوقت (الأوقات) (الافتراضي: 0)
--wsserver, -s ="": عنوان Brook wsserver، مثل: ws://1.2.3.4:80، إذا لم يكن هناك مسار، فسيتم استخدام /ws. لا تحذف المنفذ تحت أي ظرف من الظروف
ابدأ تشغيل خادم wsssserver الذي يدعم tcp وudp. يفتح خادم https قياسي وخادم websocket
--blockCIDR4List ="": ستتم إزالة هذا الخيار في إصدار مستقبلي، يرجى استخدام الخيار العام بدلاً من ذلك
--blockCIDR6List ="": ستتم إزالة هذا الخيار في إصدار مستقبلي، يرجى استخدام الخيار العام بدلاً من ذلك
--blockDomainList ="": ستتم إزالة هذا الخيار في إصدار مستقبلي، يرجى استخدام الخيار العام بدلاً من ذلك
--blockGeoIP ="": ستتم إزالة هذا الخيار في إصدار مستقبلي، يرجى استخدام الخيار العام بدلاً من ذلك
--cert ="": المسار المطلق لملف الشهادة للمجال، مثل /path/to/cert.pem. إذا كانت الشهادة أو مفتاح الشهادة فارغة، فسيتم إصدار الشهادة تلقائيًا
--certkey ="": المسار المطلق لملف مفتاح الشهادة للمجال، مثل /path/to/certkey.pem. إذا كانت الشهادة أو مفتاح الشهادة فارغة، فسيتم إصدار الشهادة تلقائيًا
--domainaddress ="": مثل: domain.com:443. إذا اخترت إصدار الشهادات تلقائيًا، فيجب أن يتم حل المجال إلى عنوان IP الخاص بالخادم وسيتم أيضًا استخدام منفذ 80
--example : أظهر مثالًا بسيطًا للاستخدام
--password, -p ="": كلمة مرور الخادم
--path ="": مسار URL (الافتراضي: /ws)
--tcpTimeout ="": الوقت (الأوقات) (الافتراضي: 0)
--udpTimeout ="": الوقت (الأوقات) (الافتراضي: 0)
--updateListInterval ="": ستتم إزالة هذا الخيار في إصدار مستقبلي، يرجى استخدام الخيار العام بدلاً من ذلك (الافتراضي: 0)
--withoutBrookProtocol : لن يتم تشفير البيانات باستخدام بروتوكول Brook
ابدأ تشغيل wssclient الذي يدعم tcp وudp. يمكنه فتح وكيل socks5، [src <-> Socks5 <-> $ brook wssclient <-> $ brook wssserver <-> dst]
--example : أظهر مثالًا بسيطًا للاستخدام
--http ="": مكان الاستماع إلى اتصالات وكيل HTTP
--link ="": رابط Brook، يمكنك الحصول عليه عبر رابط $ Brook. سيتم تجاهل معلمات wssserver وكلمة المرور
--password, -p ="": كلمة مرور Brook wssserver
--socks5 ="": مكان الاستماع إلى اتصالات SOCKS5 (الافتراضي: 127.0.0.1:1080)
--socks5ServerIP ="": فقط إذا كان IP لخادم Sock5 الخاص بك مختلفًا عن IP الخاص بالاستماع
--tcpTimeout ="": الوقت (الأوقات) (الافتراضي: 0)
--udpTimeout ="": الوقت (الأوقات) (الافتراضي: 0)
--wssserver, -s ="": عنوان Brook wssserver، مثل: wss://google.com:443، إذا لم يكن هناك مسار، فسيتم استخدام /ws. لا تحذف المنفذ تحت أي ظرف من الظروف
ابدأ تشغيل خادم Brook Quickserver الذي يدعم TCP وUDP.
--blockCIDR4List ="": ستتم إزالة هذا الخيار في إصدار مستقبلي، يرجى استخدام الخيار العام بدلاً من ذلك
--blockCIDR6List ="": ستتم إزالة هذا الخيار في إصدار مستقبلي، يرجى استخدام الخيار العام بدلاً من ذلك
--blockDomainList ="": ستتم إزالة هذا الخيار في إصدار مستقبلي، يرجى استخدام الخيار العام بدلاً من ذلك
--blockGeoIP ="": ستتم إزالة هذا الخيار في إصدار مستقبلي، يرجى استخدام الخيار العام بدلاً من ذلك
--cert ="": المسار المطلق لملف الشهادة للمجال، مثل /path/to/cert.pem. إذا كانت الشهادة أو مفتاح الشهادة فارغة، فسيتم إصدار الشهادة تلقائيًا
--certkey ="": المسار المطلق لملف مفتاح الشهادة للمجال، مثل /path/to/certkey.pem. إذا كانت الشهادة أو مفتاح الشهادة فارغة، فسيتم إصدار الشهادة تلقائيًا
--domainaddress ="": مثل: domain.com:443. إذا اخترت إصدار الشهادات تلقائيًا، فيجب أن يتم حل المجال إلى عنوان IP الخاص بالخادم وسيتم أيضًا استخدام منفذ 80
--example : أظهر مثالًا بسيطًا للاستخدام
--password, -p ="": كلمة مرور الخادم
--tcpTimeout ="": الوقت (الأوقات) (الافتراضي: 0)
--udpTimeout ="": الوقت (الأوقات) (الافتراضي: 0)
--updateListInterval ="": ستتم إزالة هذا الخيار في إصدار مستقبلي، يرجى استخدام الخيار العام بدلاً من ذلك (الافتراضي: 0)
--withoutBrookProtocol : لن يتم تشفير البيانات باستخدام بروتوكول Brook
ابدأ برنامج Brook quicclient الذي يدعم tcp وudp. يمكنه فتح وكيل SOCKS5، [src <-> SOCKS5 <-> $ Brook quicclient <-> $ Brook quicserver <-> dst]. (يتم تجاهل معلمة الطلب العالمي)
--example : أظهر مثالًا بسيطًا للاستخدام
--http ="": مكان الاستماع إلى اتصالات وكيل HTTP
--link ="": رابط Brook، يمكنك الحصول عليه عبر رابط $ Brook. سيتم تجاهل معلمات wssserver وكلمة المرور
--socks5 ="": مكان الاستماع إلى اتصالات SOCKS5 (الافتراضي: 127.0.0.1:1080)
--socks5ServerIP ="": فقط إذا كان IP الخاص بخادم Sock5 مختلفًا عن IP الخاص بالاستماع
--tcpTimeout ="": الوقت (الأوقات) (الافتراضي: 0)
--udpTimeout ="": الوقت (الأوقات) (الافتراضي: 0)
ترحيل حركة مرور الشبكة عبر جدول، والذي يدعم TCP وUDP. الوصول إلى [من العنوان] يساوي الوصول إلى [العنوان]، [src <-> من العنوان <-> $ brook server/wsserver/wssserver/quicserver <-> إلى العنوان]
--example : أظهر مثالًا بسيطًا للاستخدام
--from, -f, -l ="": عنوان الاستماع: مثل ':9999'
--link ="": رابط Brook، يمكنك الحصول عليه عبر رابط $ Brook. سيتم تجاهل معلمات الخادم وكلمة المرور
--كلمة المرور، -p ="": كلمة المرور
--server, -s ="": خادم Brook أو Brook wsserver أو Brook wssserver أو Brook Quicserver، مثل: 1.2.3.4:9999، ws://1.2.3.4:9999، wss://domain:443/ws، كويك://domain.com:443
--tcpTimeout ="": الوقت (الأوقات) (الافتراضي: 0)
--to, -t ="": العنوان الذي يتم الترحيل إليه، مثل: 1.2.3.4:9999
--udpTimeout ="": الوقت (الأوقات) (الافتراضي: 0)
قم بتشغيل خادم DNS عبر Brook، والذي يدعم TCP وUDP، [src <-> $ brook dnserversoverbrook <-> $ brook server/wsserver/wssserver/quicserver <-> dns] أو [src <-> $ brook dnsserveroverbrook <-> دنسفوربايباس]
--blockDomainList ="": مجال واحد في كل سطر، وضع مطابقة اللاحقة. https://، http:// أو مسار الملف المطلق المحلي. مثل: https://raw.githubusercontent.com/txthinking/brook/master/programmable/list/example_domain.txt
--bypassDomainList ="": مجال واحد لكل سطر، وضع مطابقة اللاحقة. https://، http:// أو مسار الملف المطلق المحلي. مثل: https://raw.githubusercontent.com/txthinking/brook/master/programmable/list/example_domain.txt
--disableA : تعطيل الاستعلام
--disableAAAA : تعطيل استعلام AAAA
--dns ="": خادم DNS لحل المجالات غير الموجودة في القائمة (الافتراضي: 8.8.8.8:53)
-dnsforbypass = "": خادم DNS لحل المجالات في قائمة الالتفافية. مثل 223.5.5.5:53 أو https://dns.alidns.com
-مثال : أظهر مثالًا بسيطًا للاستخدام
--Link = "": Brook Link ، يمكنك الحصول عليه عبر رابط $ brook. سيتم تجاهل معلمات الخادم وكلمة المرور
-القصب ، -L = "": الاستماع عنوان ، مثل: 127.0.0.1:53
-كلمة المرور ، -P = "": كلمة المرور
-خادم ، -S = "": Brook Server أو Brook WSServer أو Brook WSSServer أو Brook Quicserver ، مثل: 1.2.3.4:999 ، WS: //1.2.3.4: 9999 ، WSS: //domain.com: 443/ WS ، Quic: //domain.com: 443
-tcptimeout = "": الوقت (s) (الافتراضي: 0)
-udptimeout = "": الوقت (s) (الافتراضي: 0)
توليد رابط بروك
-address = "": عندما يكون الخادم Brook WSServer أو Brook WSSServer أو Brook Quicserver ، حدد العنوان بدلاً من حل العناوين من المضيف ، مثل 1.2.3.4:443
--- ca = "": عندما يكون الخادم Brook WSSServer أو Brook Quicserver ، حدد CA لـ CERT غير موثوق به ، مثل/path/ca.pem
-clienthkdfinfo = "": معلومات العميل HKDF ، معظم الوقت لا تحتاج إلى تغيير هذا ، اقرأ بروتوكول بروك إذا كنت لا تعرف ما هذا
-مثال : أظهر مثالًا بسيطًا للاستخدام
-fragment = "": عندما يكون الخادم Brook WSSServer ، قم بتقسيم ClientHello إلى شظايا متعددة ثم أرسلها واحدًا تلو الآخر مع تأخيرات (مللي ثانية). التنسيق هو min_length: max_length: min_delay: max_delay ، لا يمكن أن يكون صفرًا ، مثل 50: 100: 10: 50
-عزل : عندما يكون الخادم Brook WSSServer أو Brook Quicserver ، لا يتحقق العميل من سلسلة شهادة الخادم واسم المضيف
--name = "": أعط هذا الخادم اسمًا
-كلمة المرور ، -P = "": كلمة المرور
-خادم ، -S = "": دعم Brook Server ، Brook WSServer ، Brook WSSServer ، Socks5 Server ، Brook Quicserver. مثل: 1.2.3.4:9999 ، WS: //1.2.3.4: 9999 ، WSS: //Google.com: 443/WS ، Socks5: //1.2.3.4: 1080 ، quic: //google.com: 443
--ServerHKDFINFO = "": خادم HKDF معلومات ، معظم الوقت لا تحتاج إلى تغيير هذا ، اقرأ بروتوكول بروك إذا كنت لا تعرف ما هذا
-TLSFINGERPRINT = "": عندما يكون الخادم Brook WSSServer ، حدد TLS Photeprint ، يمكن أن تكون القيمة: Chrome
-token = "": رمز يمثل هوية المستخدم. سلسلة مشفرة في سداسي عشري. يحتاج الخادم إلى تمكين UserApi. لاحظ أن: مدعوم فقط من قبل واجهة المستخدم الرسومية Brook (باستثناء OpenWrt) و Tun2Brook
-udpoverstream : عندما يكون الخادم Brook Quicserver ، UDP فوق الدفق. في ظل الظروف العادية ، تحتاج إلى هذه المعلمة لأن حجم بيانات MAX DATAGRAM لـ QUIC صغير جدًا. ملاحظة: فقط Brook Cli و Tun2Brook Suppport الآن
-udpovertcp : عندما يكون الخادم خادم Brook ، UDP فوق TCP
-username ، -u = "": اسم المستخدم ، عندما يكون الخادم خادم Socks5
-مع BrookProtocol : عندما يكون الخادم Brook WSServer أو Brook WSSServer أو Brook Quicserver ، لن يتم تشفير البيانات ببروتوكول بروك
قم بتشغيل عميل وتواصل مع رابط Brook ، والذي يدعم TCP و UDP. يمكن أن تبدأ وكيل Socks5 ، [SRC <-> Socks5 <-> $ Brook Connect <-> $ Brook Server/WSServer/WSSServer/Quicserver <-> DST]
-مثال : أظهر مثالًا بسيطًا للاستخدام
-HTTP = "": أين تستمع لاتصالات وكيل HTTP
--Link ، -l = "": Brook Link ، يمكنك الحصول عليه عبر رابط $ brook
-Socks5 = "": أين تستمع إلى اتصالات Socks5 (افتراضي: 127.0.0.1:1080)
-Socks5Serverip = "": فقط إذا كان IP Socks5 Server يختلف عن الاستماع IP
-tcptimeout = "": الوقت (s) (الافتراضي: 0)