Un outil réseau programmable multiplateforme.
❤️ Shiliew - Une application réseau conçue pour ceux qui apprécient leur temps
bash <(curl https://bash.ooo/nami.sh)
nami install brook
brook server -l :9999 -p hello
Vous souhaiterez peut-être utiliser
brook link
pour personnaliser certains paramètres.
Brook GUI transmettra différentes variables globales au script à différents moments, et le script n'a besoin que d'attribuer le résultat du traitement à la variable globale out
Avant de parler du client GUI, parlons d'abord du client en ligne de commande brook
. Comme nous le savons, après avoir déployé le serveur, vous pouvez utiliser le client de ligne de commande brook
pour créer un proxy chaussettes5 local ou un proxy http sur votre machine, puis le configurer dans les paramètres de proxy de votre système ou dans votre navigateur pour utiliser ce proxy. Cependant:
Pour les spécificités de chaussettes5 et du proxy http, vous pouvez lire cet article.
Le client GUI n'utilise pas les modes proxy chaussettes5 et http, il n'y a donc aucun problème avec certains logiciels n'utilisant pas le proxy système. Au lieu de cela, il utilise une carte réseau virtuelle pour prendre en charge l'ensemble du réseau du système, y compris http3 basé sur UDP. De plus, Brook nous permet de contrôler les requêtes réseau par programmation, il est donc nécessaire d'avoir des connaissances de base sur les requêtes réseau.
Remarque : Lorsque nous parlons d'adresses, nous entendons des adresses qui incluent le numéro de port, comme une adresse de domaine :
google.com:443
, ou une adresse IP :8.8.8.8:53
google.com:443
8.8.8.8:53
, pour se renseigner sur l'adresse IP de google.com
google.com
, telle que 1.2.3.4
, à l'application.1.2.3.4:443
1.2.3.4:443
Dans le processus ci-dessus, l'application effectue en fait deux requêtes réseau : une à l'adresse IP 8.8.8.8:53
et une autre à l'adresse IP 1.2.3.4:443
. En d’autres termes, le nom de domaine est essentiellement un alias pour l’adresse IP et doit obtenir l’adresse IP du domaine pour établir une connexion.
Brook dispose d'une fonctionnalité Fake DNS, qui peut analyser le nom de domaine à partir des demandes de requête qu'une application envoie au DNS du système et décider comment répondre à l'application.
google.com:443
8.8.8.8:53
, pour se renseigner sur l'adresse IP de google.com
8.8.8.8:53
. Cela déclenchera la variable in_dnsquery
, transportant des informations telles que domain
240.0.0.1
240.0.0.1:443
240.0.0.1:443
240.0.0.1:443
, découvre qu'il s'agit d'une fausse adresse IP et reconvertira la fausse adresse IP en adresse de domaine google.com:443
. Cela déclenchera la variable in_address
, transportant des informations telles que domainaddress
google.com:443
au serveur Brookgoogle.com
, par exemple en recevant 1.2.3.4
1.2.3.4:443
1.2.3.4:443
et renvoie les données au client BrookCependant, si les situations suivantes se produisent, le nom de domaine ne sera pas/ne pourra pas être analysé, ce qui signifie que le client Brook ne saura pas/ne pourra pas connaître le nom de domaine et le traitera comme une requête normale envoyée à une adresse IP :
Pour éviter l’inefficacité du Fake DNS, veuillez vous référer à cet article.
google.com:443
8.8.8.8:53
, pour se renseigner sur l'adresse IP de google.com
8.8.8.8:53
. Cela déclenchera la variable in_address
, transportant des informations telles que ipaddress
8.8.8.8:53
au serveur Brook8.8.8.8:53
et renvoie le résultat, tel que 1.2.3.4
, au client Brook1.2.3.4:443
1.2.3.4:443
1.2.3.4:443
. Cela déclenchera la variable in_address
, transportant des informations telles que ipaddress
1.2.3.4:443
au serveur Brook1.2.3.4:443
et renvoie les données au client Brookgoogle.com:443
8.8.8.8:443
, pour se renseigner sur l'adresse IP de google.com
8.8.8.8:443
. Cela déclenchera la variable in_address
, transportant des informations telles que ipaddress
8.8.8.8:443
au serveur Brook8.8.8.8:443
et renvoie le résultat, tel que 1.2.3.4
, au client Brook.1.2.3.4:443
1.2.3.4:443
1.2.3.4:443
. Cela déclenchera la variable in_address
, transportant des informations telles que ipaddress
1.2.3.4:443
au serveur Brook1.2.3.4:443
et renvoie les données au client BrookPour éviter l’inefficacité du Fake DNS, veuillez vous référer à cet article.
in_brooklinks
est déclenchée :in_dnsquery
est déclenchée, vous pouvez traiter selon vos besoins, par exemple :in_address
est déclenchée, vous pouvez traiter selon vos besoins, par exemple :in_httprequest
et in_httpresponse
.in_httprequest
est déclenchée, vous pouvez traiter selon vos besoins, par exemple :in_httpresponse
est déclenchée, vous pouvez traiter selon vos besoins, par exemple :Pour des informations détaillées sur les propriétés et les réponses des variables, veuillez vous référer au contenu suivant.
variable | taper | condition | timing | description | hors type |
---|---|---|---|---|---|
in_brookliens | carte | / | Avant de vous connecter | Prédéfinir plusieurs liens Brook, puis spécifier par programme celui auquel se connecter | carte |
in_dnsquery | carte | Faux DNS : activé | Lorsqu'une requête DNS se produit | Le script peut décider comment gérer cette demande | carte |
adresse_in | carte | / | Lors de la connexion à une adresse | le script peut décider comment se connecter | carte |
in_httprequest | carte | / | Lorsqu'une requête HTTP(S) arrive | le script peut décider comment gérer cette demande | carte |
in_httprequest,in_httpresponse | carte | / | lorsqu'une réponse HTTP(S) arrive | le script peut décider comment gérer cette réponse | carte |
Clé | Taper | Description | Exemple |
---|---|---|---|
_ | bouffon | sans signification | vrai |
out
, ignoré s'il n'est pas de type map
Clé | Taper | Description | Exemple |
---|---|---|---|
... | ... | ... | ... |
nom personnalisé | chaîne | lien du ruisseau | ruisseau://... |
... | ... | ... | ... |
Clé | Taper | Description | Exemple |
---|---|---|---|
domaine | chaîne | nom de domaine | google.com |
taper | chaîne | type de requête | UN |
application | chaîne | ID ou chemin d'accès de l'application | com.google.Chrome.helper |
interface | chaîne | interface réseau. Mac uniquement | fr0 |
out
, s'il s'agit error
le type sera enregistré dans le journal. Ignoré s'il n'est pas de type map
Clé | Taper | Description | Exemple |
---|---|---|---|
bloc | bouffon | Que ce soit Bloquer, false par défaut | FAUX |
adresse IP | chaîne | Spécifiez directement l'adresse IP, valide uniquement lorsque type est A / AAAA | 1.2.3.4 |
système | bouffon | Résoudre par DNS système, false par défaut | FAUX |
by-pass | bouffon | Résoudre en contournant DNS, false par défaut | FAUX |
clé de brooklink | chaîne | Lorsque vous devez connecter le serveur, connectez-vous plutôt au serveur spécifié par la clé in_brooklinks | nom personnalisé |
Clé | Taper | Description | Exemple |
---|---|---|---|
réseau | chaîne | Type de réseau, la valeur tcp / udp | tcp |
adresse IP | chaîne | Adresse de type IP. Il n'y a que l'adresse IP et l'adresse de domaine. Notez qu'il n'y a aucune relation entre ces deux | 1.2.3.4:443 |
adresse de domaine | chaîne | Adresse du type de domaine, grâce à FakeDNS, nous pouvons obtenir l'adresse du nom de domaine ici | google.com : 443 |
application | chaîne | ID ou chemin d'accès de l'application | com.google.Chrome.helper |
interface | chaîne | interface réseau. Mac uniquement | fr0 |
out
, s'il s'agit error
le type sera enregistré dans le journal. Ignoré s'il n'est pas de type map
Clé | Taper | Description | Exemple |
---|---|---|---|
bloc | bouffon | Que ce soit Bloquer, false par défaut | FAUX |
adresse IP | chaîne | Adresse de type IP, destination de réécriture | 1.2.3.4:443 |
adresse IPdebypassdns | chaîne | Utilisez Bypass DNS pour obtenir une IP A ou AAAA et réécrivez la destination, valable uniquement lorsque domainaddress existe, la valeur A / AAAA | UN |
by-pass | bouffon | Contourner, false par défaut. Si true et domainaddress , alors ipaddress ou ipaddressfrombypassdns doivent être spécifiés | FAUX |
mitm | bouffon | S'il faut effectuer MITM, par défaut false . Valable uniquement lorsque network est tcp . Besoin d'installer CA, voir ci-dessous | FAUX |
protocole mitm | chaîne | Le protocole MITM doit être spécifié explicitement, la valeur est http / https | https |
domaine mitmcert | chaîne | Le nom de domaine du certificat MITM, qui est extrait par défaut de domainaddress . Si ipaddress et mitm sont true et mitmprotocol est https alors doit être spécifié explicitement | exemple.com |
mitmwithbody | bouffon | S'il faut manipuler le corps http, false par défaut. lira le corps de la demande et de la réponse dans la mémoire et interagira avec le script. La limite de mémoire totale d'iOS de 50 Mo peut tuer le processus | FAUX |
mitmautohandlecompress | bouffon | S'il faut décompresser automatiquement le corps http lors de l'interaction avec le script, false par défaut | FAUX |
mitmclienttimeout | int | Délai d'expiration pour la conversation MITM avec le serveur, seconde, par défaut 0 | 0 |
mitmserverreadtimeout | int | Délai d'expiration pour la lecture MITM à partir du client, seconde, par défaut 0 | 0 |
mitmserverwritetimeout | int | Délai d'expiration pour l'écriture MITM sur le client, seconde, 0 par défaut | 0 |
clé de brooklink | chaîne | Lorsque vous devez connecter le serveur, connectez-vous plutôt au serveur spécifié par la clé in_brooklinks | nom personnalisé |
Clé | Taper | Description | Exemple |
---|---|---|---|
URL | chaîne | URL | https://example.com/hello |
Méthode | chaîne | Méthode HTTP | OBTENIR |
Corps | octets | Corps de la requête HTTP | / |
... | chaîne | les autres champs sont des en-têtes HTTP | / |
out
, doit être défini sur une demande ou une réponse
Clé | Taper | Description | Exemple |
---|---|---|---|
Code d'état | int | Code d'état HTTP | 200 |
Corps | octets | Corps de la réponse HTTP | / |
... | chaîne | les autres champs sont des en-têtes HTTP | / |
out
, doit être défini sur une réponse
Dans Brook GUI, les scripts sont résumés dans Modules . Il existe déjà quelques modules, et il n'y a pas de magie, il combine simplement automatiquement _header.tengo et _footer.tengo, il vous suffit donc d'écrire le module lui-même.
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
Si vous utilisez tun2brook, vous pouvez combiner manuellement plusieurs modules en un script complet de la manière suivante. Par exemple:
cat _header.tengo > my.tengo
cat block_google_secure_dns.tengo >> my.tengo
cat block_aaaa.tengo >> my.tengo
cat _footer.tengo >> my.tengo
Syntaxe du langage Tengo
Bibliothèque
texte : expressions régulières, conversion de chaînes et manipulation
math : constantes et fonctions mathématiques
times : fonctions liées au temps
rand : fonctions aléatoires
fmt : fonctions de formatage
json : fonctions JSON
enum : fonctions d'énumération
hex : fonctions d'encodage et de décodage hexadécimal
base64 : fonctions d'encodage et de décodage base64
brook
: module ruisseau
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
Si vous écrivez des scripts complexes, l'interface graphique peut ne pas être pratique pour le débogage. Il est recommandé d'utiliser tun2brook sur le bureau pour déboguer avec fmt.println
https://txthinking.github.io/ca/ca.pem
Système d'exploitation | Comment |
---|---|
IOS | https://www.youtube.com/watch?v=HSGPC2vpDGk |
Androïde | Android a l'autorité de certification utilisateur et l'autorité de certification système, doit être installé dans l'autorité de certification système après ROOT |
macOS | nami install mad ca.txthinking , sudo mad install --ca ~/.nami/bin/ca.pem |
Fenêtres | nami install mad ca.txthinking , Administrateur : mad install --ca ~/.nami/bin/ca.pem |
Certains logiciels peuvent ne pas lire l'autorité de certification du système, vous pouvez utiliser
curl --cacert ~/.nami/bin/ca.pem
pour déboguer
Brook OpenWRT : prend parfaitement en charge IPv4/IPv6/TCP/UDP
La position de Brook sur IPv6 est positive, si votre serveur ou environnement local ne dispose pas de pile IPv6, lisez cet article.
brook link --address
, alors le client Brook tentera de résoudre l'adresse IP du domaine en utilisant le DNS local, préférant l'enregistrement AAAA. Par exemple:Connectivity Check
. Si cela fonctionne parfois mais pas d’autres, cela indique une instabilité.Test IPv4 TCP
pour les tests ; ce test a codé en dur l'adresse IP et ne déclenche donc pas la résolution DNS.Test IPv4 UDP
pour les tests ; ce test a codé en dur l'adresse IP et ne déclenche donc pas la résolution DNS.Test IPv6 TCP
pour les tests ; ce test a codé en dur l'adresse IP et ne déclenche donc pas la résolution DNS.Test IPv6 UDP
pour les tests ; ce test a codé en dur l'adresse IP et ne déclenche donc pas la résolution DNS.Echo Client
pour les tests. Si le serveur d'écho saisi est une adresse de domaine, cela déclenchera la résolution DNS.Block Google Secure DNS
. Pour les autres cas, reportez-vous à cet article.Block Google Secure DNS
Bypass Geo
Bypass Apple
: pour éviter les problèmes de réception des notifications de messages Apple.Bypass China domain
ou Bypass China domain A
: le premier utilise Bypass DNS
pour obtenir l'adresse IP, puis Bypass Geo
ou d'autres modules décident de contourner ou non ; ce dernier contourne directement après obtention de l'IP avec Bypass DNS
en utilisant les enregistrements A. Ce dernier est nécessaire si votre local ne prend pas en charge IPv6. Chaque sous-commande a un paramètre --example
qui peut imprimer l'exemple minimal d'utilisation
Brook - Un outil réseau programmable multiplateforme
Ruisseau
brook --help
Utilisation :
Brook [GLOBAL OPTIONS] command [COMMAND OPTIONS] [ARGUMENTS...]
--blockCIDR4List =" : un CIDR par ligne, https://, http:// ou chemin absolu du fichier local, comme : https://raw.githubusercontent.com/txthinking/brook/master/programmable/list/example_cidr4 .SMS. Fonctionne avec serveur/wsserver/wssserver/quicserver
--blockCIDR6List =" : un CIDR par ligne, https://, http:// ou chemin absolu du fichier local, comme : https://raw.githubusercontent.com/txthinking/brook/master/programmable/list/example_cidr6 .SMS. Fonctionne avec serveur/wsserver/wssserver/quicserver
--blockDomainList =" : Un domaine par ligne, mode de correspondance de suffixe. https://, http:// ou chemin absolu du fichier local. Comme : https://raw.githubusercontent.com/txthinking/brook/master/programmable/list/example_domain.txt. Fonctionne avec serveur/wsserver/wssserver/quicserver
--blockGeoIP =" : Bloquer l'adresse IP par code de pays géographique, comme les États-Unis. Fonctionne avec serveur/wsserver/wssserver/quicserver
--blockListUpdateInterval =" : liste de mises à jour --blockDomainList,--blockCIDR4List,--blockCIDR6List intervalle, seconde. par défaut 0, lu une seule fois au démarrage (par défaut : 0)
--clientHKDFInfo =" : informations client HKDF, la plupart du temps, vous n'avez pas besoin de changer cela, si cela est modifié, tous les liens brook côté client doivent être identiques, je veux dire chacun (par défaut : "brook")
--dialWithDNS =" : Lorsqu'un nom de domaine doit être résolu, utilisez le DNS spécifié. Comme 8.8.8.8:53 ou https://dns.google/dns-query?address=8.8.8.8%3A443, l'adresse est obligatoire. Notez que pour les commandes côté client, cela n'affecte pas le client transmettant l'adresse de domaine au serveur.
--dialWithDNSPrefer =" : Ceci est utilisé avec le paramètre dialWithDNS. Préférez un enregistrement A ou un enregistrement AAAA. La valeur est A ou AAAA
--dialWithIP4 =" : Lorsque la machine actuelle établit une connexion réseau avec l'IPv4 extérieur, à la fois TCP et UDP, elle est utilisée pour spécifier l'IPv4 utilisé
--dialWithIP6 =" : Lorsque la machine actuelle établit une connexion réseau avec l'IPv6 externe, à la fois TCP et UDP, elle est utilisée pour spécifier l'IPv6 utilisé
--dialWithNIC =" : Lorsque la machine actuelle établit une connexion réseau vers l'extérieur, à la fois TCP et UDP, elle est utilisée pour spécifier la carte réseau utilisée
--dialWithSocks5 =" : Lorsque la machine actuelle établit une connexion réseau vers l'extérieur, à la fois TCP et UDP, avec votre proxy chaussettes5, tel que 127.0.0.1:1081
--dialWithSocks5Password =" : S'il y a
--dialWithSocks5TCPTimeout ="": temps (s) (par défaut : 0)
--dialWithSocks5UDPTimeout =" : temps (s) (par défaut : 60)
--dialWithSocks5Username =" : S'il y a
--ipLimitInterval =" : Intervalle(s) pour ipLimitMax (par défaut : 0)
--ipLimitMax ="" : Limitez le nombre d'adresses IP client, soyez prudent lorsque vous utilisez ce paramètre, car le client peut avoir une IP dynamique. Fonctionne avec server/wsserver/wssserver/quicserver (par défaut : 0)
--ipLimitWait =" : combien de temps (s) attendre la récupération après avoir dépassé ipLimitMax (par défaut : 0)
--log =" : Activer le journal. Une valeur valide est le chemin du fichier ou « console ». Envoyez-moi SIGUSR1 pour réinitialiser le fichier journal sur le système Unix. Si vous souhaitez déboguer la bibliothèque SOCKS5, définissez env SOCKS5_DEBUG=true
--pid =" : Un chemin de fichier utilisé pour stocker le pid. Envoyez-moi SIGUSR1 pour réinitialiser le fichier --serverLog sur le système Unix
--pprof =" : allez à l'adresse d'écoute http pprof, telle que :6060
--prometheus =" : adresse d'écoute http prometheus, telle que :7070. S'il est transmis sur le réseau public, il est recommandé de l'utiliser avec nico
--prometheusPath =" : chemin http de prometheus, tel que /xxx. S'il est transmis sur le réseau public, une valeur difficile à deviner est recommandée
--serverHKDFInfo =" : informations sur le serveur HKDF, la plupart du temps, vous n'avez pas besoin de changer cela, si cela est modifié, tous les liens du ruisseau côté client doivent être identiques, je veux dire chacun (par défaut : "brook")
--serverLog =" : Activer le journal du serveur, le trafic et plus encore. Une valeur valide est le chemin du fichier ou « console ». Envoyez-moi SIGUSR1 pour réinitialiser le fichier journal sur le système Unix. Mutuellement exclusif avec le paramètre --log. Fonctionne avec server/wsserver/wssserver/quicserver avec le protocole Brook
--speedLimit =" : Vitesse limite (b), 500 Ko/s telle que : 500 000, fonctionne avec server/wsserver/wssserver/quicserver (par défaut : 0)
--tag =" : La balise peut être utilisée pour le processus, sera ajoutée au journal ou au serverLog, tel que : 'key1:value1'. Toutes les balises seront également ajoutées en tant que paramètres de requête une par une à l'API utilisateur
--userAPI =" : lorsque vous créez votre propre système utilisateur, Brook Server enverra une requête GET à votre userAPI pour vérifier si le jeton est valide, par exemple : https://your-api-server.com/a_unpredictable_path. Oui, il est recommandé d'ajouter un chemin imprévisible à votre API https. Bien sûr, vous pouvez également utiliser l'API http pour la communication réseau interne. Le format de la demande est https://your-api-server.com/a_unpredictable_path?token=xxx. Lorsque la réponse est 200, le corps doit être l'identifiant unique de l'utilisateur, tel que l'ID utilisateur ; tous les autres codes d'état sont considérés comme représentant un utilisateur illégitime et, dans ces cas, le corps doit être une chaîne décrivant l'erreur. Il doit être utilisé avec --serverLog et server/wsserver/wssserver/quicserver avec le protocole brook. Pour plus d'informations, veuillez lire https://github.com/txthinking/brook/blob/master/protocol/user.md
--userAPIInvalidCacheTime =" : Une fois qu'un jeton est vérifié et invalide, il ne sera pas demandé à l'userAPI de valider à nouveau pendant une ou plusieurs périodes. Une valeur raisonnable doit être définie, sinon cela affectera les performances de chaque connexion entrante. Notez que cela peut affecter l'expérience utilisateur lorsque vous modifiez le statut utilisateur d'invalide à valide dans votre système utilisateur (par défaut : 1800).
--userAPIValidCacheTime =" : Une fois qu'un token est vérifié et valide, il ne sera pas demandé à l'userAPI de valider à nouveau pendant une ou plusieurs périodes. Une valeur raisonnable doit être définie, sinon cela affectera les performances de chaque connexion entrante (par défaut : 3600)
--version, -v : affiche la version
Démarrez un serveur Brook prenant en charge TCP et UDP
--blockCIDR4List ="" : Cette option sera supprimée dans une prochaine version, veuillez utiliser l'option globale à la place
--blockCIDR6List ="" : Cette option sera supprimée dans une prochaine version, veuillez utiliser l'option globale à la place
--blockDomainList ="" : Cette option sera supprimée dans une prochaine version, veuillez utiliser l'option globale à la place
--blockGeoIP =" : Cette option sera supprimée dans une prochaine version, veuillez utiliser l'option globale à la place
--example : Afficher un exemple minimal d'utilisation
--listen, -l =" : Adresse d'écoute, comme : ':9999'
--password, -p =" : mot de passe du serveur
--tcpTimeout =" : temps (s) (par défaut : 0)
--udpTimeout =" : temps (s) (par défaut : 0)
--updateListInterval ="" : Cette option sera supprimée dans une prochaine version, veuillez utiliser l'option globale à la place (par défaut : 0)
Démarrez un client Brook prenant en charge TCP et UDP. Il peut ouvrir un proxy chaussettes5, [src <-> chaussettes5 <-> $ brook client <-> $ brook server <-> dst]
--example : Afficher un exemple minimal d'utilisation
--http =" ": Où écouter les connexions proxy HTTP
--link ="": lien brook, vous pouvez l'obtenir via $ brook link. Les paramètres wssserver et password seront ignorés
--password, -p =" : mot de passe du serveur Brook
--server, -s =" : adresse du serveur Brook, comme : 1.2.3.4:9999
--socks5 =" : Où écouter les connexions SOCKS5 (par défaut : 127.0.0.1:1080)
--socks5ServerIP =" : Uniquement si l'adresse IP de votre serveur chaussettes5 est différente de l'adresse IP d'écoute
--tcpTimeout =" : temps (s) (par défaut : 0)
--udpTimeout =" : temps (s) (par défaut : 0)
Démarrez un serveur Web Brook prenant en charge TCP et UDP. Il ouvre un serveur http standard et un serveur websocket
--blockCIDR4List ="" : Cette option sera supprimée dans une prochaine version, veuillez utiliser l'option globale à la place
--blockCIDR6List ="" : Cette option sera supprimée dans une prochaine version, veuillez utiliser l'option globale à la place
--blockDomainList =" : Cette option sera supprimée dans une prochaine version, veuillez utiliser l'option globale à la place
--blockGeoIP =" : Cette option sera supprimée dans une prochaine version, veuillez utiliser l'option globale à la place
--example : Afficher un exemple minimal d'utilisation
--listen, -l =" : Adresse d'écoute, comme : ':80'
--password, -p =" : mot de passe du serveur
--path =" : chemin de l'URL (par défaut : /ws)
--tcpTimeout =" : temps (s) (par défaut : 0)
--udpTimeout =" : temps (s) (par défaut : 0)
--updateListInterval ="" : Cette option sera supprimée dans une prochaine version, veuillez utiliser l'option globale à la place (par défaut : 0)
--withoutBrookProtocol : Les données ne seront pas chiffrées avec le protocole Brook
--xForwardedFor : Remplacez le champ from dans --log, notez qu'il peut être falsifié
Démarrez un client Brook qui prend en charge TCP et UDP. Il peut ouvrir un proxy chaussettes5, [src <-> chaussettes5 <-> $ brook wsclient <-> $ brook wsserver <-> dst]
--example : Afficher un exemple minimal d'utilisation
--http =" ": Où écouter les connexions proxy HTTP
--link ="": lien brook, vous pouvez l'obtenir via $ brook link. Les paramètres wssserver et password seront ignorés
--password, -p =" : mot de passe du serveur Brook
--socks5 =" : Où écouter les connexions SOCKS5 (par défaut : 127.0.0.1:1080)
--socks5ServerIP =" : Uniquement si l'adresse IP de votre serveur chaussettes5 est différente de l'adresse IP d'écoute
--tcpTimeout =" : temps (s) (par défaut : 0)
--udpTimeout =" : temps (s) (par défaut : 0)
--wsserver, -s =" : adresse Brook wsserver, comme : ws://1.2.3.4:80, si aucun chemin alors /ws sera utilisé. N’omettez en aucun cas le port
Démarrez un serveur brook wss qui prend en charge TCP et UDP. Il ouvre un serveur https standard et un serveur websocket
--blockCIDR4List ="" : Cette option sera supprimée dans une prochaine version, veuillez utiliser l'option globale à la place
--blockCIDR6List ="" : Cette option sera supprimée dans une prochaine version, veuillez utiliser l'option globale à la place
--blockDomainList ="" : Cette option sera supprimée dans une prochaine version, veuillez utiliser l'option globale à la place
--blockGeoIP =" : Cette option sera supprimée dans une prochaine version, veuillez utiliser l'option globale à la place
--cert =" : le chemin absolu du fichier de certification pour le domaine, tel que /path/to/cert.pem. Si cert ou certkey est vide, un certificat sera émis automatiquement
--certkey =" : chemin absolu du fichier de clé de certification pour le domaine, tel que /path/to/certkey.pem. Si cert ou certkey est vide, un certificat sera émis automatiquement
--domainaddress =" : Tel que : domain.com:443. Si vous choisissez d'émettre automatiquement des certificats, le domaine doit avoir été résolu selon l'adresse IP du serveur et le port 80 sera également utilisé.
--example : Afficher un exemple minimal d'utilisation
--password, -p =" : mot de passe du serveur
--path =" : chemin de l'URL (par défaut : /ws)
--tcpTimeout =" : temps (s) (par défaut : 0)
--udpTimeout =" : temps (s) (par défaut : 0)
--updateListInterval ="" : Cette option sera supprimée dans une prochaine version, veuillez utiliser l'option globale à la place (par défaut : 0)
--withoutBrookProtocol : Les données ne seront pas chiffrées avec le protocole Brook
Démarrez un client Brook wss qui prend en charge TCP et UDP. Il peut ouvrir un proxy chaussettes5, [src <-> chaussettes5 <-> $ brook wssclient <-> $ brook wssserver <-> dst]
--example : Afficher un exemple minimal d'utilisation
--http =" ": Où écouter les connexions proxy HTTP
--link ="": lien brook, vous pouvez l'obtenir via $ brook link. Les paramètres wssserver et password seront ignorés
--password, -p ="": mot de passe du serveur Brook wss
--socks5 =" : Où écouter les connexions SOCKS5 (par défaut : 127.0.0.1:1080)
--socks5ServerIP =" : Uniquement si l'adresse IP de votre serveur chaussettes5 est différente de l'adresse IP d'écoute
--tcpTimeout =" : temps (s) (par défaut : 0)
--udpTimeout =" : temps (s) (par défaut : 0)
--wssserver, -s =" : adresse Brook wssserver, comme : wss://google.com:443, si aucun chemin, alors /ws sera utilisé. N’omettez en aucun cas le port
Démarrez un serveur rapide Brook prenant en charge TCP et UDP.
--blockCIDR4List ="" : Cette option sera supprimée dans une prochaine version, veuillez utiliser l'option globale à la place
--blockCIDR6List ="" : Cette option sera supprimée dans une prochaine version, veuillez utiliser l'option globale à la place
--blockDomainList ="" : Cette option sera supprimée dans une prochaine version, veuillez utiliser l'option globale à la place
--blockGeoIP =" : Cette option sera supprimée dans une prochaine version, veuillez utiliser l'option globale à la place
--cert =" : le chemin absolu du fichier de certification pour le domaine, tel que /path/to/cert.pem. Si cert ou certkey est vide, un certificat sera émis automatiquement
--certkey =" : chemin absolu du fichier de clé de certification pour le domaine, tel que /path/to/certkey.pem. Si cert ou certkey est vide, un certificat sera émis automatiquement
--domainaddress =" : Tel que : domain.com:443. Si vous choisissez d'émettre automatiquement des certificats, le domaine doit avoir été résolu selon l'adresse IP du serveur et le port 80 sera également utilisé.
--example : Afficher un exemple minimal d'utilisation
--password, -p =" : mot de passe du serveur
--tcpTimeout =" : temps (s) (par défaut : 0)
--udpTimeout =" : temps (s) (par défaut : 0)
--updateListInterval ="" : Cette option sera supprimée dans une prochaine version, veuillez utiliser l'option globale à la place (par défaut : 0)
--withoutBrookProtocol : Les données ne seront pas chiffrées avec le protocole Brook
Démarrez un client rapide Brook prenant en charge TCP et UDP. Il peut ouvrir un proxy chaussettes5, [src <-> chaussettes5 <-> $ brook quicclient <-> $ brook quicserver <-> dst]. (Le paramètre global-dial-est ignoré)
--example : Afficher un exemple minimal d'utilisation
--http =" ": Où écouter les connexions proxy HTTP
--link ="": lien brook, vous pouvez l'obtenir via $ brook link. Les paramètres wssserver et password seront ignorés
--socks5 =" : Où écouter les connexions SOCKS5 (par défaut : 127.0.0.1:1080)
--socks5ServerIP =" : Uniquement si l'adresse IP de votre serveur chaussettes5 est différente de l'adresse IP d'écoute
--tcpTimeout =" : temps (s) (par défaut : 0)
--udpTimeout =" : temps (s) (par défaut : 0)
Relayez le trafic réseau via Brook, qui prend en charge TCP et UDP. Accéder à [à partir de l'adresse] équivaut à accéder à [à l'adresse], [src <-> depuis l'adresse <-> $ brook server/wsserver/wssserver/quicserver <-> à l'adresse]
--example : Afficher un exemple minimal d'utilisation
--from, -f, -l =" : adresse d'écoute : comme ':9999'
--link ="": lien brook, vous pouvez l'obtenir via $ brook link. Les paramètres du serveur et du mot de passe seront ignorés
--password, -p =" : Mot de passe
--server, -s =" : brook server ou brook wsserver ou brook wssserver ou brook quicserver, comme : 1.2.3.4:9999, ws://1.2.3.4:9999, wss://domain:443/ws, rapide://domain.com:443
--tcpTimeout =" : temps (s) (par défaut : 0)
--to, -t =" : Adresse à laquelle le relais est destiné, comme : 1.2.3.4:9999
--udpTimeout =" : temps (s) (par défaut : 0)
Exécutez un serveur DNS sur Brook, qui prend en charge TCP et UDP, [src <-> $ brook dnserversoverbrook <-> $ brook server/wsserver/wssserver/quicserver <-> dns] ou [src <-> $ brook dnsserveroverbrook <-> DNSForBypass]
--blockDomainList =" : Un domaine par ligne, mode de correspondance de suffixe. https://, http:// ou chemin de fichier absolu local. Comme : https://raw.githubusercontent.com/txthinking/brook/master/programmable/list/example_domain.txt
--bypassDomainList =" : Un domaine par ligne, mode de correspondance de suffixe. https://, http:// ou chemin de fichier absolu local. Comme : https://raw.githubusercontent.com/txthinking/brook/master/programmable/list/example_domain.txt
--disableA : Désactiver une requête
--disableAAAA : Désactive la requête AAAA
--dns = "": serveur DNS pour résoudre les domaines non dans la liste (par défaut: 8.8.8.8:53)
--DNSFORBYPASS = "": Server DNS pour résoudre les domaines dans la liste de contournement. Comme 223.5.5.5:53 ou https://dns.alidns.com/dns-query?address=223.5.5.5:443, l'adresse est requise (par défaut: 223.5.5.5:53)
- Exemple : montre un exemple minimal d'utilisation
--Link = "": Brook Link, vous pouvez l'obtenir via un lien Brook $. Les paramètres du serveur et du mot de passe seront ignorés
--Listen, -l = "": Adresse d'écoute, comme: 127.0.0.1:53
--Sword-Pass, -p = "": mot de passe
--server, -s = "": Brook Server ou Brook Wsserver ou Brook WssServer ou Brook QuicServer, comme: 1.2.3.4:9999, ws: //1.2.3.4: 9999, wss: //domain.com: 443 / WS, Quic: //domain.com: 443
--tcptimeout = "": temps (s) (par défaut: 0)
--udptimeout = "": temps (s) (par défaut: 0)
Générer un lien de ruisseau
--Address = "": Lorsque le serveur est Brook Wsserver ou Brook WssServer ou Brook QuicServer, spécifiez l'adresse au lieu de résoudre les adresses de l'hôte, telles que 1.2.3.4:443
--Ca = "": Lorsque le serveur est Brook WssServer ou Brook QuicServer, spécifiez CA pour un certificat non fiable, tel que /path/to/ca.pem
--ClienthkdFinfo = "": Client HKDF Info, la plupart du temps, vous n'avez pas besoin de changer cela, lisez le protocole Brook si vous ne savez pas ce que c'est
- Exemple : montre un exemple minimal d'utilisation
--Ragment = "": Lorsque le serveur est Brook WssServer, divisez le clienthello en plusieurs fragments, puis envoyez-les un par un avec des retards (millisecondes). Le format est min_length: max_length: min_delay: max_delay, ne peut pas être nul, comme 50: 100: 10: 50
- INSECURE : Lorsque le serveur est Brook WssServer ou Brook QuicServer, le client ne vérifie pas la chaîne de certificat du serveur et le nom d'hôte du serveur
--Name = "": Donnez un nom à ce serveur
--Sword-Pass, -p = "": mot de passe
--server, -s = "": Prise en charge du serveur Brook, Brook Wsserver, Brook WssServer, SOCKS5 Server, Brook QuicServer. Comme: 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 = "": Infos HKDF Server, la plupart du temps, vous n'avez pas besoin de changer cela, lisez le protocole Brook si vous ne savez pas ce que c'est
--tlsfingerprint = "": Lorsque le serveur est Brook WssServer, sélectionnez l'empreinte digitale TLS, la valeur peut être: Chrome
--Token = "": Un jeton représente l'identité d'un utilisateur. Une chaîne codée en hexadécimal. Le serveur doit avoir - UserAPI activé. Notez que: uniquement pris en charge par l'interface graphique Brook (à l'exception d'OpenWrt) et Tun2brook
--UDPoverstream : lorsque le serveur est Brook QuicServer, UDP sur Stream. Dans des circonstances normales, vous avez besoin de ce paramètre car la taille du datagramme maximum pour Quic est très petite. Remarque: seul Brook CLI et Tun2brook Suppport pour l'instant
--UDPOVERTCP : Lorsque le serveur est Brook Server, UDP sur TCP
--Username, -u = "": nom d'utilisateur, lorsque le serveur est SOCKS5 Server
--withoutbrookprotocol : Lorsque le serveur est Brook Wsserver ou Brook Wsserver ou Brook QuicServer, les données ne seront pas cryptées avec le protocole Brook
Exécutez un client et connectez-vous avec un lien Brook, qui prend en charge TCP et UDP. Il peut démarrer un proxy SOCKS5, [src <-> socks5 <-> $ Brook Connect <-> $ Brook Server / Wsserver / WssServer / QuicServer <-> DST]
- Exemple : montre un exemple minimal d'utilisation
--http = "": où écouter les connexions proxy http
--link, -l = "": lien Brook, vous pouvez l'obtenir via un lien Brook
--socks5 = "": où écouter les connexions SOCKS5 (par défaut: 127.0.0.1:1080)
--socks5serverip = "": seulement si votre IP de serveur SOCKS5 est différent de l'écoute IP
--tcptimeout = "": temps (s) (par défaut: 0)