Skip to content

Commit e50273a

Browse files
committed
Brook Script Gallery
1 parent 166205a commit e50273a

16 files changed

+353
-5
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#!/usr/bin/env bun
2+
3+
import { $ } from 'bun'
4+
import * as fs from 'node:fs/promises'
5+
6+
var s = await $`ls`.text()
7+
var l = s.split('\n').filter(v => !v.startsWith('_') && v.endsWith('.tengo'))
8+
for (var i = 0; i < l.length; i++) {
9+
l[i] = (await $`cat ${l[i]}`.text()).replaceAll('import("brook")', 'undefined')
10+
}
11+
s = l.join('\n')
12+
13+
await fs.writeFile('/tmp/_.tengo', `
14+
in_brooklinks := undefined
15+
in_dnsquery := undefined
16+
in_address := undefined
17+
in_httprequest := undefined
18+
in_httpresponse := undefined
19+
${s}
20+
`)
21+
await $`tengo /tmp/_.tengo`

programmable/client/example.tengo

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
// Note: 这个例子没有收集域名,会使用 system DNS (默认为 Google DNS) 通过 Server 来解析出域名的 IP,然后判断如果是大陆 IP 则直连
2+
// 缺点是有些大陆域名会有海外 IP,可以根据自己需求自行修改。
3+
4+
modules := []
5+
6+
modules = append(modules, {
7+
dnsquery: func(m) {
8+
return { system: true }
9+
},
10+
address: func(m) {
11+
if m.ipaddress {
12+
brook := import("brook")
13+
r := brook.splithostport(m.ipaddress)
14+
s := brook.country(r.host)
15+
if s == "ZZ" || s == "CN" { // All private IPs are ZZ
16+
return { bypass: true }
17+
}
18+
}
19+
}
20+
})
21+
22+
f := func() {
23+
if in_brooklinks {
24+
for i:=0; i<len(modules); i++{
25+
if modules[i]["brooklinks"] {
26+
r := modules[i]["brooklinks"](in_brooklinks)
27+
if is_error(r) || is_map(r) {
28+
return r
29+
}
30+
}
31+
}
32+
return
33+
}
34+
if in_dnsquery {
35+
for i:=0; i<len(modules); i++{
36+
if modules[i]["dnsquery"] {
37+
r := modules[i]["dnsquery"](in_dnsquery)
38+
if is_error(r) || is_map(r) {
39+
return r
40+
}
41+
}
42+
}
43+
return
44+
}
45+
if in_address {
46+
for i:=0; i<len(modules); i++{
47+
if modules[i]["address"] {
48+
r := modules[i]["address"](in_address)
49+
if is_error(r) || is_map(r) {
50+
return r
51+
}
52+
}
53+
}
54+
return
55+
}
56+
if in_httprequest && !in_httpresponse {
57+
for i:=0; i<len(modules); i++{
58+
if modules[i]["httprequest"] {
59+
r := modules[i]["httprequest"](in_httprequest)
60+
if is_error(r) || is_map(r) {
61+
return r
62+
}
63+
}
64+
}
65+
return in_httprequest
66+
}
67+
if in_httprequest && in_httpresponse {
68+
for i:=0; i<len(modules); i++{
69+
if modules[i]["httpresponse"] {
70+
r := modules[i]["httpresponse"](in_httprequest, in_httpresponse)
71+
if is_error(r) || is_map(r) {
72+
return r
73+
}
74+
}
75+
}
76+
return in_httpresponse
77+
}
78+
}
79+
out := f()
80+

programmable/client/readme.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
ipio, brook.openwrt
2+

programmable/dnsserver/example.tengo

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// Note: This is just an example, you can modify it according to your needs
2+
13
f := func() {
24
if in_dnsservers {
35
return {

programmable/gallery.json

Lines changed: 206 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,206 @@
1+
[
2+
{
3+
name: 'Example',
4+
url: 'https://raw.githubusercontent.com/txthinking/brook/refs/heads/master/programmable/dnsserver/example.tengo',
5+
kind: 'dnsserver',
6+
author: 'TxThinking',
7+
author_url: 'https://www.txthinking.com',
8+
},
9+
{
10+
name: 'Example',
11+
url: 'https://raw.githubusercontent.com/txthinking/brook/refs/heads/master/programmable/server/example.tengo',
12+
kind: 'server',
13+
author: 'TxThinking',
14+
author_url: 'https://www.txthinking.com',
15+
},
16+
{
17+
name: 'Block google secure DNS',
18+
url: 'https://raw.githubusercontent.com/txthinking/brook/refs/heads/master/programmable/modules/block_google_secure_dns.tengo',
19+
kind: 'module',
20+
author: 'TxThinking',
21+
author_url: 'https://www.txthinking.com',
22+
},
23+
{
24+
name: 'Block AAAA',
25+
url: 'https://raw.githubusercontent.com/txthinking/brook/refs/heads/master/programmable/modules/block_aaaa.tengo',
26+
kind: 'module',
27+
author: 'TxThinking',
28+
author_url: 'https://www.txthinking.com',
29+
},
30+
{
31+
name: 'Block A',
32+
url: 'https://raw.githubusercontent.com/txthinking/brook/refs/heads/master/programmable/modules/block_a.tengo',
33+
kind: 'module',
34+
author: 'TxThinking',
35+
author_url: 'https://www.txthinking.com',
36+
},
37+
{
38+
name: 'Example of predefining multiple brook links',
39+
url: 'https://raw.githubusercontent.com/txthinking/brook/refs/heads/master/programmable/modules/brooklinks.tengo',
40+
kind: 'module',
41+
author: 'TxThinking',
42+
author_url: 'https://www.txthinking.com',
43+
},
44+
{
45+
name: 'iOS 豆瓣 v7.66.0 去广告',
46+
url: 'https://raw.githubusercontent.com/txthinking/brook/master/programmable/modules/douban.tengo',
47+
kind: 'module',
48+
ca: true,
49+
author: 'TxThinking',
50+
author_url: 'https://www.txthinking.com',
51+
},
52+
{
53+
name: 'Block some AD domains',
54+
url: 'https://raw.githubusercontent.com/txthinking/brook/master/programmable/modules/block_ad_domain.tengo',
55+
kind: 'module',
56+
author: 'TxThinking',
57+
author_url: 'https://www.txthinking.com',
58+
},
59+
{
60+
name: 'Bypass Geo CN or private IP',
61+
url: 'https://raw.githubusercontent.com/txthinking/brook/master/programmable/modules/bypass_geo.tengo',
62+
kind: 'module',
63+
author: 'TxThinking',
64+
author_url: 'https://www.txthinking.com',
65+
},
66+
{
67+
name: 'Bypass Apple',
68+
url: 'https://raw.githubusercontent.com/txthinking/brook/master/programmable/modules/bypass_apple.tengo',
69+
kind: 'module',
70+
author: 'TxThinking',
71+
author_url: 'https://www.txthinking.com',
72+
},
73+
{
74+
name: 'Disalbe Fake DNS for Instagram',
75+
url: 'https://raw.githubusercontent.com/txthinking/brook/master/programmable/modules/instagram_system_dns.tengo',
76+
kind: 'module',
77+
author: 'TxThinking',
78+
author_url: 'https://www.txthinking.com',
79+
},
80+
{
81+
name: 'Disable Fake DNS for ChatGPT Advanced Voice',
82+
url: 'https://raw.githubusercontent.com/txthinking/brook/master/programmable/modules/chatgpt_advanced_voice.tengo',
83+
kind: 'module',
84+
author: 'TxThinking',
85+
author_url: 'https://www.txthinking.com',
86+
},
87+
{
88+
name: 'Unlock Xbox country limit',
89+
url: 'https://raw.githubusercontent.com/txthinking/brook/master/programmable/modules/xbox.tengo',
90+
kind: 'module',
91+
ca: true,
92+
author: 'TxThinking',
93+
author_url: 'https://www.txthinking.com',
94+
},
95+
{
96+
name: 'Blokc iOS YouTube v17.15.1 AD',
97+
url: 'https://raw.githubusercontent.com/txthinking/brook/master/programmable/modules/block_youtube_ad.tengo',
98+
kind: 'module',
99+
ca: true,
100+
author: 'TxThinking',
101+
author_url: 'https://www.txthinking.com',
102+
},
103+
{
104+
name: 'Example for hosts',
105+
url: 'https://raw.githubusercontent.com/txthinking/brook/master/programmable/modules/hosts.tengo',
106+
kind: 'module',
107+
author: 'TxThinking',
108+
author_url: 'https://www.txthinking.com',
109+
},
110+
{
111+
name: '重定向 www.google.cn 到 www.google.com',
112+
url: 'https://raw.githubusercontent.com/txthinking/brook/master/programmable/modules/redirect_google_cn.tengo',
113+
kind: 'module',
114+
ca: true,
115+
author: 'TxThinking',
116+
author_url: 'https://www.txthinking.com',
117+
},
118+
{
119+
name: 'Windows 和 macOS 上 Bypass 微信',
120+
url: 'https://raw.githubusercontent.com/txthinking/brook/master/programmable/modules/bypass_app.tengo',
121+
kind: 'module',
122+
author: 'TxThinking',
123+
author_url: 'https://www.txthinking.com',
124+
},
125+
{
126+
name: 'Example for blocking app on macOS, Windows and Linux',
127+
url: 'https://raw.githubusercontent.com/txthinking/brook/master/programmable/modules/block_app.tengo',
128+
kind: 'module',
129+
author: 'TxThinking',
130+
author_url: 'https://www.txthinking.com',
131+
},
132+
{
133+
name: 'Example for only allow some apps to connect internet on macOS, Windows and Linux',
134+
url: 'https://raw.githubusercontent.com/txthinking/brook/master/programmable/modules/allow_app.tengo',
135+
kind: 'module',
136+
author: 'TxThinking',
137+
author_url: 'https://www.txthinking.com',
138+
},
139+
{
140+
name: '三国杀开黑',
141+
url: 'https://raw.githubusercontent.com/txthinking/brook/master/programmable/modules/sanguosha.tengo',
142+
kind: 'module',
143+
author: 'TxThinking',
144+
author_url: 'https://www.txthinking.com',
145+
},
146+
{
147+
name: 'Bypass 大部分中国大陆域名',
148+
url: 'https://bot.txthinking.com/bypass_more_china_domain_a.tengo',
149+
kind: 'module',
150+
author: 'TxThinking',
151+
author_url: 'https://www.txthinking.com',
152+
},
153+
{
154+
name: 'Example for blacklist mode',
155+
url: 'https://raw.githubusercontent.com/txthinking/brook/master/programmable/modules/blacklist_mode.tengo',
156+
kind: 'module',
157+
author: 'TxThinking',
158+
author_url: 'https://www.txthinking.com',
159+
},
160+
{
161+
name: 'mitmproxy client',
162+
url: 'https://raw.githubusercontent.com/txthinking/brook/master/programmable/modules/mitmproxy_client.tengo',
163+
kind: 'module',
164+
author: 'TxThinking',
165+
author_url: 'https://www.txthinking.com',
166+
},
167+
{
168+
name: 'Example for packet capture',
169+
url: 'https://raw.githubusercontent.com/txthinking/brook/master/programmable/modules/packet_capture.tengo',
170+
kind: 'module',
171+
ca: true,
172+
author: 'TxThinking',
173+
author_url: 'https://www.txthinking.com',
174+
},
175+
{
176+
name: 'Get iOS app history version list',
177+
url: 'https://raw.githubusercontent.com/txthinking/brook/master/programmable/modules/ios_app_downgrade_history.tengo',
178+
kind: 'module',
179+
ca: true,
180+
author: 'TxThinking',
181+
author_url: 'https://www.txthinking.com',
182+
},
183+
{
184+
name: 'Download the specified version of iOS app',
185+
url: 'https://raw.githubusercontent.com/txthinking/brook/master/programmable/modules/ios_app_downgrade.tengo',
186+
kind: 'module',
187+
ca: true,
188+
author: 'TxThinking',
189+
author_url: 'https://www.txthinking.com',
190+
},
191+
{
192+
name: 'Example of modifying HTTP(S) responses',
193+
url: 'https://raw.githubusercontent.com/txthinking/brook/master/programmable/modules/response_sample.tengo',
194+
kind: 'module',
195+
ca: true,
196+
author: 'TxThinking',
197+
author_url: 'https://www.txthinking.com',
198+
},
199+
{
200+
name: 'Example',
201+
url: 'https://raw.githubusercontent.com/txthinking/brook/master/programmable/client/example.tengo',
202+
kind: 'client',
203+
author: 'TxThinking',
204+
author_url: 'https://www.txthinking.com',
205+
}
206+
]

programmable/modules/allow_app.tengo

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
// Note: This is just an example, you can modify it according to your needs
2+
// Brook macOS need enable App Mode
3+
14
// Allow some apps to connect to internet, block others.
25
// 仅允许某些 app 联网
36
modules = append(modules, {

programmable/modules/blacklist_mode.tengo

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// Note: This is just an example, you can modify it according to your needs
2+
13
// Blacklist mode, only proxy some domains.
24
// 黑名单模式,仅代理指定的域名.
35
modules = append(modules, {

programmable/modules/block_ad_domain.tengo

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
// Note: The script limits the stack size 2048. If your array or map exceeds max stack size, try splitting it into multiple. The memory occupied by a dictionary is approximately twice that of an array with same elements.
2+
13
// Block some AD domains. This is a sample containing a small amount of data.
24
// 阻断一些广告域名. 这是一个包含少量数据的样本.
3-
// The script limits the stack size 2048. If your array or map exceeds max stack size, try splitting it into multiple. The memory occupied by a dictionary is approximately twice that of an array with same elements.
45
modules = append(modules, {
56
dnsquery: func(m) {
67
text := import("text")

programmable/modules/block_app.tengo

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
// Note: This is just an example, you can modify it according to your needs
2+
// Brook macOS need enable App Mode
3+
14
// Block some apps to connect to internet
25
// 禁止某些 app 联网
36
modules = append(modules, {

programmable/modules/block_google_secure_dns.tengo

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
// Block google secure DNS to avoid Fake DNS does not work
2-
// https://www.txthinking.com/talks/articles/brook-fakedns-en.article
32
// 防止 Fake DNS 不生效
4-
// https://www.txthinking.com/talks/articles/brook-fakedns.article
53
modules = append(modules, {
64
dnsquery: func(m) {
75
if m.domain == "dns.google" {

0 commit comments

Comments
 (0)