Releases: txthinking/brook
v20250202
CLI
brook dnsserver, dohserver, dnsserveroverbrook, server, wsserver, wssserver, quicserver can use script to do more complex thing, such as speed limit for a connection or forward to another brook link and more. brook will pass different global variables to the script at different times, and the script only needs to assign the processing result to the global variable out. Read more: https://brook.app
- --userAPI="": Works with server, wsserver, wssserver, quicserver. When you build your own user system, Brook Server will send GET request to your userAPI to check if token is valid, for example: https://your-api-server.com/a_unpredictable_path. Yes, it is recommended to add an unpredictable path to your https API, of course, you can also use the http api for internal network communication. The request format is https://your-api-server.com/a_unpredictable_path?token=xxx. When the response is 200, the body should be the user's unique identifier, such as user ID; all other status codes are considered to represent an illegitimate user, and in these cases, the body should be a string describing the error. For more information, please read https://github.com/txthinking/brook/blob/master/protocol/user.md
- --userAPIRateLimit="": Works with --userAPI. Limit the request rate per token to the user API by Brook Server, this will reduce the load on the user API. This is especially important when users have expired, and the userAPIValidCacheTime will not cache the requests, resulting in continuous requests to the user API. The default is 0, which means no limitation. For example, setting it to 1 means the rate is limited to 1 request per token per second. The phrase 'per token' means that each token has its own rate limiter, and they do not interfere with each other (default: 1)
- --userAPIValidCacheTime="": Works with --userAPI. Once a token is checked and valid, the userAPI will not be requested to validate again for a certain period (s). A reasonable value must be set, otherwise it will affect the performance of each incoming connection (default: 3600)
- --userLog="": Works with --userAPI. Log, traffic and more. A valid value is file path. Send SIGUSR1 to me to reset the log file on unix system. Mutually exclusive with the --log parameter.
- --pid="": A file path used to store pid. Send SIGUSR1 to me to reset the --log or --userLog file on unix system
- --cliToken="": The CLI Token of your Brook Plus or Brook Business account, get it from https://www.txthinking.com/brook.html
- --script="": Works with server, wsserver, wssserver, quicserver, dnsserver, dohserver, dnsserveroverbrook. https://, http:// or /path/to/file.tengo. Get details at https://brook.app/
- --scriptUpdateInterval="": Works with --script. The interval (s) to re-fetch script. The default is 0, which means only fetch once on startup (default: 0)
- All support brook link with token
- Deprecated some parameters
OpenWrt
Brook for OpenWrt uses the same script as the GUI. Since OpenWrt will abandon ipk and CLI can edit complex rules more conveniently, I have returned openwrt to CLI. brook for OpenWrt is tested on OpenWrt systems, but may work on other Linux systems, but it is not guaranteed.
- There are two new files: openwrt_linux_amd64 and openwrt_linux_arm64
- Support brook link with token
- Support script same with Brook GUI client
ipio
https://github.com/txthinking/ipio
brook-store
https://github.com/TxThinkingInc/brook-store
GUI
- Add Clear and import, more convenient when importing links
- The system time will be checked when connecting to prevent unnoticed abnormalities caused by system time errors
- iOS and macOS: add All Networks & Excludes mode: Include All Networks. But exclude some networks, such as: Apple Push Notification services (APNs) traffic; Wi-Fi Calling, MMS, SMS, and Visual Voicemail; Local network, AirPlay, AirDrop, and CarPlay; XCode Device Communication. And the VPN will not be disconnected between sleep and wake or network changed. Only available for iOS and macOS TUN mode. Note that the Modules still works outside of Excludes
- macOS: fix App Mode memory leak
- MITM: support copy as text. Previously, you could only copy hex
- iOS and macOS: optimized for the latest OS
You can build the OSS version from source, or download a precompiled version with more features.
v20240214
GUI:
- Removed proxy mode. All in TUN mode. Life is short, I use Brook
- Modularized all features
- Rewrote UI
- iOS: Memory optimization
- Linux/Windows: Disconnecting will automatically restore the system DNS to its original state. Other platforms do not have this concern.
- Linux/Windows: You can now identify which programs are initiating TCP and UDP network connections. This also means that you can use scripts to control network access for specific applications. This feature has been completed in the previous macOS version. There is no such API for iOS. Android can bypass the app.
- Windows: Package using the new msix format. Here and Here
- Windows: Developed and tested under Windows 11
- Linux: Optimized startup way
- Added Test IPv4 tool
- Added Test IPv6 tool
- ipk: Removed. Might write a new UI
- If you signin: Connect API over your Brook only Mode. You must ensure your Brook Server works.
- Updated documentation: https://brook.app
GUI:
- 移除 proxy 模式。全端默认 TUN 模式。人生苦短,我用 Brook
- 将所有功能模块化
- 重写 UI
- iOS: 内存优化
- Linux/Windows: 断开自动将系统 DNS 恢复如初。其他端无此顾虑
- Linux/Windows: 可以知道是哪个程序在发起 TCP 和 UDP 网络连接。也意味着可以用脚本来针对具体应用程序来进行网络控制。macOS 端上一个版本已完成。iOS 端无此 API。Android 端可以 bypass app
- Windows: 使用新的 msix 格式打包。这里 和 这里
- Windows: 在 Windows 11 下开发测试
- Linux: 优化启动方式
- 新增 Test IPv4 工具
- 新增 Test IPv6 工具
- ipk: 移除. 可能,后续会写一个新的 UI
- If you signin: Connect API over your Brook only Mode. You must ensure your Brook Server works
- 文档更新: https://brook.app
CLI
- brook proxy: OpenWRT: 完美支持 IPv4/IPv6/TCP/UDP. Native IPv6
- brook tproxy: OpenWRT: Perfect support for IPv4/IPv6/TCP/UDP. Native IPv6
- brook --clientHKDFInfo: Do not use it unless you know what it is.
- brook --serverHKDFInfo: Do not use it unless you know what it is.
- brook ipcountry: Get the country of a specific IP.
v20230606
Mac
- 增加 App 模式,可以看到每个网络请求是哪个 App 发起的
- 可以跳过 App,可以选择跳过 App 即直连,也可以用脚本控制仅部分 App 可联网或阻断网络,或走不同的 Server,等等
- 上架 Mac App Store
Windows
- 可以手动选择当前默认的网卡
iOS, Mac, Android, Linux, Windows
- 可细粒度编程控制选择走指定的 Server,比如根据目的地,App,等等
可编程
- in_brooklinks: 连接之前,预定义多个 brook link,之后可编程指定连接哪个
- in_dnsquery
- appid: 发起网络请求的 App. 仅 Mac
- interface: 发起网络请求的网络接口. 仅 Mac
- in_dnsquery.out
- brooklinkkey: 当需要连接代理服务器时,转而连接 通过 in_brooklinks 的 key 指定的 brook link
- in_address
- appid: 发起网络请求的 App. 仅 Mac
- interface: 发起网络请求的网络接口. 仅 Mac
- in_address.out
- brooklinkkey: 当需要连接代理服务器时,转而连接 通过 in_brooklinks 的 key 指定的 brook link
资源
- 文档: https://brook.app
- Pastebin: https://paste.brook.app/
- 独立脚本例子: https://github.com/txthinking/bypass
- 脚本生成器: https://modules.brook.app
- 博客: https://www.txthinking.com/talks/
- YouTube: https://www.youtube.com/txthinking
- Telegram: https://t.me/s/txthinking_news
- Brook Plus 免费计划
Mac
- App Mode, You can see which app initiated each network request
- Bypass App,You can choose to bypass the app and let it connect directly, or you can use scripts to control only some apps to connect to the Internet or block the network, or use different servers, etc.
- Available on the Mac App Store
Windows
- You can manually select the current default network interface
iOS, Mac, Android, Linux, Windows
- Fine-grained programming control to go to the specified server, such as according to the destination, App, etc.
Programmable
- in_brooklinks: Before connecting, Predefine multiple brook links, and then programmatically specify which one to connect to
- in_dnsquery
- appid: Which app initiated the network request. Mac Only
- interface: Which interface initiated the network request. Mac Only
- in_dnsquery.out
- brooklinkkey: When need to connect the Server,instead, connect to the brook link specified by the key in_brooklinks
- in_address
- appid: Which app initiated the network request. Mac Only
- interface: Which interface initiated the network request. Mac Only
- in_address.out
- brooklinkkey: When need to connect the Server,instead, connect to the brook link specified by the key in_brooklinks
Resource
- Documentation: https://brook.app
- Pastebin: https://paste.brook.app/
- Standalone Script Example: https://github.com/txthinking/bypass
- Brook Script Builder: https://modules.brook.app
- Blog: https://www.txthinking.com/talks/
- YouTube: https://www.youtube.com/txthinking
- Telegram: https://t.me/s/txthinking_news
v20230601
Documentation 新域名
CLI
- brook --dialWithNIC
- brook --dialWithDNS
- brook --dialWithDNSPrefer
- brook dhcpserver --interface
- brook dnsserver
- brook dnsclient
- brook dohserver
- brook dohclient
- brook wssclient --tlsfingerprint
- brook relayoverbrook --tlsfingerprint
- brook dnsserveroverbrook --tlsfingerprint
- brook tproxy --tlsfingerprint
- brook link --tlsfingerprint
图形客户端
- 桌面客户端菜单自适应固定打开状态
- 在 Intel Mac、Linux 和 Windows 上优化绕过 CIDR TUN 模式的连接时间
- 脚本:in_address.out.bypass 在 Intel Mac、Linux 和 Windows 上可用
- 绕过 Geo IP 可在 Intel Mac、Linux 和 Windows 上可用
- 支持 --tlsfingerprint brook link
- 脚本: in_guiconfig 弃用
GUI
- Desktop GUI drawer can be fixed
- Optimize connecting time in bypass CIDR TUN mode on intel Mac, Linux and Windows
- Script: in_address.out.bypass is available on intel Mac, Linux and Windows
- Bypass Geo IP is available on intel Mac, Linux and Windows
- --tlsfingerprint with brook link
- Script: in_guiconfig deprecated
v20230404
Documentation
https://txthinking.github.io/brook/
v20230404
CLI
- --prometheus basic prometheus support
- --prometheusPath
GUI
- Echo Client: one-click TCP and UDP ping with address
- bugfix
v20230401
CLI
- --log make log better
- --tag name this brook process into log
- --dialWithIP4 Select the outgoing network card
- --dialWithIP6
- --dialWithSocks5
- brook tproxy:
- better and better on dual-stack network
- --disableA
- --disableAAAA
- --bypassGeoIP
- --redirectDNS
- bugfix
- cookbook: Turn any Linux into a router with two Brook commands
- cookbook: 使用 Brook 两条命令把任意 Linux 变成路由器
- brook quicserver
- brook quicclient
- brook dhcpserver
- cookbook: Turn any Linux into a router with two Brook commands
- cookbook: 使用 Brook 两条命令把任意 Linux 变成路由器
GUI
- OpenWRT:
- better and better on dual-stack network
- Rewrite UI, similar to other GUI clients
- bugfix
- cookbook: Brook OpenWRT Router
- cookbook: Brook OpenWRT 路由器
- iOS / M1 Mac
- Dark Mode
- Shortcut
- Android
- Dark Mode
- Shortcut
- Linux
- Dark Mode
- Shortcut
- Intel Mac
- Dark Mode
- Shortcut
- Windows
- Dark Mode
- Shortcut
- System Tray
v20230401
Documentation
https://txthinking.github.io/brook/
CLI
- --log make log better
- --tag name this brook process into log
- --dialWithIP4 Select the outgoing network card
- --dialWithIP6
- --dialWithSocks5
- brook tproxy:
- better and better on dual-stack network
- --disableA
- --disableAAAA
- --bypassGeoIP
- --redirectDNS
- bugfix
- cookbook: Turn any Linux into a router with two Brook commands
- cookbook: 使用 Brook 两条命令把任意 Linux 变成路由器
- brook quicserver
- brook quicclient
- brook dhcpserver
- cookbook: Turn any Linux into a router with two Brook commands
- cookbook: 使用 Brook 两条命令把任意 Linux 变成路由器
GUI
- OpenWRT:
- better and better on dual-stack network
- Rewrite UI, similar to other GUI clients
- bugfix
- cookbook: Brook OpenWRT Router
- cookbook: Brook OpenWRT 路由器
- iOS / M1 Mac
- Dark Mode
- Shortcut
- Android
- Dark Mode
- Shortcut
- Linux
- Dark Mode
- Shortcut
- Intel Mac
- Dark Mode
- Shortcut
- Windows
- Dark Mode
- Shortcut
- System Tray
- Bug: v20230401. wsserver and wssserver. Connectivity Check. 连通性检测. HTTP/1.1 400 Bad Request
- Bug: v20230401. Cannot Import Servers. 无法导入服务器列表
v20230122
CLI
🇬🇧 CLI Documentation 🇨🇳 CLI 文档
GUI
🇬🇧 GUI Documentation 🇨🇳 GUI 文档
Programmable
in_httprequest:
- fix the Content-Length problem when modifying the Body
in_dnsquery:out:
- forcefakedns
- system
brook module:
- iosapponmac
- cidrcontainsip
- parseurl
- parsequery
- map2query
- bytes2ints
- ints2bytes
- bytescompare
- bytescontains
- byteshasprefix
- byteshassuffix
- bytesindex
- byteslastindex
- bytesreplace
- pathescape
- pathunescape
- queryescape
- queryunescape
- hexdecode
- hexencode
v20230101
CLI
- brook echoserver: new command
- brook echoclient: new command
- brook markdown renamed to brook mdpage
GUI
- Linux GUI Client
- Edge is no longer needed. Temporarily no System tray.
- Desktop tun mode supports bypass on
- Hosts: like /etc/hosts
- Log View Plus: filter condition
- MITM Log View: HTTP/HTTPS request and response
- Programmable: Everything is possible
CLI
- brook echoserver: 新命令
- brook echoclient: 新命令
- brook markdown 重命名 brook mdpage
GUI
- Linux 图形客户端
- Edge 不再需要. 暂无 System tray.
- 桌面 tun 模式支持 bypass 开启
- Hosts, 就像 /etc/hosts
- Log View Plus: 过滤条件
- MITM Log View: HTTP/HTTPS 请求和响应日志
- 可编程: 一切皆有可能
v20221212
CLI
brook dns
renamed tobrook dnsserveroverbrook
brook dnsserver
new subcommandbrook completion
new subcommandbrook markdown
new subcommandbrook manpage
new subcommand
GUI
Capture me
new feature: You can try to see if your packet capture tool can capture this standard HTTP requestMITM
tentatively changed to strict address matching mode, and supports HTTP/2.0- When fake dns off, let it doesn't touch domain in dns
- Will reset local cache
- And other small changes
- Removed from Google Play
- Because of the seven continents and eight oceans, the rules required by different regions are not applicable. The default bypass and block and MITM rules are just samples, please change them according to your own situation
Everyone, every region, every time, you should follow this channel with the news here as the first news. Unless you are an adventurer.
Documentation
ZH
命令行
brook dns
重命名为brook dnsserveroverbrook
brook dnsserver
新子命令brook completion
新的子命令brook markdown
新的子命令brook manpage
新的子命令
图形客户端
Capture me
新功能: 你可以试试你的抓包工具能不能捕获这个标准 HTTP 请求MITM
暂定改为严格匹配模式,并支持 HTTP/2.0- 当 fake dns 关闭时,让它不触碰 dns 中的域名
- 将重置本地缓存
- 和其他小改动
- 从 Google Play 中移除
- 因为七大洲,八大洋,不同地区需要的规则不通。默认的 bypass 和 block 以及 MITM 规则只是示例,请根据自己的情况进行更改,参考这个
每个人,每个地区,每个时间,你应该关注此 频道 以这里的消息作为第一消息。除非你是冒险者。
文档
v20221010
CLI
-
brook connect:
--dialSocks5
--dialSocks5Username
--dialSocks5Password -
brook testsocks5
-
brook testbrook
GUI
- Geo IP
- Google Play
Please
- Prefer dual-stack network, both server and client. 请偏爱双栈网络环境,服务端和客户端