Кроссплатформенный программируемый сетевой инструмент.
❤️ Shiliew — сетевое приложение, созданное для тех, кто ценит свое время
bash <(curl https://bash.ooo/nami.sh)
nami install brook
brook server -l :9999 -p hello
Вы можете использовать
brook link
для настройки некоторых параметров.
Графический интерфейс Brook будет передавать в скрипт разные глобальные переменные в разное время, и скрипту нужно только присвоить результат обработки глобальной переменной 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-адрес домена для установления соединения.
У Брука есть функция поддельного 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
на сервер Brook.google.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
на сервер Brook.8.8.8.8:53
и возвращает результат, например 1.2.3.4
, клиенту Brook.1.2.3.4:443
1.2.3.4:443
1.2.3.4:443
. Это активирует переменную in_address
, содержащую такую информацию, как ipaddress
1.2.3.4:443
на сервер Brook.1.2.3.4:443
и возвращает данные клиенту Brook.google.com:443
8.8.8.8:443
, чтобы узнать IP-адрес google.com
8.8.8.8:443
. Это активирует переменную in_address
, содержащую такую информацию, как ipaddress
8.8.8.8:443
на сервер Brook.8.8.8.8:443
и возвращает результат, например 1.2.3.4
, клиенту Brook.1.2.3.4:443
1.2.3.4:443
1.2.3.4:443
. Это активирует переменную in_address
, содержащую такую информацию, как ipaddress
1.2.3.4:443
на сервер Brook.1.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_адрес | карта | / | При подключении к адресу | скрипт может решить, как подключиться | карта |
in_httprequest | карта | / | При поступлении HTTP(S)-запроса | сценарий может решить, как обработать этот запрос | карта |
in_httprequest, in_httpresponse | карта | / | когда приходит ответ HTTP(S) | сценарий может решить, как обработать этот ответ | карта |
Ключ | Тип | Описание | Пример |
---|---|---|---|
_ | логическое значение | бессмысленный | истинный |
out
, игнорируется, если не относится к типу map
Ключ | Тип | Описание | Пример |
---|---|---|---|
... | ... | ... | ... |
пользовательское имя | нить | Брук Линк | ручей://... |
... | ... | ... | ... |
Ключ | Тип | Описание | Пример |
---|---|---|---|
домен | нить | доменное имя | google.com |
тип | нить | тип запроса | А |
аппид | нить | Идентификатор приложения или путь | com.google.Chrome.helper |
интерфейс | нить | сетевой интерфейс. только для Mac | ru0 |
out
, если это тип error
, он будет записан в журнал. Игнорируется, если не относится к типу map
Ключ | Тип | Описание | Пример |
---|---|---|---|
блокировать | логическое значение | Блокировать, по умолчанию false | ЛОЖЬ |
IP | нить | Укажите IP напрямую, допустимо только для type A / AAAA | 1.2.3.4 |
система | логическое значение | Разрешение по системному DNS, по умолчанию false | ЛОЖЬ |
обойти | логическое значение | Разрешение путем обхода DNS, по умолчанию false | ЛОЖЬ |
Бруклинккей | нить | Когда необходимо подключиться к серверу, вместо этого подключитесь к серверу, указанному ключом in_brooklinks. | пользовательское имя |
Ключ | Тип | Описание | Пример |
---|---|---|---|
сеть | нить | Тип сети, значение tcp / udp | TCP |
IP-адрес | нить | Тип IP-адреса. Есть только IPaddress и DomainAddress. Обратите внимание, что между этими двумя нет никакой связи. | 1.2.3.4:443 |
адрес домена | нить | Адрес типа домена. Благодаря FakeDNS мы можем получить адрес доменного имени здесь. | google.com:443 |
аппид | нить | Идентификатор приложения или путь | com.google.Chrome.helper |
интерфейс | нить | сетевой интерфейс. только для Mac | ru0 |
out
, если это тип error
, он будет записан в журнал. Игнорируется, если не относится к типу map
Ключ | Тип | Описание | Пример |
---|---|---|---|
блокировать | логическое значение | Блокировать, по умолчанию false | ЛОЖЬ |
IP-адрес | нить | Тип IP-адреса, перезапись места назначения | 1.2.3.4:443 |
ipaddressfrombypassdns | нить | Используйте обход DNS, чтобы получить IP-адрес A или AAAA и перезаписать пункт назначения. Действует только в том случае, если domainaddress существует, значение A / AAAA | А |
обойти | логическое значение | Обход, по умолчанию false . Если задано true и domainaddress , необходимо указать ipaddress или ipaddressfrombypassdns | ЛОЖЬ |
митм | логическое значение | Следует ли выполнять MITM, по умолчанию false . Действует только в том случае, если network tcp . Необходимо установить CA, см. ниже. | ЛОЖЬ |
митмпротокол | нить | Протокол MITM необходимо указать явно, значение — http / https | https |
митмсертдомен | нить | Доменное имя сертификата MITM, которое по умолчанию берется из domainaddress . Если ipaddress и mitm имеют true , а mitmprotocol — https то их необходимо указать явно. | example.com |
mitmwithbody | логическое значение | Следует ли манипулировать телом http, по умолчанию false . будет читать тело запроса и ответа в памяти и взаимодействовать со сценарием. Общий лимит памяти iOS 50M может привести к остановке процесса | ЛОЖЬ |
mitmautohandlecompress | логическое значение | Следует ли автоматически распаковывать тело http при взаимодействии со сценарием, по умолчанию false | ЛОЖЬ |
митмклиенттаймаут | интервал | Таймаут для разговора MITM с сервером, секунды, по умолчанию 0 | 0 |
mitmserverreadtimeout | интервал | Тайм-аут чтения MITM от клиента, секунды, по умолчанию 0 | 0 |
mitmserverwritetimeout | интервал | Тайм-аут записи MITM клиенту, секунда, по умолчанию 0 | 0 |
Бруклинккей | нить | Когда необходимо подключиться к серверу, вместо этого подключитесь к серверу, указанному ключом in_brooklinks. | пользовательское имя |
Ключ | Тип | Описание | Пример |
---|---|---|---|
URL-адрес | нить | URL-адрес | https://example.com/hello |
Метод | нить | HTTP-метод | ПОЛУЧАТЬ |
Тело | байты | Тело HTTP-запроса | / |
... | нить | другие поля являются заголовками HTTP | / |
out
, должен быть установлен на запрос или ответ
Ключ | Тип | Описание | Пример |
---|---|---|---|
СтатусКод | интервал | Код статуса HTTP | 200 |
Тело | байты | Тело ответа HTTP | / |
... | нить | другие поля являются заголовками HTTP | / |
out
, должен быть установлен на ответ
В графическом интерфейсе Brook сценарии абстрагированы на модули . Несколько модулей уже есть, и в этом нет никакой магии, они просто автоматически объединяют _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
Синтаксис языка Тенго
Библиотека
текст: регулярные выражения, преобразование строк и манипуляции.
математика: математические константы и функции
времена: функции, связанные со временем
rand: случайные функции
fmt: функции форматирования
json: функции JSON
enum: функции перечисления
hex: функции шестнадцатеричного кодирования и декодирования.
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
ОС | Как |
---|---|
iOS | https://www.youtube.com/watch?v=HSGPC2vpDGk |
Андроид | Android имеет пользовательский CA и системный CA, должен быть установлен в системном CA после ROOT. |
macOS | 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 |
Некоторое программное обеспечение может не читать системный центр сертификации. Для отладки можно использовать
curl --cacert ~/.nami/bin/ca.pem
Brook OpenWRT: идеальная поддержка IPv4/IPv6/TCP/UDP.
Позиция Брука в отношении 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 клиента, в большинстве случаев вам не нужно ее менять, если она изменена, все ссылки на ручей на стороне клиента должны быть одинаковыми, я имею в виду каждую (по умолчанию: "ручей")
--dialWithDNS ="": если необходимо разрешить доменное имя, используйте указанный DNS. Например, 8.8.8.8:53 или https://dns.google/dns-query?address=8.8.8.8%3A443, адрес обязателен. Обратите внимание, что для клиентских команд это не влияет на передачу клиентом адреса домена серверу.
--dialWithDNSPrefer ="": используется с параметромIALWithDNS. Предпочитаю запись A или запись AAAA. Значение – A или AAAA.
--dialWithIP4 ="": когда текущий компьютер устанавливает сетевое соединение с внешним IPv4, как TCP, так и UDP, он используется для указания используемого IPv4.
--dialWithIP6 ="": когда текущий компьютер устанавливает сетевое соединение с внешним IPv6, как TCP, так и UDP, он используется для указания используемого IPv6.
--dialWithNIC ="": когда текущий компьютер устанавливает внешнее сетевое соединение, как TCP, так и UDP, оно используется для указания используемого сетевого адаптера.
--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, чтобы сбросить файл журнала в системе unix. Если вы хотите отладить библиотеку SOCKS5, установите env SOCKS5_DEBUG=true.
--pid ="": путь к файлу, используемый для хранения pid. Отправьте мне SIGUSR1, чтобы сбросить файл --serverLog в системе unix.
--pprof ="": адрес прослушивания http pprof, например: 6060
--prometheus ="": адрес прослушивания http prometheus, например:7070. Если он передается в общедоступной сети, рекомендуется использовать его с nico.
--prometheusPath ="": http-путь к Прометею, например /xxx. Если он передается в общедоступной сети, рекомендуется использовать трудно угадываемое значение.
--serverHKDFInfo ="": информация HKDF сервера, в большинстве случаев вам не нужно ее менять, если она изменена, все ссылки на ручей на стороне клиента должны быть одинаковыми, я имею в виду каждую (по умолчанию: "ручей")
--serverLog ="": включить журнал сервера, трафик и многое другое. Допустимое значение — путь к файлу или «консоль». Отправьте мне SIGUSR1, чтобы сбросить файл журнала в системе unix. Взаимоисключающее с параметром --log. Работает с сервером/wsserver/wssserver/quicserver с протоколом ручья.
--speedLimit ="": Ограничить скорость (b), 500 Кбит/с, например: 500000, работает с сервером/wsserver/wssserver/quicserver (по умолчанию: 0)
--tag ="": тег можно использовать в процессе, он будет добавлен в журнал или журнал сервера, например: 'ключ1:значение1'. Все теги также будут добавлены в качестве параметров запроса один за другим в userAPI.
--userAPI ="": Когда вы создаете свою собственную пользовательскую систему, Brook Server отправит запрос GET на ваш userAPI, чтобы проверить, действителен ли токен, например: https://your-api-server.com/a_unpredictable_path. Да, рекомендуется добавить непредсказуемый путь к вашему https API, конечно, вы также можете использовать http API для внутренней сетевой связи. Формат запроса: 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 ="": как только токен будет проверен и признан недействительным, пользовательскому API не будет запрашиваться повторная проверка в течение определенного периода (ов). Должно быть установлено разумное значение, иначе оно повлияет на производительность каждого входящего соединения. Обратите внимание, что это может повлиять на взаимодействие с пользователем, когда вы меняете статус пользователя с недействительного на действительный в вашей пользовательской системе (по умолчанию: 1800).
--userAPIValidCacheTime ="": после того, как токен проверен и действителен, пользовательскому API не будет запрашиваться повторная проверка в течение определенного периода (ов). Должно быть установлено разумное значение, иначе оно повлияет на производительность каждого входящего соединения (по умолчанию: 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. Параметры wssserver и пароль будут игнорироваться.
--password, -p ="": пароль сервера Brook
--server, -s ="": адрес сервера Брука, например: 1.2.3.4:9999
--socks5 ="": Где прослушивать соединения SOCKS5 (по умолчанию: 127.0.0.1:1080)
--socks5ServerIP ="": Только если IP-адрес вашего сервера Socks5 отличается от IP-адреса прослушивания.
--tcpTimeout ="": время (сек) (по умолчанию: 0)
--udpTimeout ="": время (сек) (по умолчанию: 0)
Запустите сервер wsserver, поддерживающий TCP и UDP. Он открывает стандартный http-сервер и сервер веб-сокетов.
--blockCIDR4List ="": этот параметр будет удален в будущей версии, вместо этого используйте глобальный параметр.
--blockCIDR6List ="": этот параметр будет удален в будущей версии, вместо этого используйте глобальный параметр.
--blockDomainList ="": этот параметр будет удален в будущей версии, вместо этого используйте глобальный параметр.
--blockGeoIP ="": этот параметр будет удален в будущей версии, вместо этого используйте глобальный параметр.
--example : показать минимальный пример использования.
--listen, -l ="": адрес прослушивания, например: ':80'
--password, -p ="": пароль сервера
--path ="": URL-путь (по умолчанию: /ws)
--tcpTimeout ="": время (сек) (по умолчанию: 0)
--udpTimeout ="": время (сек) (по умолчанию: 0)
--updateListInterval ="": этот параметр будет удален в будущей версии, вместо него используйте глобальный параметр (по умолчанию: 0).
--withoutBrookProtocol : данные не будут зашифрованы протоколом Брука.
--xForwardedFor : заменить поле from в --log, обратите внимание, что оно может быть подделанным.
Запустите клиент wsclient, поддерживающий TCP и UDP. Он может открыть прокси-сервер SOCKS5, [src <-> Socks5 <-> $ Brook wsclient <-> $ Brook wsserver <-> DST]
--example : показать минимальный пример использования.
--http ="": Где прослушивать соединения HTTP-прокси
--link ="": ссылка на ручей, вы можете получить ее по ссылке $brook. Параметры wssserver и пароль будут игнорироваться.
--password, -p ="": пароль wsserver Брука
--socks5 ="": Где прослушивать соединения SOCKS5 (по умолчанию: 127.0.0.1:1080)
--socks5ServerIP ="": только если IP-адрес вашего сервера Socks5 отличается от IP-адреса прослушивания.
--tcpTimeout ="": время (сек) (по умолчанию: 0)
--udpTimeout ="": время (сек) (по умолчанию: 0)
--wsserver, -s ="": адрес wsserver Brook, например: ws://1.2.3.4:80, если путь отсутствует, будет использоваться /ws. Ни при каких обстоятельствах не пропускайте порт.
Запустите ручей wssserver, поддерживающий TCP и UDP. Он открывает стандартный https-сервер и сервер веб-сокетов.
--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 : данные не будут зашифрованы протоколом Брука.
Запустите поток wssclient, поддерживающий TCP и UDP. Он может открыть прокси-сервер socks5, [src <->socks5 <-> $brook wssclient <-> $brook wssserver <-> dst]
--example : показать минимальный пример использования.
--http ="": Где прослушивать соединения HTTP-прокси
--link ="": ссылка на ручей, вы можете получить ее по ссылке $brook. Параметры wssserver и пароль будут игнорироваться.
--password, -p ="": пароль wssserver Брука
--socks5 ="": Где прослушивать соединения SOCKS5 (по умолчанию: 127.0.0.1:1080)
--socks5ServerIP ="": только если IP-адрес вашего сервера Socks5 отличается от IP-адреса прослушивания.
--tcpTimeout ="": время (сек) (по умолчанию: 0)
--udpTimeout ="": время (сек) (по умолчанию: 0)
--wssserver, -s ="": адрес wssserver Брука, например: wss://google.com:443, если путь отсутствует, будет использоваться /ws. Ни при каких обстоятельствах не пропускайте порт.
Запустите ручей quicserver, поддерживающий 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, поддерживающий TCP и UDP. Он может открыть прокси-сервер socks5, [src <-> socks5 <-> $ brook quicclient <-> $ brook quicserver <-> dst]. (Параметр global-dial игнорируется)
--example : показать минимальный пример использования.
--http ="": Где прослушивать соединения HTTP-прокси
--link ="": ссылка на ручей, вы можете получить ее по ссылке $brook. Параметры wssserver и пароль будут игнорироваться.
--socks5 ="": Где прослушивать соединения SOCKS5 (по умолчанию: 127.0.0.1:1080)
--socks5ServerIP ="": Только если IP-адрес вашего сервера Socks5 отличается от IP-адреса прослушивания.
--tcpTimeout ="": время (сек) (по умолчанию: 0)
--udpTimeout ="": время (сек) (по умолчанию: 0)
Ретранслируйте сетевой трафик через ручей, который поддерживает TCP и UDP. Доступ [по адресу] равен доступу [по адресу], [src <-> по адресу <-> $ brook server/wsserver/wssserver/quicserver <-> по адресу]
--example : показать минимальный пример использования.
--from, -f, -l ="": Адрес прослушивания: например ':9999'
--link ="": ссылка на ручей, вы можете получить ее по ссылке $brook. Параметры сервера и пароля будут игнорироваться.
--password, -p ="": Пароль
--server, -s ="": сервер ручья или ручей wsserver или ручей wssserver или ручей quicserver, например: 1.2.3.4:9999, ws://1.2.3.4:9999, wss://domain:443/ws, quic://domain.com:443
--tcpTimeout ="": время (сек) (по умолчанию: 0)
--to, -t ="": Адрес, на который осуществляется ретрансляция, например: 1.2.3.4:9999
--udpTimeout ="": время (сек) (по умолчанию: 0)
Запустите DNS-сервер через ручей, который поддерживает TCP и UDP, [src <-> $ Brook dnserversoverbrook <-> $ Brook Server/wsserver/wssserver/quicserver <-> DNS] или [src <-> $ Brook dnsserveroverbrook <-> dnsForBypass]
--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/dns-query?address=223.5.5.5:443, адрес требуется (по умолчанию: 223.5.5.5:53)
-Пример : показать минимальный пример использования
-link = "": Brook Link, вы можете получить его через ссылку $ Brook. Параметры сервера и пароля будут проигнорированы
-listen, -l = "": Адрес прослушивания, например: 127.0.0.1:53
-Пасворд, -p = "": пароль
-Сервер, -S = "": Brook Server или Brook Wsserver или Brook Wsserver или Brook Quicserver, например: 1.2.3.4:9999, WS: //1.2.3.4: 9999, WSS: //domain.com: 443/ ws, quic: //domain.com: 443
-tcptimeout = "": время (s) (по умолчанию: 0)
-uadptimeout = "": время (s) (по умолчанию: 0)
Генерировать ссылку ручья
-address = "": когда сервер находится Brook Wsserver или Brook Wssserver или Brook Quicserver, укажите адрес вместо разрешения адресов от хоста, таких как 1.2.3.4:443
-ca = "": когда сервер находится Brook Wssserver или Brook Quicserver, укажите CA для ненадежного сертификата, например, как /path/to/ca.pem
--clienthkdfinfo = "": Информация о клиенте HKDF, большую часть времени вам не нужно менять, прочитайте протокол Brook, если вы не знаете, что это такое
-Пример : показать минимальный пример использования
-fragment = "": Когда сервер находится Brook Wssserver, разделите клиент-холлу на несколько фрагментов, а затем отправьте их по одному с задержками (миллисекунд). Формат - 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, большую часть времени вам не нужно менять, прочитайте протокол Brook, если вы не знаете, что это такое
-tlsfingerprint = "" ": когда сервер находится Brook Wssserver, выберите отпечаток TLS, значение может быть: Chrome
-token = "": токен представляет личность пользователя. Строка, закодированная в шестнадцатеричной. Сервер должен иметь -USERAPI включен. Обратите внимание, что: только поддерживает Gui Brook (за исключением OpenWRT) и Tun2brook
-Udpoverstream : Когда сервер-Brook Quicserver, UDP Over Stream. При нормальных обстоятельствах вам нужен этот параметр, потому что максимальный размер Datagram для QUIC очень мал. ПРИМЕЧАНИЕ: только что Brook CLI и Tun2brook на данный момент
-uadpovertcp : когда сервер является Brook Server, UDP Over TCP
-username, -u = "": имя пользователя, когда сервер Socks5 Server
-В-withoutbrookprotocol : когда сервер находится Brook Wsserver, Brook Wsserver или Brook Quicserver, данные не будут шифрованы с помощью протокола Brook
Запустите клиент и подключитесь к ссылке Brook, которая поддерживает TCP и UDP. Он может запустить прокси-сервер Socks5, [src <--> socks5 <--> $ brook connect <--> $ brook server/wsserver/wssserver/quicserver <--> dst]
-Пример : показать минимальный пример использования
-http = "": где слушать прокси-подключения HTTP
-link, -l = "": Brook Link, вы можете получить ее через ссылку $ brook
---Сокс5 = "": где слушать соединения носков5 (по умолчанию: 127.0.0.1:1080)
-socks5serverip = "" ": только если ваш IP-адрес сервера Socks5 отличается от IP прослушивания
-tcptimeout = "": время (s) (по умолчанию: 0)