跨平台可程式網路工具。
❤️ Shiliew - 專為珍惜時間的人設計的網頁應用程式
bash <(curl https://bash.ooo/nami.sh)
nami install brook
brook server -l :9999 -p hello
您可能想要使用
brook link
來自訂一些參數
Brook GUI會在不同的時間向腳本傳遞不同的全域變量,腳本只需要將處理結果賦值給全域變數out
即可
在討論 GUI 用戶端之前,我們先來談談命令列客戶端brook
。我們知道,部署伺服器後,您可以使用命令列客戶端brook
在您的電腦上建立本機socks5代理程式或http代理,然後在系統代理設定或瀏覽器中設定它以使用此代理程式。然而:
關於socks5和http代理的具體內容,可以閱讀這篇文章。
GUI客戶端不使用socks5和http代理模式,因此不存在某些不使用系統代理的軟體的問題。相反,它使用虛擬網卡來接管整個系統的網絡,包括基於UDP的http3。而且,Brook允許我們以程式方式控制網路請求,因此有必要了解網路請求的基本知識。
注意:當我們談論位址時,我們指的是包含連接埠號碼的位址,例如網域位址:
google.com:443
或 IP 位址:8.8.8.8:53
google.com:443
8.8.8.8:53
,來查詢google.com
的 IPgoogle.com
的 IP 傳回給應用程序,例如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
,查詢google.com
的 IP8.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
的IP,例如接收1.2.3.4
1.2.3.4:443
1.2.3.4:443
發送網路請求,並將資料傳回給Brook客戶端但是,如果出現以下情況,網域名稱將不會/無法被解析,這表示Brook客戶端不會/無法知道網域名稱是什麼,並將其視為發送到IP位址的正常要求:
為了避免Fake DNS的無效,請參考這篇文章。
google.com:443
8.8.8.8:53
,查詢google.com
的 IP8.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
,查詢google.com
的 IP8.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客戶端為了避免Fake DNS的無效,請參考這篇文章。
in_brooklinks
變數被觸發時:in_dnsquery
變數被觸發時,可以根據需要進行處理,如:in_address
變數被觸發時,可以根據需要進行處理,如:in_httprequest
和in_httpresponse
。in_httprequest
變數被觸發時,可以根據需要進行處理,如:in_httpresponse
變數被觸發時,可以根據需要進行處理,如:有關變數的屬性和回應的詳細信息,請參閱以下內容。
多變的 | 類型 | 狀態 | 定時 | 描述 | 輸出類型 |
---|---|---|---|---|---|
in_brooklinks | 地圖 | / | 連接前 | 預先定義多個溪流鏈接,然後以程式設計方式指定要連接到哪一個 | 地圖 |
in_dns查詢 | 地圖 | 假 DNS:開 | 當發生 DNS 查詢時 | 腳本可以決定如何處理這個請求 | 地圖 |
輸入地址 | 地圖 | / | 連接到某個地址時 | 腳本可以決定如何連接 | 地圖 |
in_http請求 | 地圖 | / | 當 HTTP(S) 請求到來時 | 腳本可以決定如何處理這個請求 | 地圖 |
in_http請求,in_http回應 | 地圖 | / | 當 HTTP(S) 回應到來時 | 腳本可以決定如何處理這個回應 | 地圖 |
鑰匙 | 類型 | 描述 | 例子 |
---|---|---|---|
_ | 布林值 | 無意義的 | 真的 |
out
,如果不是map
類型則忽略
鑰匙 | 類型 | 描述 | 例子 |
---|---|---|---|
…… | …… | …… | …… |
自訂名稱 | 細繩 | 布魯克林克 | 溪://... |
…… | …… | …… | …… |
鑰匙 | 類型 | 描述 | 例子 |
---|---|---|---|
領域 | 細繩 | 網域 | Google網站 |
類型 | 細繩 | 查詢類型 | 一個 |
應用程式標識符 | 細繩 | 應用程式 ID 或路徑 | com.google.Chrome.helper |
介面 | 細繩 | 網路介面。僅限蘋果電腦 | 恩0 |
out
,如果是error
類型會記錄在日誌中。如果不是對map
類型則忽略
鑰匙 | 類型 | 描述 | 例子 |
---|---|---|---|
堵塞 | 布林值 | 是否Block,預設false | 錯誤的 |
ip | 細繩 | 直接指定IP,僅當type 為A / AAAA 時有效 | 1.2.3.4 |
系統 | 布林值 | 透過系統DNS解析,預設false | 錯誤的 |
旁路 | 布林值 | 透過繞過 DNS 解析,預設false | 錯誤的 |
布魯克林基 | 細繩 | 當需要連接Server時,改為連接in_brooklinks鍵指定的Server | 自訂名稱 |
鑰匙 | 類型 | 描述 | 例子 |
---|---|---|---|
網路 | 細繩 | 網路類型,取值tcp / udp | TCP協定 |
IP位址 | 細繩 | IP類型位址。只有ipaddress和domainaddress。請注意,這兩者之間沒有關係 | 1.2.3.4:443 |
網域地址 | 細繩 | 網域類型地址,由於FakeDNS我們可以在這裡取得網域名稱地址 | Google.com:443 |
應用程式標識符 | 細繩 | 應用程式 ID 或路徑 | com.google.Chrome.helper |
介面 | 細繩 | 網路介面。僅限蘋果電腦 | 恩0 |
out
,如果是error
類型會記錄在日誌中。如果不是對map
類型則忽略
鑰匙 | 類型 | 描述 | 例子 |
---|---|---|---|
堵塞 | 布林值 | 是否Block,預設false | 錯誤的 |
IP位址 | 細繩 | IP類型位址,重寫目的地 | 1.2.3.4:443 |
來自繞過 DNS 的 IP 位址 | 細繩 | 使用Bypass DNS取得A 或AAAA IP並重寫目的地,僅當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 |
與身體的中間人 | 布林值 | 是否操作http body,預設false 。會將請求和回應的正文讀入記憶體並與腳本互動。 iOS 50M 總記憶體限制可能會殺死進程 | 錯誤的 |
mitmautohandlecompress | 布林值 | 與腳本互動時是否自動解壓縮http body,預設false | 錯誤的 |
中間人客戶端超時 | 整數 | MITM 與伺服器對話逾時,秒,預設為 0 | 0 |
mitm伺服器讀取逾時 | 整數 | MITM從客戶端讀取的超時時間,秒,預設為0 | 0 |
mitm伺服器寫入逾時 | 整數 | MITM寫入客戶端的超時時間,秒,預設0 | 0 |
布魯克林基 | 細繩 | 當需要連接Server時,改為連接in_brooklinks鍵指定的Server | 自訂名稱 |
鑰匙 | 類型 | 描述 | 例子 |
---|---|---|---|
網址 | 細繩 | 網址 | https://example.com/hello |
方法 | 細繩 | HTTP方式 | 得到 |
身體 | 位元組 | HTTP 請求正文 | / |
…… | 細繩 | 其他字段是 HTTP 標頭 | / |
out
,必須設定為請求或回應
鑰匙 | 類型 | 描述 | 例子 |
---|---|---|---|
狀態碼 | 整數 | HTTP 狀態碼 | 200 |
身體 | 位元組 | HTTP 回應正文 | / |
…… | 細繩 | 其他字段是 HTTP 標頭 | / |
out
,必須設定為回應
在 Brook GUI 中,腳本被抽象化為Modules 。已經有一些模組了,這沒什麼神奇的,它只是自動組合 _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
天吾語言文法
圖書館
文字:正規表示式、字串轉換和操作
數學:數學常數和函數
times:與時間相關的函數
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
如果您正在編寫複雜的腳本,GUI 可能不方便偵錯。建議在桌面上使用 tun2brook 配合fmt.println
進行調試
https://txthinking.github.io/ca/ca.pem
作業系統 | 如何 |
---|---|
iOS系統 | https://www.youtube.com/watch?v=HSGPC2vpDGk |
安卓 | Android有用戶CA和系統CA,ROOT後必須安裝在系統CA中 |
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 |
有些軟體可能無法讀取系統CA,可以使用
curl --cacert ~/.nami/bin/ca.pem
進行調試
Brook OpenWRT:完美支援IPv4/IPv6/TCP/UDP
Brook 對 IPv6 的立場是正面的,如果您的伺服器或本地環境沒有 IPv6 堆疊,請閱讀本文。
brook link --address
指定 IP 位址,則 Brook 用戶端將嘗試使用本機 DNS 解析網域的 IP,首選 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
進行測試。如果輸入的echo伺服器是網域位址,則會觸發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
或其他模組決定是否繞過;後者透過A記錄Bypass DNS
取得IP後直接繞過。如果您的本機不支援 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 參數。首選 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 lib,請設定 env SOCKS5_DEBUG=true
--pid ="":用於儲存pid的檔案路徑。傳送 SIGUSR1 給我重置 unix 系統上的 --serverLog 文件
--pprof ="": 去http pprof監聽位址,如:6060
--prometheus ="":prometheus http監聽地址,如:7070。如果是公網傳輸,建議配合nico使用
--prometheusPath ="":prometheus http路徑,如/xxx。如果是在公網傳輸,建議使用難以猜測的值
--serverHKDFInfo ="":伺服器HKDF 訊息,大多數時候你不需要更改此設置,如果更改,客戶端中的所有和每個布魯克連結必須相同,我的意思是每個(預設值:“brook” )
--serverLog ="":啟用伺服器日誌、流量等。有效值為檔案路徑或“控制台”。傳送 SIGUSR1 給我以重置 UNIX 系統上的日誌檔案。與 --log 參數互斥。使用 brook 協定與 server/wsserver/wssserver/quicserver 搭配使用
--speedLimit ="": 限制速度(b),500kb/s 如:500000,適用於 server/wsserver/wssserver/quicserver (預設: 0)
--tag ="": 進程可以使用標籤,將附加到日誌或伺服器日誌中,例如:'key1:value1'。所有標籤也會作為查詢參數一一附加到userAPI中
--userAPI ="":當您建立自己的使用者係統時,Brook Server 會向您的 userAPI 傳送 GET 請求來檢查 token 是否有效,例如:https://your-api-server.com/a_unpredictable_path。是的,建議為你的https API添加不可預測的路徑,當然,你也可以使用http api進行內網通訊。請求格式為https://your-api-server.com/a_unpredictable_path?token=xxx。當回應為200時,body應該是使用者的唯一標識符,例如使用者ID;所有其他狀態代碼都被視為代表非法用戶,在這些情況下,正文應該是描述錯誤的字串。它應該與 --serverLog 和帶有 brook 協定的 server/wsserver/wssserver/quicserver 一起使用。欲了解更多信息,請閱讀https://github.com/txthinking/brook/blob/master/protocol/user.md
--userAPIInvalidCacheTime ="":一旦令牌被檢查並且無效,則在一段時間內不會請求 userAPI 再次驗證。必須設定合理的值,否則會影響每個傳入連線的效能。請注意,當您在使用者係統中將使用者狀態從無效變更為有效時,這可能會影響使用者體驗(預設:1800)
--userAPIValidCacheTime ="":一旦令牌被檢查並有效,在一段時間內將不會請求 userAPI 再次驗證。必須設定一個合理的值,否則會影響每個傳入連線的效能(預設:3600)
--version, -v : 列印版本
啟動支援tcp和udp的brook伺服器
--blockCIDR4List ="": 此選項將在未來版本中刪除,請使用全域選項
--blockCIDR6List ="": 此選項將在未來版本中刪除,請使用全域選項
--blockDomainList ="": 此選項將在未來版本中刪除,請使用全域選項
--blockGeoIP ="": 此選項將在未來版本中刪除,請使用全域選項
--example : 顯示最小的用法範例
--listen, -l ="": 監聽位址,如:':9999'
--password, -p ="": 伺服器密碼
--tcpTimeout ="": 時間(秒)(預設值:0)
--udpTimeout ="": 時間(秒)(預設值:0)
--updateListInterval ="":此選項將在未來版本中刪除,請使用全域選項(預設值:0)
啟動一個支援tcp和udp的brook客戶端。它可以開啟一個socks5代理,[src <->socks5<->$brookclient<->$brookserver<->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 ="": 只有當您的socks5伺服器IP與監聽IP不同時
--tcpTimeout ="": 時間(秒)(預設值:0)
--udpTimeout ="": 時間(秒)(預設值:0)
啟動一個支援tcp和udp的brook wsserver。它打開一個標準的http伺服器和一個websocket伺服器
--blockCIDR4List ="": 此選項將在未來版本中刪除,請使用全域選項
--blockCIDR6List ="": 此選項將在未來版本中刪除,請使用全域選項
--blockDomainList ="": 此選項將在未來版本中刪除,請使用全域選項
--blockGeoIP ="": 此選項將在未來版本中刪除,請使用全域選項
--example : 顯示最小的用法範例
--listen, -l ="": 監聽位址,如:':80'
--password, -p ="": 伺服器密碼
--path ="":URL 路徑(預設:/ws)
--tcpTimeout ="": 時間(秒)(預設值:0)
--udpTimeout ="": 時間(秒)(預設值:0)
--updateListInterval ="":此選項將在未來版本中刪除,請使用全域選項(預設值:0)
--withoutBrookProtocol : 資料不會使用brook協定加密
--xForwardedFor :替換--log中的from字段,注意這可能是偽造的
啟動一個支援tcp和udp的brook wsclient。它可以開啟一個socks5代理,[src <->socks5<->$brook wsclient<->$brookwsserver<->dst]
--example : 顯示最小的用法範例
--http ="": 在哪裡監聽 HTTP 代理連接
--link ="": brook 鏈接,可透過 $brook 連結取得。 wssserver 和密碼參數將被忽略
--password, -p ="": Brook wsserver 密碼
--socks5 ="":在哪裡監聽 SOCKS5 連線(預設值:127.0.0.1:1080)
--socks5ServerIP ="": 只有當您的socks5伺服器IP與監聽IP不同時
--tcpTimeout ="": 時間(秒)(預設值:0)
--udpTimeout ="": 時間(秒)(預設值:0)
--wsserver, -s ="": Brook wsserver位址,如:ws://1.2.3.4:80,如果沒有路徑則將使用/ws。任何情況下都不要省略端口
啟動一個支援tcp和udp的brook wssserver。它打開一個標準的 https 伺服器和一個 websocket 伺服器
--blockCIDR4List ="": 此選項將在未來版本中刪除,請使用全域選項
--blockCIDR6List ="": 此選項將在未來版本中刪除,請使用全域選項
--blockDomainList ="": 此選項將在未來版本中刪除,請使用全域選項
--blockGeoIP ="": 此選項將在未來版本中刪除,請使用全域選項
--cert ="":網域的憑證檔案絕對路徑,例如/path/to/cert.pem。如果cert或certkey為空,將自動頒發證書
--certkey ="":網域的憑證金鑰檔案絕對路徑,例如/path/to/certkey.pem。如果cert或certkey為空,將自動頒發證書
--domainaddress ="":如:domain.com:443。如果選擇自動頒發證書,則網域名稱必須已解析為伺服器IP,並且也會使用80端口
--example : 顯示最小的用法範例
--password, -p ="": 伺服器密碼
--path ="":URL 路徑(預設:/ws)
--tcpTimeout ="": 時間(秒)(預設值:0)
--udpTimeout ="": 時間(秒)(預設值:0)
--updateListInterval ="":此選項將在未來版本中刪除,請使用全域選項(預設值:0)
--withoutBrookProtocol : 資料不會使用brook協定加密
啟動一個支援tcp和udp的brook wssclient。它可以開啟一個socks5代理,[src <->socks5<->$brook wssclient<->$brookwssserver<->dst]
--example : 顯示最小的用法範例
--http ="": 在哪裡監聽 HTTP 代理連接
--link ="": brook 鏈接,可透過 $brook 連結取得。 wssserver 和密碼參數將被忽略
--password, -p ="": Brook wssserver 密碼
--socks5 ="":在哪裡監聽 SOCKS5 連線(預設值:127.0.0.1:1080)
--socks5ServerIP ="": 只有當您的socks5伺服器IP與監聽IP不同時
--tcpTimeout ="": 時間(秒)(預設值:0)
--udpTimeout ="": 時間(秒)(預設值:0)
--wssserver, -s ="": Brook wssserver 位址,如:wss://google.com:443,如果沒有路徑則會使用 /ws。任何情況下都不要省略端口
啟動一個支援tcp和udp的brook quicserver。
--blockCIDR4List ="": 此選項將在未來版本中刪除,請使用全域選項
--blockCIDR6List ="": 此選項將在未來版本中刪除,請使用全域選項
--blockDomainList ="": 此選項將在未來版本中刪除,請使用全域選項
--blockGeoIP ="": 此選項將在未來版本中刪除,請使用全域選項
--cert ="":網域的憑證檔案絕對路徑,例如/path/to/cert.pem。如果cert或certkey為空,將自動頒發證書
--certkey ="":網域的憑證金鑰檔案絕對路徑,例如/path/to/certkey.pem。如果cert或certkey為空,將自動頒發證書
--domainaddress ="":如:domain.com:443。如果選擇自動頒發證書,則網域名稱必須已解析為伺服器IP,並且也會使用80端口
--example : 顯示最小的用法範例
--password, -p ="": 伺服器密碼
--tcpTimeout ="": 時間(秒)(預設值:0)
--udpTimeout ="": 時間(秒)(預設值:0)
--updateListInterval ="":此選項將在未來版本中刪除,請使用全域選項(預設值:0)
--withoutBrookProtocol : 資料不會使用brook協定加密
啟動一個支援tcp和udp的brook quicclient。它可以開啟一個socks5代理,[src <->socks5<->$brook quicclient<->$brook quicserver<->dst]。 (全域撥號參數被忽略)
--example : 顯示最小的用法範例
--http ="": 在哪裡監聽 HTTP 代理連接
--link ="": brook 鏈接,可透過 $brook 連結取得。 wssserver 和密碼參數將被忽略
--socks5 ="":在哪裡監聽 SOCKS5 連線(預設值:127.0.0.1:1080)
--socks5ServerIP ="": 只有當您的socks5伺服器IP與監聽IP不同時
--tcpTimeout ="": 時間(秒)(預設值:0)
--udpTimeout ="": 時間(秒)(預設值:0)
透過 brook 中繼網路流量,支援 TCP 和 UDP。存取[from位址]等於存取[to位址],[src<->from位址<->$brook server/wsserver/wssserver/quicserver<->to位址]
--example : 顯示最小的用法範例
--from, -f, -l ="": 監聽位址: like ':9999'
--link ="": brook 鏈接,可透過 $brook 連結取得。伺服器和密碼參數將被忽略
--password, -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, quic://domain.com:443
--tcpTimeout ="": 時間(秒)(預設值:0)
--to, -t ="": 中繼位址,如:1.2.3.4:9999
--udpTimeout ="": 時間(秒)(預設值:0)
透過 brook 執行 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)
--example : 顯示最小的用法範例
--link ="": brook 鏈接,可透過 $brook 連結取得。伺服器和密碼參數將被忽略
--listen, -l ="": 監聽位址,如:127.0.0.1:53
--password, -p ="": 密碼
--server, -s ="": brook server 或 brook wsserver 或 brook wssserver 或 brook quicserver, 例如: 1.2.3.4:9999, ws://1.2.3.4:9999, wss://domain.com:443/ ws,quic://domain.com:443
--tcpTimeout ="": 時間(秒)(預設值:0)
--udpTimeout ="": 時間(秒)(預設值: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 協議
--example : 顯示最小的用法範例
--fragment ="":當server是brook wssserver時,將ClientHello分割成多個片段,然後逐一傳送,有延遲(毫秒)。格式為min_length:max_length:min_delay:max_delay,不能為零,如50:100:10:50
--insecure : 當伺服器是 brook wssserver 或 brook quicserver 時,用戶端不驗證伺服器的憑證鍊和主機名
--name ="": 給該伺服器一個名稱
--password, -p ="": 密碼
--server, -s ="": 支援brook伺服器、brook wsserver、brook wssserver、socks5伺服器、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。注意:僅 brook GUI(OpenWrt 除外)和 tun2brook 支持
--udpoverstream : 當伺服器是 brook quicserver 時,UDP over Stream。一般情況下,您需要此參數,因為 QUIC 的最大資料封包大小非常小。注意:目前僅支援 brook CLI 和 tun2brook
--udpovertcp : 當伺服器是brook伺服器時,UDP over TCP
--username, -u ="": 使用者名,當伺服器是socks5伺服器時
--withoutBrookProtocol : 當伺服器為 brook wsserver 或 brook wssserver 或 brook quicserver 時,資料不會使用 brook 協定加密
運行客戶端並使用支援 TCP 和 UDP 的布魯克連結進行連線。它可以啟動一個socks5代理,[src <->socks5<->$brook connect<->$brook server/wsserver/wssserver/quicserver <->dst]
--example : 顯示最小的用法範例
--http ="": 在哪裡監聽 HTTP 代理連接
--link, -l ="": brook 鏈接,可以透過 $ brook 鏈接獲取
--socks5 ="":在哪裡監聽 SOCKS5 連線(預設值:127.0.0.1:1080)
--socks5ServerIP ="": 只有當您的socks5伺服器IP與監聽IP不同時
--tcpTimeout ="": 時間(秒)(預設值:0)