Ein plattformübergreifendes programmierbares Netzwerktool.
❤️ Shiliew – Eine Netzwerk-App für diejenigen, die ihre Zeit schätzen
bash <(curl https://bash.ooo/nami.sh)
nami install brook
brook server -l :9999 -p hello
Möglicherweise möchten Sie
brook link
verwenden, um einige Parameter anzupassen
Die Brook-GUI übergibt zu unterschiedlichen Zeiten verschiedene globale Variablen an das Skript, und das Skript muss nur das Verarbeitungsergebnis der globalen Variablen out
zuweisen
Bevor wir den GUI-Client besprechen, sprechen wir zunächst über den Befehlszeilen-Client brook
. Wie wir wissen, können Sie nach der Bereitstellung des Servers mit dem Befehlszeilen-Client brook
einen lokalen Socks5-Proxy oder HTTP-Proxy auf Ihrem Computer erstellen und ihn dann in den Proxy-Einstellungen Ihres Systems oder in Ihrem Browser für die Verwendung dieses Proxys konfigurieren. Jedoch:
Einzelheiten zu Socks5 und http-Proxy finden Sie in diesem Artikel.
Der GUI-Client verwendet nicht den Socks5- und HTTP-Proxy-Modus, daher gibt es kein Problem, wenn einige Software den System-Proxy nicht verwendet. Stattdessen übernimmt es eine virtuelle Netzwerkkarte, um das gesamte Systemnetzwerk zu übernehmen, einschließlich UDP-basiertem http3. Darüber hinaus ermöglicht uns Brook die programmgesteuerte Steuerung von Netzwerkanfragen, sodass Grundkenntnisse über Netzwerkanfragen erforderlich sind.
Hinweis: Wenn wir von Adressen sprechen, meinen wir Adressen, die die Portnummer enthalten, z. B. eine Domain-Adresse:
google.com:443
oder eine IP-Adresse:8.8.8.8:53
google.com:443
8.8.8.8:53
, um die IP von google.com
abzufragengoogle.com
, z. B. 1.2.3.4
, an die App zurück1.2.3.4:443
1.2.3.4:443
Im obigen Prozess stellt die App tatsächlich zwei Netzwerkanfragen: eine an die IP-Adresse 8.8.8.8:53
und eine weitere an die IP-Adresse 1.2.3.4:443
. Mit anderen Worten: Der Domänenname ist im Wesentlichen ein Alias für die IP und muss die IP der Domäne erhalten, um eine Verbindung herzustellen.
Brook verfügt über eine Fake-DNS-Funktion, die den Domänennamen aus den Abfrageanfragen analysieren kann, die eine App an das System-DNS sendet, und entscheiden kann, wie auf die App reagiert werden soll.
google.com:443
8.8.8.8:53
, um die IP von google.com
abzufragen8.8.8.8:53
sendet. Dadurch wird die Variable in_dnsquery
ausgelöst, die Informationen wie domain
enthält240.0.0.1
240.0.0.1:443
240.0.0.1:443
240.0.0.1:443
sendet, stellt fest, dass es sich hierbei um eine gefälschte IP handelt, und wandelt die gefälschte IP-Adresse zurück in die Domain-Adresse google.com:443
um. Dadurch wird die Variable in_address
ausgelöst, die Informationen wie domainaddress
enthältgoogle.com:443
an den Brook-Servergoogle.com
herauszufinden, z. B. den Empfang von 1.2.3.4
1.2.3.4:443
1.2.3.4:443
und gibt die Daten an den Brook-Client zurückWenn jedoch die folgenden Situationen auftreten, wird/kann der Domänenname nicht geparst werden, was bedeutet, dass der Brook-Client den Domänennamen nicht kennt/kann und ihn wie eine normale an eine IP-Adresse gesendete Anfrage behandelt:
Um die Wirkungslosigkeit von Fake DNS zu vermeiden, lesen Sie bitte diesen Artikel.
google.com:443
8.8.8.8:53
, um die IP von google.com
abzufragen8.8.8.8:53
sendet. Dadurch wird die Variable in_address
ausgelöst, die Informationen wie ipaddress
enthält8.8.8.8:53
an den Brook-Server8.8.8.8:53
und gibt das Ergebnis, z. B. 1.2.3.4
, an den Brook-Client zurück1.2.3.4:443
1.2.3.4:443
1.2.3.4:443
sendet. Dadurch wird die Variable in_address
ausgelöst, die Informationen wie ipaddress
enthält1.2.3.4:443
an den Brook-Server1.2.3.4:443
und gibt die Daten an den Brook-Client zurückgoogle.com:443
8.8.8.8:443
, um die IP von google.com
abzufragen8.8.8.8:443
sendet. Dadurch wird die Variable in_address
ausgelöst, die Informationen wie ipaddress
enthält8.8.8.8:443
an den Brook-Server8.8.8.8:443
und gibt das Ergebnis, z. B. 1.2.3.4
, an den Brook-Client zurück1.2.3.4:443
1.2.3.4:443
1.2.3.4:443
sendet. Dadurch wird die Variable in_address
ausgelöst, die Informationen wie ipaddress
enthält1.2.3.4:443
an den Brook-Server1.2.3.4:443
und gibt die Daten an den Brook-Client zurückUm die Wirkungslosigkeit von Fake DNS zu vermeiden, lesen Sie bitte diesen Artikel.
in_brooklinks
ausgelöst wird:in_dnsquery
ausgelöst wird, können Sie sie nach Bedarf verarbeiten, z. B.:in_address
ausgelöst wird, können Sie sie nach Bedarf verarbeiten, z. B.:in_httprequest
und in_httpresponse
auslöst.in_httprequest
ausgelöst wird, können Sie sie nach Bedarf verarbeiten, z. B.:in_httpresponse
ausgelöst wird, können Sie sie nach Bedarf verarbeiten, z. B.:Detaillierte Informationen zu den Eigenschaften und Reaktionen von Variablen finden Sie im folgenden Inhalt.
Variable | Typ | Zustand | Timing | Beschreibung | Out-Typ |
---|---|---|---|---|---|
in_brooklinks | Karte | / | Vor dem Anschließen | Definieren Sie mehrere Bachverbindungen vor und geben Sie dann programmgesteuert an, mit welcher Verbindung eine Verbindung hergestellt werden soll | Karte |
in_dnsquery | Karte | FakeDNS: Ein | Wenn eine DNS-Abfrage auftritt | Das Skript kann entscheiden, wie mit dieser Anfrage umgegangen wird | Karte |
in_address | Karte | / | Beim Herstellen einer Verbindung zu einer Adresse | Das Skript kann entscheiden, wie eine Verbindung hergestellt wird | Karte |
in_httprequest | Karte | / | Wenn eine HTTP(S)-Anfrage eingeht | Das Skript kann entscheiden, wie mit dieser Anfrage umgegangen wird | Karte |
in_httprequest,in_httpresponse | Karte | / | wenn eine HTTP(S)-Antwort eingeht | Das Skript kann entscheiden, wie mit dieser Antwort umgegangen wird | Karte |
Schlüssel | Typ | Beschreibung | Beispiel |
---|---|---|---|
_ | bool | bedeutungslos | WAHR |
out
, wird ignoriert, wenn es nicht vom Typ map
ist
Schlüssel | Typ | Beschreibung | Beispiel |
---|---|---|---|
... | ... | ... | ... |
benutzerdefinierter Name | Zeichenfolge | Bach-Link | Bach://... |
... | ... | ... | ... |
Schlüssel | Typ | Beschreibung | Beispiel |
---|---|---|---|
Domain | Zeichenfolge | Domainname | google.com |
Typ | Zeichenfolge | Abfragetyp | A |
appid | Zeichenfolge | App-ID oder Pfad | com.google.Chrome.helper |
Schnittstelle | Zeichenfolge | Netzwerkschnittstelle. Nur Mac | en0 |
out
, wenn es sich um error
handelt, wird er im Protokoll aufgezeichnet. Wird ignoriert, wenn es nicht vom Typ map
ist
Schlüssel | Typ | Beschreibung | Beispiel |
---|---|---|---|
Block | bool | Ob Block, Standardwert ist false | FALSCH |
IP | Zeichenfolge | Geben Sie die IP direkt an. Nur gültig, wenn type A / AAAA ist | 1.2.3.4 |
System | bool | Durch System-DNS auflösen, Standardwert false | FALSCH |
Bypass | bool | Durch Umgehung von DNS auflösen, Standardeinstellung: false | FALSCH |
Brooklinkkey | Zeichenfolge | Wenn Sie eine Verbindung zum Server herstellen müssen, stellen Sie stattdessen eine Verbindung zu dem Server her, der durch den Schlüssel in_brooklinks angegeben ist | benutzerdefinierter Name |
Schlüssel | Typ | Beschreibung | Beispiel |
---|---|---|---|
Netzwerk | Zeichenfolge | Netzwerktyp, der Wert tcp / udp | TCP |
IP-Adresse | Zeichenfolge | IP-Typ-Adresse. Es gibt nur IP-Adresse und Domänenadresse. Beachten Sie, dass zwischen diesen beiden keine Beziehung besteht | 1.2.3.4:443 |
Domänenadresse | Zeichenfolge | Domain-Typ-Adresse, aufgrund von FakeDNS können wir hier die Domain-Namen-Adresse erhalten | google.com:443 |
appid | Zeichenfolge | App-ID oder Pfad | com.google.Chrome.helper |
Schnittstelle | Zeichenfolge | Netzwerkschnittstelle. Nur Mac | en0 |
out
, wenn es sich um error
handelt, wird er im Protokoll aufgezeichnet. Wird ignoriert, wenn es nicht vom Typ map
ist
Schlüssel | Typ | Beschreibung | Beispiel |
---|---|---|---|
Block | bool | Ob Block, Standardwert ist false | FALSCH |
IP-Adresse | Zeichenfolge | IP-Typ-Adresse, Ziel neu schreiben | 1.2.3.4:443 |
IP-Adresse von BypassDNS | Zeichenfolge | Verwenden Sie Bypass DNS, um A oder AAAA -IP zu erhalten und das Ziel neu zu schreiben. Dies ist nur gültig, wenn domainaddress vorhanden ist, der Wert A / AAAA | A |
Bypass | bool | Bypass, Standardwert false . Wenn true und domainaddress , muss ipaddress oder ipaddressfrombypassdns angegeben werden | FALSCH |
mitm | bool | Ob MITM durchgeführt werden soll, Standardwert: false . Nur gültig, wenn network tcp ist. CA muss installiert werden, siehe unten | FALSCH |
mitmprotocol | Zeichenfolge | Das MITM-Protokoll muss explizit angegeben werden, der Wert ist http / https | https |
mitmcertdomain | Zeichenfolge | Der Domänenname des MITM-Zertifikats, der standardmäßig aus domainaddress übernommen wird. Wenn ipaddress und mitm true und mitmprotocol https ist, muss explizit angegeben werden | example.com |
mitmwithbody | bool | Ob der http-Body manipuliert werden soll, standardmäßig false . liest den Text der Anfrage und Antwort in den Speicher und interagiert mit dem Skript. Das Gesamtspeicherlimit von iOS 50 MB kann den Prozess abbrechen | FALSCH |
mitmautohandlecompress | bool | Ob der HTTP-Body bei der Interaktion mit dem Skript automatisch dekomprimiert werden soll, der Standardwert ist false | FALSCH |
mitmclienttimeout | int | Zeitüberschreitung für MITM-Kommunikation mit dem Server, Sekunde, Standardwert 0 | 0 |
mitmserverreadtimeout | int | Zeitüberschreitung für MITM-Lesen vom Client, Sekunde, Standardwert 0 | 0 |
mitmserverwritetimeout | int | Zeitüberschreitung für MITM-Schreiben an den Client, Sekunde, Standardwert 0 | 0 |
Brooklinkkey | Zeichenfolge | Wenn Sie eine Verbindung zum Server herstellen müssen, stellen Sie stattdessen eine Verbindung zu dem Server her, der durch den Schlüssel in_brooklinks angegeben ist | benutzerdefinierter Name |
Schlüssel | Typ | Beschreibung | Beispiel |
---|---|---|---|
URL | Zeichenfolge | URL | https://example.com/hello |
Verfahren | Zeichenfolge | HTTP-Methode | ERHALTEN |
Körper | Bytes | HTTP-Anfragetext | / |
... | Zeichenfolge | andere Felder sind HTTP-Header | / |
out
muss auf eine Anfrage oder Antwort gesetzt werden
Schlüssel | Typ | Beschreibung | Beispiel |
---|---|---|---|
StatusCode | int | HTTP-Statuscode | 200 |
Körper | Bytes | HTTP-Antworttext | / |
... | Zeichenfolge | andere Felder sind HTTP-Header | / |
out
muss auf eine Antwort gesetzt werden
In der Brook-GUI werden Skripte in Module abstrahiert. Es gibt bereits einige Module, und es gibt keine Zauberei, es kombiniert einfach automatisch _header.tengo und _footer.tengo, sodass Sie nur das Modul selbst schreiben müssen.
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
Wenn Sie tun2brook verwenden, können Sie auf folgende Weise mehrere Module manuell zu einem vollständigen Skript kombinieren. Zum Beispiel:
cat _header.tengo > my.tengo
cat block_google_secure_dns.tengo >> my.tengo
cat block_aaaa.tengo >> my.tengo
cat _footer.tengo >> my.tengo
Tengo-Sprachsyntax
Bibliothek
Text: reguläre Ausdrücke, String-Konvertierung und -Manipulation
Mathematik: Mathematische Konstanten und Funktionen
Zeiten: zeitbezogene Funktionen
Rand: Zufallsfunktionen
fmt: Formatierungsfunktionen
json: JSON-Funktionen
enum: Aufzählungsfunktionen
Hex: Hex-Kodierungs- und Dekodierungsfunktionen
base64: Base64-Kodierungs- und Dekodierungsfunktionen
brook
: Bachmodul
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
Wenn Sie komplexe Skripte schreiben, eignet sich die GUI möglicherweise nicht zum Debuggen. Es wird empfohlen, tun2brook auf dem Desktop zum Debuggen mit fmt.println
zu verwenden
https://txthinking.github.io/ca/ca.pem
Betriebssystem | Wie |
---|---|
iOS | https://www.youtube.com/watch?v=HSGPC2vpDGk |
Android | Android verfügt über eine Benutzer-CA und eine System-CA und muss nach ROOT in der System-CA installiert werden |
macOS | nami install mad ca.txthinking , sudo mad install --ca ~/.nami/bin/ca.pem |
Windows | nami install mad ca.txthinking , Admin: mad install --ca ~/.nami/bin/ca.pem |
Manche Software liest die System-CA möglicherweise nicht. Sie können zum Debuggen
curl --cacert ~/.nami/bin/ca.pem
verwenden
Brook OpenWRT: Unterstützt perfekt IPv4/IPv6/TCP/UDP
Brooks Haltung zu IPv6 ist positiv. Wenn Ihr Server oder Ihre lokale Umgebung nicht über einen IPv6-Stack verfügt, lesen Sie diesen Artikel.
brook link --address
angegeben hat, versucht der Brook-Client, die IP der Domäne mithilfe des lokalen DNS aufzulösen, wobei der AAAA-Eintrag bevorzugt wird. Zum Beispiel:Connectivity Check
. Wenn es manchmal funktioniert, andere jedoch nicht, deutet dies auf Instabilität hin.Test IPv4 TCP
zum Testen; Dieser Test hat die IP-Adresse fest codiert und löst daher keine DNS-Auflösung aus.Test IPv4 UDP
zum Testen; Dieser Test hat die IP-Adresse fest codiert und löst daher keine DNS-Auflösung aus.Test IPv6 TCP
zum Testen; Dieser Test hat die IP-Adresse fest codiert und löst daher keine DNS-Auflösung aus.Test IPv6 UDP
zum Testen; Dieser Test hat die IP-Adresse fest codiert und löst daher keine DNS-Auflösung aus.Echo Client
. Wenn es sich bei dem eingegebenen Echo-Server um eine Domänenadresse handelt, wird eine DNS-Auflösung ausgelöst.Block Google Secure DNS
zu aktivieren. Informationen zu anderen Fällen finden Sie in diesem Artikel.Block Google Secure DNS
Bypass Geo
Bypass Apple
: Um Probleme beim Empfang von Apple-Nachrichtenbenachrichtigungen zu vermeiden.Bypass China domain
oder Bypass China domain A
: Ersteres verwendet Bypass DNS
, um die IP zu erhalten, dann entscheiden Bypass Geo
oder andere Module, ob die Umgehung erfolgen soll. Letzteres umgeht direkt nach Erhalt der IP mit Bypass DNS
using A Records. Letzteres ist erforderlich, wenn Ihr lokales Gerät IPv6 nicht unterstützt. Jeder Unterbefehl verfügt über einen Parameter --example
, der das minimale Anwendungsbeispiel ausgeben kann
Brook – Ein plattformübergreifendes programmierbares Netzwerktool
Bach
brook --help
Verwendung :
Brook [GLOBAL OPTIONS] command [COMMAND OPTIONS] [ARGUMENTS...]
--blockCIDR4List ="": Ein CIDR pro Zeile, https://, http:// oder absoluter Pfad der lokalen Datei, wie: https://raw.githubusercontent.com/txthinking/brook/master/programmable/list/example_cidr4 .txt. Funktioniert mit server/wsserver/wssserver/quicserver
--blockCIDR6List ="": Ein CIDR pro Zeile, https://, http:// oder absoluter Pfad der lokalen Datei, wie: https://raw.githubusercontent.com/txthinking/brook/master/programmable/list/example_cidr6 .txt. Funktioniert mit server/wsserver/wssserver/quicserver
--blockDomainList ="": Eine Domäne pro Zeile, Suffix-Match-Modus. https://, http:// oder absoluter Pfad der lokalen Datei. Wie: https://raw.githubusercontent.com/txthinking/brook/master/programmable/list/example_domain.txt. Funktioniert mit server/wsserver/wssserver/quicserver
--blockGeoIP ="": IP nach Geo-Ländercode blockieren, z. B. USA. Funktioniert mit server/wsserver/wssserver/quicserver
--blockListUpdateInterval ="": Liste aktualisieren --blockDomainList,--blockCIDR4List,--blockCIDR6List Intervall, Sekunde. Standardwert 0, beim Start nur einmal lesen (Standardwert: 0)
--clientHKDFInfo = „“: Client-HKDF-Informationen, meistens müssen Sie dies nicht ändern. Wenn sie geändert werden, müssen alle Brook-Links auf der Client-Seite gleich sein, ich meine jeden (Standard: „brook“).
--dialWithDNS ="": Wenn ein Domänenname aufgelöst werden muss, verwenden Sie den angegebenen DNS. Beispielsweise 8.8.8.8:53 oder https://dns.google/dns-query?address=8.8.8.8%3A443, die Adresse ist erforderlich. Beachten Sie, dass sich dies bei clientseitigen Befehlen nicht darauf auswirkt, dass der Client die Domänenadresse an den Server weitergibt
--dialWithDNSPrefer ="": Dies wird mit dem Parameter dialWithDNS verwendet. Bevorzugen Sie einen A-Datensatz oder einen AAAA-Datensatz. Der Wert ist A oder AAAA
--dialWithIP4 = „“: Wenn der aktuelle Computer eine Netzwerkverbindung zum externen IPv4 herstellt, sowohl TCP als auch UDP, wird es verwendet, um das verwendete IPv4 anzugeben
--dialWithIP6 = „“: Wenn der aktuelle Computer eine Netzwerkverbindung zum externen IPv6 herstellt, sowohl TCP als auch UDP, wird es verwendet, um das verwendete IPv6 anzugeben
--dialWithNIC ="": Wenn die aktuelle Maschine eine Netzwerkverbindung nach außen herstellt, sowohl TCP als auch UDP, wird sie verwendet, um die verwendete Netzwerkkarte anzugeben
--dialWithSocks5 = „“: Wenn der aktuelle Computer eine Netzwerkverbindung nach außen herstellt, sowohl TCP als auch UDP, mit Ihrem Socks5-Proxy, z. B. 127.0.0.1:1081
--dialWithSocks5Password ="": Wenn ja
--dialWithSocks5TCPTimeout ="": Zeit (s) (Standard: 0)
--dialWithSocks5UDPTimeout ="": Zeit (s) (Standard: 60)
--dialWithSocks5Username =“: Wenn ja
--ipLimitInterval ="": Intervall (s) für ipLimitMax (Standard: 0)
--ipLimitMax ="": Begrenzen Sie die Anzahl der Client-IP-Adressen. Seien Sie bei der Verwendung dieses Parameters vorsichtig, da der Client möglicherweise über eine dynamische IP verfügt. Funktioniert mit server/wsserver/wssserver/quicserver (Standard: 0)
--ipLimitWait ="": Wie lange (s) auf die Wiederherstellung gewartet werden soll, nachdem ipLimitMax überschritten wurde (Standard: 0)
--log ="": Protokoll aktivieren. Ein gültiger Wert ist Dateipfad oder „Konsole“. Senden Sie mir SIGUSR1, um die Protokolldatei auf dem Unix-System zurückzusetzen. Wenn Sie die SOCKS5-Bibliothek debuggen möchten, legen Sie env SOCKS5_DEBUG=true fest
--pid ="": Ein Dateipfad, der zum Speichern der PID verwendet wird. Senden Sie mir SIGUSR1, um die Datei --serverLog auf einem Unix-System zurückzusetzen
--pprof =“: Gehen Sie zu http pprof und hören Sie die Adresse, z. B.: 6060
--prometheus =“: Prometheus http Listen-Adresse, z. B.: 7070. Bei einer Übertragung im öffentlichen Netz empfiehlt sich die Nutzung mit nico
--prometheusPath ="": Prometheus-HTTP-Pfad, z. B. /xxx. Bei einer Übertragung im öffentlichen Netz empfiehlt sich ein schwer zu erratender Wert
--serverHKDFInfo = „“: Server-HKDF-Informationen, meistens müssen Sie dies nicht ändern. Wenn sie geändert werden, müssen alle Brook-Links auf der Clientseite gleich sein, ich meine jeden (Standard: „brook“).
--serverLog ="": Serverprotokoll, Datenverkehr und mehr aktivieren. Ein gültiger Wert ist Dateipfad oder „Konsole“. Senden Sie mir SIGUSR1, um die Protokolldatei auf dem Unix-System zurückzusetzen. Gegenseitig ausschließend mit dem Parameter --log. Funktioniert mit server/wsserver/wssserver/quicserver mit Brook-Protokoll
--speedLimit ="": Geschwindigkeit begrenzen (b), 500 kb/s, z. B.: 500000, funktioniert mit server/wsserver/wssserver/quicserver (Standard: 0)
--tag ="": Das Tag kann für den Prozess verwendet werden und wird an das Protokoll oder Serverprotokoll angehängt, z. B.: „Schlüssel1:Wert1“. Alle Tags werden auch einzeln als Abfrageparameter an die UserAPI angehängt
--userAPI =“: Wenn Sie Ihr eigenes Benutzersystem erstellen, sendet Brook Server eine GET-Anfrage an Ihre Benutzer-API, um zu überprüfen, ob das Token gültig ist, zum Beispiel: https://your-api-server.com/a_unpredictable_path. Ja, es wird empfohlen, Ihrer https-API einen unvorhersehbaren Pfad hinzuzufügen. Natürlich können Sie die http-API auch für die interne Netzwerkkommunikation verwenden. Das Anforderungsformat ist https://your-api-server.com/a_unpredictable_path?token=xxx. Wenn die Antwort 200 ist, sollte der Text die eindeutige Kennung des Benutzers sein, z. B. die Benutzer-ID. Bei allen anderen Statuscodes wird davon ausgegangen, dass sie auf einen unzulässigen Benutzer hinweisen. In diesen Fällen sollte der Textkörper eine Zeichenfolge sein, die den Fehler beschreibt. Es sollte mit --serverLog und server/wsserver/wssserver/quicserver mit Brook-Protokoll verwendet werden. Weitere Informationen finden Sie unter https://github.com/txthinking/brook/blob/master/protocol/user.md
--userAPIInvalidCacheTime ="": Sobald ein Token überprüft und ungültig ist, wird die UserAPI für einen bestimmten Zeitraum (s) nicht erneut zur Validierung aufgefordert. Es muss ein angemessener Wert festgelegt werden, da er sonst die Leistung jeder eingehenden Verbindung beeinträchtigt. Beachten Sie, dass dies die Benutzererfahrung beeinträchtigen kann, wenn Sie den Benutzerstatus in Ihrem Benutzersystem von ungültig auf gültig ändern (Standard: 1800).
--userAPIValidCacheTime ="": Sobald ein Token überprüft und gültig ist, wird die Benutzer-API für einen bestimmten Zeitraum (s) nicht erneut zur Validierung aufgefordert. Es muss ein angemessener Wert festgelegt werden, da er sonst die Leistung jeder eingehenden Verbindung beeinträchtigt (Standard: 3600).
--version, -v : Gibt die Version aus
Starten Sie einen Brook-Server, der TCP und UDP unterstützt
--blockCIDR4List ="": Diese Option wird in einer zukünftigen Version entfernt. Bitte verwenden Sie stattdessen die globale Option
--blockCIDR6List ="": Diese Option wird in einer zukünftigen Version entfernt. Bitte verwenden Sie stattdessen die globale Option
--blockDomainList ="": Diese Option wird in einer zukünftigen Version entfernt. Bitte verwenden Sie stattdessen die globale Option
--blockGeoIP ="": Diese Option wird in einer zukünftigen Version entfernt. Bitte verwenden Sie stattdessen die globale Option
--example : Zeigt ein minimales Anwendungsbeispiel
--listen, -l ="": Adresse abhören, etwa: ':9999'
--password, -p ="": Serverpasswort
--tcpTimeout ="": Zeit (s) (Standard: 0)
--udpTimeout ="": Zeit (s) (Standard: 0)
--updateListInterval ="": Diese Option wird in einer zukünftigen Version entfernt. Bitte verwenden Sie stattdessen die globale Option (Standard: 0)
Starten Sie einen Brook-Client, der TCP und UDP unterstützt. Es kann einen Socks5-Proxy öffnen, [src <-> sock5 <-> $ brook client <-> $ brook server <-> dst]
--example : Zeigt ein minimales Anwendungsbeispiel
--http ="": Wo auf HTTP-Proxy-Verbindungen gewartet werden soll
--link ="": Brook Link, Sie können ihn über $ Brook Link erhalten. Die Parameter „wssserver“ und „password“ werden ignoriert
--password, -p ="": Brook-Server-Passwort
--server, -s =“: Brook-Serveradresse, etwa: 1.2.3.4:9999
--socks5 ="": Wo auf SOCKS5-Verbindungen gewartet werden soll (Standard: 127.0.0.1:1080)
--socks5ServerIP ="": Nur wenn sich die IP Ihres Socks5-Servers von der Listen-IP unterscheidet
--tcpTimeout ="": Zeit (s) (Standard: 0)
--udpTimeout ="": Zeit (s) (Standard: 0)
Starten Sie einen Brook-WS-Server, der TCP und UDP unterstützt. Es öffnet einen Standard-HTTP-Server und einen Websocket-Server
--blockCIDR4List ="": Diese Option wird in einer zukünftigen Version entfernt. Bitte verwenden Sie stattdessen die globale Option
--blockCIDR6List ="": Diese Option wird in einer zukünftigen Version entfernt. Bitte verwenden Sie stattdessen die globale Option
--blockDomainList ="": Diese Option wird in einer zukünftigen Version entfernt. Bitte verwenden Sie stattdessen die globale Option
--blockGeoIP ="": Diese Option wird in einer zukünftigen Version entfernt. Bitte verwenden Sie stattdessen die globale Option
--example : Zeigt ein minimales Anwendungsbeispiel
--listen, -l ="": Adresse abhören, etwa: ':80'
--password, -p ="": Serverpasswort
--path ="": URL-Pfad (Standard: /ws)
--tcpTimeout ="": Zeit (s) (Standard: 0)
--udpTimeout ="": Zeit (s) (Standard: 0)
--updateListInterval ="": Diese Option wird in einer zukünftigen Version entfernt. Bitte verwenden Sie stattdessen die globale Option (Standard: 0)
--withoutBrookProtocol : Die Daten werden nicht mit dem Brook-Protokoll verschlüsselt
--xForwardedFor : Ersetzen Sie das from-Feld in --log. Beachten Sie, dass dies möglicherweise gefälscht ist
Starten Sie einen Brook-WSClient, der TCP und UDP unterstützt. Es kann einen Socks5-Proxy öffnen, [src <-> sock5 <-> $ brook wsclient <-> $ brook wsserver <-> dst]
--example : Zeigt ein minimales Anwendungsbeispiel
--http ="": Wo auf HTTP-Proxy-Verbindungen gewartet werden soll
--link ="": Brook Link, Sie können ihn über $ Brook Link erhalten. Die Parameter „wssserver“ und „password“ werden ignoriert
--password, -p =“: Brook-WS-Server-Passwort
--socks5 ="": Wo auf SOCKS5-Verbindungen gewartet werden soll (Standard: 127.0.0.1:1080)
--socks5ServerIP ="": Nur wenn sich die IP Ihres Socks5-Servers von der Listen-IP unterscheidet
--tcpTimeout ="": Zeit (s) (Standard: 0)
--udpTimeout ="": Zeit (s) (Standard: 0)
--wsserver, -s ="": Brook-WS-Server-Adresse, etwa: ws://1.2.3.4:80, wenn kein Pfad vorhanden ist, wird /ws verwendet. Lassen Sie den Port auf keinen Fall weg
Starten Sie einen Brook-WSS-Server, der TCP und UDP unterstützt. Es öffnet einen Standard-https-Server und einen Websocket-Server
--blockCIDR4List ="": Diese Option wird in einer zukünftigen Version entfernt. Bitte verwenden Sie stattdessen die globale Option
--blockCIDR6List ="": Diese Option wird in einer zukünftigen Version entfernt. Bitte verwenden Sie stattdessen die globale Option
--blockDomainList ="": Diese Option wird in einer zukünftigen Version entfernt. Bitte verwenden Sie stattdessen die globale Option
--blockGeoIP ="": Diese Option wird in einer zukünftigen Version entfernt. Bitte verwenden Sie stattdessen die globale Option
--cert ="": Der absolute Pfad der Zertifikatsdatei für die Domäne, z. B. /path/to/cert.pem. Wenn cert oder certkey leer ist, wird automatisch ein Zertifikat ausgestellt
--certkey =“: Der absolute Pfad der Zertifikatsschlüsseldatei für die Domäne, z. B. /path/to/certkey.pem. Wenn cert oder certkey leer ist, wird automatisch ein Zertifikat ausgestellt
--domainaddress =“: Zum Beispiel: domain.com:443. Wenn Sie sich für die automatische Ausstellung von Zertifikaten entscheiden, muss die Domäne in die Server-IP aufgelöst worden sein und es wird auch Port 80 verwendet
--example : Zeigt ein minimales Anwendungsbeispiel
--password, -p ="": Serverpasswort
--path ="": URL-Pfad (Standard: /ws)
--tcpTimeout ="": Zeit (s) (Standard: 0)
--udpTimeout ="": Zeit (s) (Standard: 0)
--updateListInterval ="": Diese Option wird in einer zukünftigen Version entfernt. Bitte verwenden Sie stattdessen die globale Option (Standard: 0)
--withoutBrookProtocol : Die Daten werden nicht mit dem Brook-Protokoll verschlüsselt
Starten Sie einen Brook-WSS-Client, der TCP und UDP unterstützt. Es kann einen Socks5-Proxy öffnen, [src <-> sock5 <-> $ brook wssclient <-> $ brook wssserver <-> dst]
--example : Zeigt ein minimales Anwendungsbeispiel
--http ="": Wo auf HTTP-Proxy-Verbindungen gewartet werden soll
--link ="": Brook Link, Sie können ihn über $ Brook Link erhalten. Die Parameter „wssserver“ und „password“ werden ignoriert
--password, -p ="": Brook wssserver-Passwort
--socks5 ="": Wo auf SOCKS5-Verbindungen gewartet werden soll (Standard: 127.0.0.1:1080)
--socks5ServerIP ="": Nur wenn sich die IP Ihres Socks5-Servers von der Listen-IP unterscheidet
--tcpTimeout ="": Zeit (s) (Standard: 0)
--udpTimeout ="": Zeit (s) (Standard: 0)
--wssserver, -s ="": Brook-WSS-Serveradresse, etwa: wss://google.com:443, wenn kein Pfad vorhanden ist, wird /ws verwendet. Lassen Sie den Port auf keinen Fall weg
Starten Sie einen Brook-Quicserver, der TCP und UDP unterstützt.
--blockCIDR4List ="": Diese Option wird in einer zukünftigen Version entfernt. Bitte verwenden Sie stattdessen die globale Option
--blockCIDR6List ="": Diese Option wird in einer zukünftigen Version entfernt. Bitte verwenden Sie stattdessen die globale Option
--blockDomainList ="": Diese Option wird in einer zukünftigen Version entfernt. Bitte verwenden Sie stattdessen die globale Option
--blockGeoIP ="": Diese Option wird in einer zukünftigen Version entfernt. Bitte verwenden Sie stattdessen die globale Option
--cert ="": Der absolute Pfad der Zertifikatsdatei für die Domäne, z. B. /path/to/cert.pem. Wenn cert oder certkey leer ist, wird automatisch ein Zertifikat ausgestellt
--certkey =“: Der absolute Pfad der Zertifikatsschlüsseldatei für die Domäne, z. B. /path/to/certkey.pem. Wenn cert oder certkey leer ist, wird automatisch ein Zertifikat ausgestellt
--domainaddress =“: Zum Beispiel: domain.com:443. Wenn Sie sich für die automatische Ausstellung von Zertifikaten entscheiden, muss die Domäne in die Server-IP aufgelöst worden sein und es wird auch Port 80 verwendet
--example : Zeigt ein minimales Anwendungsbeispiel
--password, -p ="": Serverpasswort
--tcpTimeout ="": Zeit (s) (Standard: 0)
--udpTimeout ="": Zeit (s) (Standard: 0)
--updateListInterval ="": Diese Option wird in einer zukünftigen Version entfernt. Bitte verwenden Sie stattdessen die globale Option (Standard: 0).
--withoutBrookProtocol : Die Daten werden nicht mit dem Brook-Protokoll verschlüsselt
Starten Sie einen Brook-Quicclient, der TCP und UDP unterstützt. Es kann einen Socks5-Proxy öffnen, [src <-> sock5 <-> $ brook quicclient <-> $ brook quicserver <-> dst]. (Der globale Wählparameter wird ignoriert)
--example : Zeigt ein minimales Anwendungsbeispiel
--http ="": Wo auf HTTP-Proxy-Verbindungen gewartet werden soll
--link ="": Brook Link, Sie können ihn über $ Brook Link erhalten. Die Parameter „wssserver“ und „password“ werden ignoriert
--socks5 ="": Wo auf SOCKS5-Verbindungen gewartet werden soll (Standard: 127.0.0.1:1080)
--socks5ServerIP ="": Nur wenn sich die IP Ihres Socks5-Servers von der Listen-IP unterscheidet
--tcpTimeout ="": Zeit (s) (Standard: 0)
--udpTimeout ="": Zeit (s) (Standard: 0)
Leiten Sie den Netzwerkverkehr über Brook weiter, der TCP und UDP unterstützt. Der Zugriff auf [von der Adresse] ist gleichbedeutend mit dem Zugriff auf [zur Adresse], [src <-> von der Adresse <-> $ brook server/wsserver/wssserver/quicserver <-> zur Adresse]
--example : Zeigt ein minimales Anwendungsbeispiel
--from, -f, -l ="": Abhöradresse: wie ':9999'
--link ="": Brook Link, Sie können ihn über $ Brook Link erhalten. Die Server- und Passwortparameter werden ignoriert
--password, -p ="": Passwort
--server, -s ="": Brook Server oder Brook Wsserver oder Brook Wssserver oder Brook Quicserver, wie: 1.2.3.4:9999, ws://1.2.3.4:9999, wss://domain:443/ws, quic://domain.com:443
--tcpTimeout ="": Zeit (s) (Standard: 0)
--to, -t =“: Adresse, an die weitergeleitet wird, etwa: 1.2.3.4:9999
--udpTimeout ="": Zeit (s) (Standard: 0)
Führen Sie einen DNS-Server über Brook aus, der TCP und UDP unterstützt, [src <-> $ brook dnserversoverbrook <-> $ brook server/wsserver/wssserver/quicserver <-> dns] oder [src <-> $ brook dnsserveroverbrook <-> dnsForBypass]
--blockDomainList ="": Eine Domäne pro Zeile, Suffix-Match-Modus. https://, http:// oder lokaler absoluter Dateipfad. Wie: https://raw.githubusercontent.com/txthinking/brook/master/programmable/list/example_domain.txt
--bypassDomainList ="": Eine Domäne pro Zeile, Suffix-Match-Modus. https://, http:// oder lokaler absoluter Dateipfad. Wie: https://raw.githubusercontent.com/txthinking/brook/master/programmable/list/example_domain.txt
--disableA : Eine Abfrage deaktivieren
--disableAAAA : AAAA-Abfrage deaktivieren
--DNS = "": DNS-Server zum Auflösen von Domänen nicht in der Liste (Standard: 8.8.8.8:53)
--DNSForBypass = "": DNS-Server zur Auflösung von Domänen in der Bypassliste. Wie 223.5.5.5:53 oder https://dns.alidns.com/dns-query?address=223.5.5.5:443, die Adresse ist erforderlich (Standard: 223.5.5.5:53)
-Beispiel : Zeigen Sie ein minimales Beispiel für die Nutzung
--Link = "": Brook Link, Sie können ihn über $ Brook-Link erhalten. Die Server- und Kennwortparameter werden ignoriert
-Listen, -l = "": Listenadresse wie: 127.0.0.1:53
-Passwort, -p = "": Passwort
--Server, -s = "": Brook Server oder Brook WSServer oder Brook WSSSERVER oder Brook Quicserver, wie: 1.2.3.4:9999, WS: //1.2.3.4: 9999, WSS: //domain.com: 443/ WS, Quic: //domain.com: 443
-tcptimeout = "": Zeit (s) (Standard: 0)
--udptimeout = "": Zeit (s) (Standard: 0)
Generieren Sie einen Brook -Link
--address = "": Wenn der Server Brook WSSERVER oder Brook WSSSERVER oder Brook Quicserver ist
--ca = "": Wenn der Server Brook WSSServer oder Brook Quicserver ist, geben Sie CA für nicht vertrauenswürdiges Zertifikat wie /path/to/ca.pem an
--Clienthkdfinfo = "": Client HKDF-Informationen, die meiste Zeit, die Sie nicht ändern müssen, lesen Sie das Brook-Protokoll, wenn Sie nicht wissen, was das ist
-Beispiel : Zeigen Sie ein minimales Beispiel für die Nutzung
-Fragment = "": Wenn der Server Brook WSSServer ist, teilen Sie den Clienthello in mehrere Fragmente auf und senden Sie sie dann einzeln mit Verzögerungen (Millisekunden). Das Format ist min_length: max_length: min_delay: max_delay, kann nicht null sein, wie 50: 100: 10: 50
-INSECURE : Wenn der Server Brook WSSServer oder Brook Quicserver ist, verifizieren der Client nicht die Zertifikatkette und den Hostnamen des Servers des Servers
--Name = "": Geben Sie diesem Server einen Namen
-Passwort, -p = "": Passwort
--Server, -s = "": Unterstützung von Brook Server, Brook WSSERVER, Brook WSSSERVER, SOCKS5 Server, Brook Quicserver. Wie: 1.2.3.4:9999, ws: //1.2.3.4: 9999, wss
--Serverhkdfinfo = "": Server HKDF-Informationen, die meiste Zeit, die Sie nicht ändern müssen, lesen Sie das Brook-Protokoll, wenn Sie nicht wissen, was das ist
-tlsfingerprint = "": Wenn der Server Brook WSSSERVER ist, wählen Sie TLS-Fingerabdruck, Wert kann sein: Chrome
--token = "": Ein Token repräsentiert die Identität eines Benutzers. Eine in Hexadezimal kodierende Zeichenfolge. Der Server muss aktiviert werden. Beachten Sie, dass: Nur von der Brook GUI (außer OpenWRT) und Tun2brook unterstützt werden
--udpoverstream : Wenn Server Brook Quicserver, UDP über Stream ist. Unter normalen Umständen benötigen Sie diesen Parameter, da die maximale Datagrammgröße für Quic sehr klein ist. Hinweis: Nur Brook Cli und Tun2brook Suppport vorerst
--UdpoverTCP : Wenn Server Brook Server ist, UDP über TCP
--Unername, -u = "": Benutzername, wenn Server der Socks5 -Server ist
-ohne BrookProtocol : Wenn der Server Brook WSSERVER oder Brook WSSSERVER oder Brook Quicserver ist, werden die Daten nicht mit dem Brook-Protokoll verschlüsselt
Führen Sie einen Client aus und verbinden Sie sich mit einem Brook -Link, der TCP und UDP unterstützt. Es kann einen Socs5-Proxy starten, [Src <--> Socken 5 <--> $ Brook Connect <--> $ Brook Server/WSSERVER/WSSSERVER/QuicServer <-> dst]
-Beispiel : Zeigen Sie ein minimales Beispiel für die Nutzung
--http = "": Wo kann man auf HTTP-Proxy-Verbindungen hören
- -Link, -l = "": Brook Link, Sie können ihn über $ Brook Link erhalten
--Socks5 = "": Wo kann man auf Sockenhöre zuhören5 Verbindungen (Standard: 127.0.0.1:1080)
--Socks5Serverip = "": Nur wenn sich Ihr Socken-Server-IP von Listen IP unterscheidet
-tcptimeout = "": Zeit (s) (Standard: 0)