크로스 플랫폼 프로그래밍 가능 네트워크 도구입니다.
❤️ 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
사용하여 컴퓨터에 로컬 양말5 프록시 또는 http 프록시를 만든 다음 시스템 프록시 설정이나 브라우저에서 이 프록시를 사용하도록 구성할 수 있습니다. 하지만:
Socks5 및 http 프록시에 대한 자세한 내용은 이 기사를 참조하세요.
GUI 클라이언트는 양말5 및 http 프록시 모드를 사용하지 않으므로 시스템 프록시를 사용하지 않는 일부 소프트웨어에는 문제가 없습니다. 대신 가상 네트워크 카드를 사용하여 UDP 기반 http3을 포함한 전체 시스템 네트워크를 장악합니다. 또한 Brook을 사용하면 네트워크 요청을 프로그래밍 방식으로 제어할 수 있으므로 네트워크 요청에 대한 기본 지식이 필요합니다.
참고: 주소란 도메인 주소:
google.com:443
또는 IP 주소:8.8.8.8:53
등 포트 번호가 포함된 주소를 의미합니다.
google.com:443
과 같은 도메인 주소를 요청하는 경우google.com
의 IP를 조회하기 위해 시스템 구성 DNS(예: 8.8.8.8:53
에 네트워크 요청을 보냅니다.google.com
의 IP(예: 1.2.3.4
를 앱에 반환합니다.1.2.3.4:443
과 같은 IP 주소로 결합합니다.1.2.3.4:443
에 네트워크 요청을 합니다. 위 프로세스에서 앱은 실제로 두 개의 네트워크 요청을 수행합니다. 하나는 IP 주소 8.8.8.8:53
이고 다른 하나는 IP 주소 1.2.3.4:443
입니다. 즉, 도메인 이름은 본질적으로 IP의 별칭이므로 연결을 설정하려면 도메인의 IP를 얻어야 합니다.
Brook에는 앱이 시스템 DNS에 보내는 쿼리 요청에서 도메인 이름을 구문 분석하고 앱에 응답하는 방법을 결정할 수 있는 가짜 DNS 기능이 있습니다.
google.com:443
과 같은 도메인 이름 주소를 요청하는 경우google.com
의 IP를 조회하기 위해 시스템에 구성된 DNS(예: 8.8.8.8:53
에 네트워크 요청을 보냅니다.8.8.8.8:53
으로 네트워크 요청을 보내고 있음을 감지합니다. 그러면 domain
과 같은 정보를 전달하는 in_dnsquery
변수가 트리거됩니다.240.0.0.1
과 같은 가짜 IP를 앱에 반환합니다.240.0.0.1:443
과 같은 IP 주소로 결합합니다.240.0.0.1:443
에 네트워크 요청을 합니다.240.0.0.1:443
으로 네트워크 요청을 보내고 있음을 감지하고 이것이 가짜 IP임을 발견하고 가짜 IP 주소를 다시 도메인 주소 google.com:443
으로 변환합니다. 그러면 domainaddress
와 같은 정보를 전달하는 in_address
변수가 트리거됩니다.google.com:443
Brook 서버로 보냅니다.1.2.3.4
수신하는 등 google.com
의 IP를 알아내기 위해 도메인 이름을 확인하기 위해 자체 DNS를 요청합니다.1.2.3.4:443
1.2.3.4:443
에 네트워크 요청을 보내고 Brook 클라이언트에 데이터를 반환합니다.그러나 다음과 같은 상황이 발생하면 도메인 이름을 구문 분석할 수 없거나 구문 분석할 수 없습니다. 즉, Brook 클라이언트는 도메인 이름이 무엇인지 알 수 없거나 알 수 없으며 이를 IP 주소로 전송된 일반적인 요청으로 처리합니다.
가짜 DNS의 비효율성을 방지하려면 이 문서를 참조하세요.
google.com:443
과 같은 도메인 주소를 요청하는 경우google.com
의 IP를 조회하기 위해 시스템에 구성된 DNS(예: 8.8.8.8:53
에 네트워크 요청을 보냅니다.8.8.8.8:53
으로 네트워크 요청을 보내고 있음을 감지합니다. 그러면 ipaddress
와 같은 정보를 전달하는 in_address
변수가 트리거됩니다.8.8.8.8:53
보냅니다.8.8.8.8:53
에 네트워크 요청을 보내고 1.2.3.4
와 같은 결과를 Brook 클라이언트에 반환합니다.1.2.3.4:443
과 같은 IP 주소로 결합합니다.1.2.3.4:443
에 네트워크 요청을 합니다.1.2.3.4:443
으로 네트워크 요청을 보내고 있음을 감지합니다. 그러면 ipaddress
와 같은 정보를 전달하는 in_address
변수가 트리거됩니다.1.2.3.4:443
보냅니다.1.2.3.4:443
에 네트워크 요청을 보내고 Brook 클라이언트에 데이터를 반환합니다.google.com:443
과 같은 도메인 이름 주소를 요청하는 경우8.8.8.8:443
과 같은 보안 DNS에 네트워크 요청을 보내 google.com
의 IP를 조회합니다.8.8.8.8:443
으로 네트워크 요청을 보내고 있음을 감지합니다. 그러면 ipaddress
와 같은 정보를 전달하는 in_address
변수가 트리거됩니다.8.8.8.8:443
보냅니다.8.8.8.8:443
에 네트워크 요청을 보내고 1.2.3.4
와 같은 결과를 Brook 클라이언트에 반환합니다.1.2.3.4:443
과 같은 IP 주소로 결합합니다.1.2.3.4:443
에 네트워크 요청을 합니다.1.2.3.4:443
으로 네트워크 요청을 보내고 있음을 감지합니다. 그러면 ipaddress
와 같은 정보를 전달하는 in_address
변수가 트리거됩니다.1.2.3.4:443
보냅니다.1.2.3.4:443
에 네트워크 요청을 보내고 Brook 클라이언트에 데이터를 반환합니다.가짜 DNS의 비효율성을 방지하려면 이 문서를 참조하세요.
in_brooklinks
변수가 트리거되면:in_dnsquery
변수가 트리거되면 필요에 따라 다음과 같이 처리할 수 있습니다.in_address
변수가 트리거되면 필요에 따라 다음과 같이 처리할 수 있습니다.in_httprequest
및 in_httpresponse
가 트리거됩니다.in_httprequest
변수가 트리거되면 필요에 따라 다음과 같이 처리할 수 있습니다.in_httpresponse
변수가 트리거되면 필요에 따라 다음과 같이 처리할 수 있습니다.변수의 속성과 반응에 대한 자세한 내용은 다음 내용을 참고하시기 바랍니다.
변하기 쉬운 | 유형 | 상태 | 타이밍 | 설명 | 아웃타입 |
---|---|---|---|---|---|
in_brooklinks | 지도 | / | 연결하기 전에 | 여러 브룩 링크를 미리 정의한 다음 연결할 링크를 프로그래밍 방식으로 지정합니다. | 지도 |
in_dnsquery | 지도 | 가짜DNS: 켜짐 | DNS 쿼리가 발생하는 경우 | 스크립트는 이 요청을 처리하는 방법을 결정할 수 있습니다. | 지도 |
in_address | 지도 | / | 주소로 접속하는 경우 | 스크립트는 연결 방법을 결정할 수 있습니다 | 지도 |
in_httprequest | 지도 | / | HTTP(S) 요청이 들어올 때 | 스크립트는 이 요청을 처리하는 방법을 결정할 수 있습니다. | 지도 |
in_httprequest,in_httpresponse | 지도 | / | HTTP(S) 응답이 들어올 때 | 스크립트는 이 응답을 처리하는 방법을 결정할 수 있습니다. | 지도 |
열쇠 | 유형 | 설명 | 예 |
---|---|---|---|
_ | 부울 | 무의미한 | 진실 |
out
, map
유형이 아닌 경우 무시됩니다.
열쇠 | 유형 | 설명 | 예 |
---|---|---|---|
... | ... | ... | ... |
맞춤 이름 | 끈 | 브룩 링크 | 시내://... |
... | ... | ... | ... |
열쇠 | 유형 | 설명 | 예 |
---|---|---|---|
도메인 | 끈 | 도메인 이름 | google.com |
유형 | 끈 | 쿼리 유형 | 에이 |
앱드 | 끈 | 앱 ID 또는 경로 | com.google.Chrome.helper |
인터페이스 | 끈 | 네트워크 인터페이스. Mac 전용 | ko0 |
out
, error
유형인 경우 로그에 기록됩니다. map
유형이 아닌 경우 무시됩니다.
열쇠 | 유형 | 설명 | 예 |
---|---|---|---|
차단하다 | 부울 | 차단 여부, 기본값은 false | 거짓 |
아이피 | 끈 | IP를 직접 지정, type A / AAAA 인 경우에만 유효 | 1.2.3.4 |
체계 | 부울 | 시스템 DNS로 해결, 기본값은 false | 거짓 |
우회로 | 부울 | DNS 우회로 해결, 기본값은 false | 거짓 |
브룩링크키 | 끈 | 서버를 연결해야 하는 경우 대신 in_brooklinks 키로 지정된 서버에 연결하세요. | 맞춤 이름 |
열쇠 | 유형 | 설명 | 예 |
---|---|---|---|
회로망 | 끈 | 네트워크 유형, 값 tcp / udp | TCP |
i주소 | 끈 | IP 유형 주소. ipaddress와 domainaddress만 있습니다. 참고로 이 둘은 아무런 연관이 없습니다 | 1.2.3.4:443 |
도메인 주소 | 끈 | 도메인 유형 주소. FakeDNS 때문에 여기에서 도메인 이름 주소를 얻을 수 있습니다. | google.com:443 |
앱드 | 끈 | 앱 ID 또는 경로 | com.google.Chrome.helper |
인터페이스 | 끈 | 네트워크 인터페이스. Mac 전용 | ko0 |
out
, error
유형인 경우 로그에 기록됩니다. map
유형이 아닌 경우 무시됩니다.
열쇠 | 유형 | 설명 | 예 |
---|---|---|---|
차단하다 | 부울 | 차단 여부, 기본값은 false | 거짓 |
i주소 | 끈 | IP 유형 주소, 다시 쓰기 대상 | 1.2.3.4:443 |
ipaddressfrombypassdns | 끈 | DNS 우회를 사용하여 A 또는 AAAA IP를 획득하고 대상을 다시 작성합니다. domainaddress 존재할 때만 유효하며 값은 A / AAAA 입니다. | 에이 |
우회로 | 부울 | 우회, 기본값은 false . true 이고 domainaddress 인 경우 ipaddress 또는 ipaddressfrombypassdns 지정해야 합니다. | 거짓 |
미트 | 부울 | MITM 수행 여부, 기본값은 false . network tcp 인 경우에만 유효합니다. CA를 설치해야 합니다. 아래를 참조하세요. | 거짓 |
미트프로토콜 | 끈 | MITM 프로토콜은 명시적으로 지정되어야 하며 값은 http / https 입니다. | https |
mitmcert도메인 | 끈 | 기본적으로 domainaddress 에서 가져오는 MITM 인증서 도메인 이름입니다. ipaddress 및 mitm 이 true 이고 mitmprotocol 이 https 인 경우 명시적으로 지정해야 합니다. | example.com |
mitmwithbody | 부울 | http 본문을 조작할지 여부, 기본값은 false . 요청 및 응답의 본문을 메모리로 읽고 스크립트와 상호 작용합니다. iOS 50M 총 메모리 제한으로 인해 프로세스가 종료될 수 있음 | 거짓 |
mitmautohandlecompress | 부울 | 스크립트와 상호작용할 때 http 본문의 압축을 자동으로 풀지 여부, 기본값은 false | 거짓 |
mitmclienttimeout | 정수 | 서버와의 MITM 대화 시간 초과, 초, 기본값 0 | 0 |
mitmserverreadtimeout | 정수 | 클라이언트에서 MITM 읽기 시간 초과, 초, 기본값 0 | 0 |
mitmserverwritetimeout | 정수 | 클라이언트에 대한 MITM 쓰기 시간 초과, 초, 기본값 0 | 0 |
브룩링크키 | 끈 | 서버를 연결해야 하는 경우 대신 in_brooklinks 키로 지정된 서버에 연결하세요. | 맞춤 이름 |
열쇠 | 유형 | 설명 | 예 |
---|---|---|---|
URL | 끈 | URL | https://example.com/hello |
방법 | 끈 | HTTP 방식 | 얻다 |
몸 | 바이트 | HTTP 요청 본문 | / |
... | 끈 | 다른 필드는 HTTP 헤더입니다. | / |
out
, 요청 또는 응답으로 설정되어야 합니다.
열쇠 | 유형 | 설명 | 예 |
---|---|---|---|
상태 코드 | 정수 | HTTP 상태 코드 | 200 |
몸 | 바이트 | HTTP 응답 본문 | / |
... | 끈 | 다른 필드는 HTTP 헤더입니다. | / |
out
, 응답으로 설정되어야 합니다.
Brook GUI에서 스크립트는 모듈 로 추상화됩니다. 이미 몇 가지 모듈이 있고, 마법 같은 건 없습니다. 단지 자동으로 _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
Tengo 언어 구문
도서관
텍스트: 정규식, 문자열 변환 및 조작
수학: 수학 상수 및 함수
times: 시간 관련 함수
rand: 무작위 함수
fmt: 서식 지정 기능
json: JSON 함수
enum: 열거 함수
hex: 16진수 인코딩 및 디코딩 기능
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는 디버깅에 적합하지 않을 수 있습니다. fmt.println
으로 디버깅하려면 데스크톱에서 tun2brook을 사용하는 것이 좋습니다.
https://txthinking.github.io/ca/ca.pem
OS | 어떻게 |
---|---|
iOS | https://www.youtube.com/watch?v=HSGPC2vpDGk |
기계적 인조 인간 | 안드로이드에는 사용자 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를 완벽하게 지원합니다.
IPv6에 대한 Brook의 입장은 긍정적입니다. 서버나 로컬 환경에 IPv6 스택이 없다면 이 기사를 읽어보세요.
brook link --address
통해 IP 주소를 지정하지 않은 경우 Brook 클라이언트는 AAAA 레코드를 선호하는 로컬 DNS를 사용하여 도메인의 IP 확인을 시도합니다. 예를 들어:Connectivity Check
클릭합니다. 가끔 작동하지만 다른 경우에는 작동하지 않는다면 이는 불안정함을 나타냅니다.Test IPv4 TCP
사용합니다. 이 테스트는 IP 주소를 하드코딩했으므로 DNS 확인을 트리거하지 않습니다.Test IPv4 UDP
사용합니다. 이 테스트는 IP 주소를 하드코딩했으므로 DNS 확인을 트리거하지 않습니다.Test IPv6 TCP
사용합니다. 이 테스트는 IP 주소를 하드코딩했으므로 DNS 확인을 트리거하지 않습니다.Test IPv6 UDP
사용합니다. 이 테스트는 IP 주소를 하드코딩했으므로 DNS 확인을 트리거하지 않습니다.Echo Client
사용합니다. 입력한 에코 서버가 도메인 주소인 경우 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) .txt. 서버/wsserver/wssserver/quicserver와 함께 작동합니다.
--blockCIDR6List ="": 한 줄에 하나의 CIDR, https://, http:// 또는 로컬 파일 절대 경로(예: https://raw.githubusercontent.com/txthinking/brook/master/programmable/list/example_cidr6) .txt. 서버/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 정보, 대부분의 경우 이를 변경할 필요가 없습니다. 변경된 경우 클라이언트 측의 모든 및 각 브룩 링크는 동일해야 합니다. 즉, 각각을 의미합니다(기본값: "브룩")
--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 ="": 현재 시스템이 TCP 및 UDP 모두 외부 IPv4에 대한 네트워크 연결을 설정할 때 사용되는 IPv4를 지정하는 데 사용됩니다.
--dialWithIP6 ="": 현재 시스템이 TCP 및 UDP 모두 외부 IPv6에 대한 네트워크 연결을 설정할 때 사용되는 IPv6를 지정하는 데 사용됩니다.
--dialWithNIC ="": 현재 시스템이 외부(TCP 및 UDP 모두)에 네트워크 연결을 설정할 때 사용되는 NIC를 지정하는 데 사용됩니다.
--dialWithSocks5 ="": 현재 시스템이 127.0.0.1:1081과 같이 양말5 프록시를 사용하여 TCP 및 UDP 외부에 대한 네트워크 연결을 설정할 때
--dialWithSocks5Password ="": 있는 경우
--dialWithSocks5TCPTimeout ="": 시간(초) (기본값: 0)
--dialWithSocks5UDPTimeout ="": 시간(초) (기본값: 60)
--dialWithSocks5Username ="": 있는 경우
--ipLimitInterval ="": ipLimitMax의 간격(기본값: 0)
--ipLimitMax ="": 클라이언트 IP 주소 수를 제한합니다. 클라이언트가 동적 IP를 가질 수 있으므로 이 매개변수를 사용할 때 주의하십시오. server/wsserver/wssserver/quicserver와 함께 작동합니다(기본값: 0)
--ipLimitWait ="": ipLimitMax를 초과한 후 복구를 기다리는 시간(기본값: 0)
--log ="": 로그를 활성화합니다. 유효한 값은 파일 경로 또는 '콘솔'입니다. Unix 시스템에서 로그 파일을 재설정하려면 나에게 SIGUSR1을 보내십시오. SOCKS5 lib를 디버그하려면 env SOCKS5_DEBUG=true를 설정하세요.
--pid ="": pid를 저장하는 데 사용되는 파일 경로입니다. Unix 시스템에서 --serverLog 파일을 재설정하려면 나에게 SIGUSR1을 보내세요.
--pprof ="": go http pprof 청취 주소(예: 6060)
--prometheus ="": prometheus http 수신 주소(예: 7070). 공중망에서 전송하는 경우 nico와 함께 사용하는 것이 좋습니다.
--prometheusPath ="": prometheus http 경로(예: /xxx). 공중망에서 전송되는 경우에는 추측하기 어려운 값을 권장함
--serverHKDFInfo ="": 서버 HKDF 정보, 대부분의 경우 이를 변경할 필요가 없습니다. 변경된 경우 클라이언트 측의 모든 및 각 브룩 링크는 동일해야 합니다. 즉, 각각을 의미합니다(기본값: "브룩")
--serverLog ="": 서버 로그, 트래픽 등을 활성화합니다. 유효한 값은 파일 경로 또는 '콘솔'입니다. Unix 시스템에서 로그 파일을 재설정하려면 나에게 SIGUSR1을 보내십시오. --log 매개변수와 함께 사용할 수 없습니다. Brook 프로토콜을 사용하여 server/wsserver/wssserver/quicserver와 함께 작동합니다.
--speedLimit ="": 제한 속도(b), 500kb/s(예: 500000), server/wsserver/wssserver/quicserver에서 작동(기본값: 0)
--tag ="": 태그는 프로세스에 사용될 수 있으며 'key1:value1'과 같이 로그 또는 serverLog에 추가됩니다. 모든 태그는 userAPI에 하나씩 쿼리 매개변수로 추가됩니다.
--userAPI ="": 자체 사용자 시스템을 구축할 때 Brook Server는 토큰이 유효한지 확인하기 위해 userAPI에 GET 요청을 보냅니다(예: https://your-api-server.com/a_unpredictable_path). 예, https API에 예측할 수 없는 경로를 추가하는 것이 좋습니다. 물론 내부 네트워크 통신에 http API를 사용할 수도 있습니다. 요청 형식은 https://your-api-server.com/a_unpredictable_path?token=xxx입니다. 응답이 200이면 본문은 사용자 ID와 같은 사용자의 고유 식별자여야 합니다. 다른 모든 상태 코드는 불법 사용자를 나타내는 것으로 간주되며, 이러한 경우 본문은 오류를 설명하는 문자열이어야 합니다. Brook 프로토콜과 함께 --serverLog 및 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 클라이언트를 시작합니다. 이는 양말5 프록시를 열 수 있습니다. [src <-> 양말5 <-> $ 브룩 클라이언트 <-> $ 브룩 서버 <-> dst]
--example : 최소한의 사용 예를 표시합니다.
--http ="": HTTP 프록시 연결을 수신할 위치
--link ="": 브룩 링크, $ 브룩 링크를 통해 얻을 수 있습니다. wssserver 및 비밀번호 매개변수는 무시됩니다.
--password, -p ="": 브룩 서버 비밀번호
--server, -s ="": Brook 서버 주소(예: 1.2.3.4:9999)
--socks5 ="": SOCKS5 연결을 수신할 위치(기본값: 127.0.0.1:1080)
--socks5ServerIP ="": 양말5 서버 IP가 수신 IP와 다른 경우에만
--tcpTimeout ="": 시간(초) (기본값: 0)
--udpTimeout ="": 시간(초) (기본값: 0)
tcp 및 udp를 지원하는 brook wsserver를 시작합니다. 표준 http 서버와 웹소켓 서버를 엽니다.
--blockCIDR4List ="": 이 옵션은 향후 버전에서 제거될 예정입니다. 대신 전역 옵션을 사용하십시오.
--blockCIDR6List ="": 이 옵션은 향후 버전에서 제거될 예정입니다. 대신 전역 옵션을 사용하십시오.
--blockDomainList ="": 이 옵션은 향후 버전에서 제거될 예정입니다. 대신 전역 옵션을 사용하십시오.
--blockGeoIP ="": 이 옵션은 향후 버전에서 제거될 예정입니다. 대신 전역 옵션을 사용하십시오.
--example : 최소한의 사용 예를 표시합니다.
--listen, -l ="": 수신 주소(예: ':80')
--password, -p ="": 서버 비밀번호
--path ="": URL 경로(기본값: /ws)
--tcpTimeout ="": 시간(초) (기본값: 0)
--udpTimeout ="": 시간(초) (기본값: 0)
--updateListInterval ="": 이 옵션은 향후 버전에서 제거될 예정입니다. 대신 전역 옵션을 사용하십시오(기본값: 0).
--withoutBrookProtocol : 데이터는 브룩 프로토콜로 암호화되지 않습니다.
--xForwardedFor : --log의 from 필드를 교체합니다. 이는 위조될 수 있습니다.
tcp 및 udp를 지원하는 brook wsclient를 시작합니다. 이는 양말5 프록시를 열 수 있습니다. [src <-> sock5 <-> $ brook wsclient <-> $ brook wsserver <-> dst]
--example : 최소한의 사용 예를 표시합니다.
--http ="": HTTP 프록시 연결을 수신할 위치
--link ="": 브룩 링크, $ 브룩 링크를 통해 얻을 수 있습니다. wssserver 및 비밀번호 매개변수는 무시됩니다.
--password, -p ="": 브룩 wsserver 비밀번호
--socks5 ="": SOCKS5 연결을 수신할 위치(기본값: 127.0.0.1:1080)
--socks5ServerIP ="": 양말5 서버 IP가 수신 IP와 다른 경우에만
--tcpTimeout ="": 시간(초) (기본값: 0)
--udpTimeout ="": 시간(초) (기본값: 0)
--wsserver, -s ="": Brook wsserver 주소(예: ws://1.2.3.4:80), 경로가 없으면 /ws가 사용됩니다. 어떤 경우에도 포트를 생략하지 마십시오
tcp 및 udp를 지원하는 brook wssserver를 시작합니다. 표준 https 서버와 웹소켓 서버를 엽니다.
--blockCIDR4List ="": 이 옵션은 향후 버전에서 제거될 예정입니다. 대신 전역 옵션을 사용하십시오.
--blockCIDR6List ="": 이 옵션은 향후 버전에서 제거될 예정입니다. 대신 전역 옵션을 사용하십시오.
--blockDomainList ="": 이 옵션은 향후 버전에서 제거될 예정입니다. 대신 전역 옵션을 사용하십시오.
--blockGeoIP ="": 이 옵션은 향후 버전에서 제거될 예정입니다. 대신 전역 옵션을 사용하십시오.
--cert ="": 도메인의 인증서 파일 절대 경로입니다(예: /path/to/cert.pem). 인증서 또는 인증서 키가 비어 있으면 인증서가 자동으로 발급됩니다.
--certkey ="": 도메인의 인증서 키 파일 절대 경로입니다(예: /path/to/certkey.pem). 인증서 또는 인증서 키가 비어 있으면 인증서가 자동으로 발급됩니다.
--domainaddress ="": 예: domain.com:443. 자동으로 인증서를 발급하도록 선택한 경우 도메인이 서버 IP로 확인되어야 하며 80 포트도 사용됩니다.
--example : 최소한의 사용 예를 표시합니다.
--password, -p ="": 서버 비밀번호
--path ="": URL 경로(기본값: /ws)
--tcpTimeout ="": 시간(초) (기본값: 0)
--udpTimeout ="": 시간(초) (기본값: 0)
--updateListInterval ="": 이 옵션은 향후 버전에서 제거될 예정입니다. 대신 전역 옵션을 사용하십시오(기본값: 0).
--withoutBrookProtocol : 데이터는 브룩 프로토콜로 암호화되지 않습니다.
tcp 및 udp를 지원하는 brook wssclient를 시작합니다. 이것은 양말5 프록시를 열 수 있습니다. [src <-> sock5 <-> $ brook wssclient <-> $ brook wssserver <-> dst]
--example : 최소한의 사용 예를 표시합니다.
--http ="": HTTP 프록시 연결을 수신할 위치
--link ="": 브룩 링크, $ 브룩 링크를 통해 얻을 수 있습니다. wssserver 및 비밀번호 매개변수는 무시됩니다.
--password, -p ="": 브룩 wss서버 비밀번호
--socks5 ="": SOCKS5 연결을 수신할 위치(기본값: 127.0.0.1:1080)
--socks5ServerIP ="": 양말5 서버 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). 인증서 또는 인증서 키가 비어 있으면 인증서가 자동으로 발급됩니다.
--certkey ="": 도메인의 인증서 키 파일 절대 경로입니다(예: /path/to/certkey.pem). 인증서 또는 인증서 키가 비어 있으면 인증서가 자동으로 발급됩니다.
--domainaddress ="": 예: domain.com:443. 자동으로 인증서를 발급하도록 선택한 경우 도메인이 서버 IP로 확인되어야 하며 80 포트도 사용됩니다.
--example : 최소한의 사용 예를 표시합니다.
--password, -p ="": 서버 비밀번호
--tcpTimeout ="": 시간(초) (기본값: 0)
--udpTimeout ="": 시간(초) (기본값: 0)
--updateListInterval ="": 이 옵션은 향후 버전에서 제거될 예정입니다. 대신 전역 옵션을 사용하십시오(기본값: 0).
--withoutBrookProtocol : 데이터는 브룩 프로토콜로 암호화되지 않습니다.
tcp 및 udp를 지원하는 Brook quicclient를 시작합니다. 이는 양말5 프록시인 [src <-> sock5 <-> $ brook quicclient <-> $ brook quicserver <-> dst]를 열 수 있습니다. (글로벌 다이얼 매개변수는 무시됩니다)
--example : 최소한의 사용 예를 표시합니다.
--http ="": HTTP 프록시 연결을 수신할 위치
--link ="": 브룩 링크, $ 브룩 링크를 통해 얻을 수 있습니다. wssserver 및 비밀번호 매개변수는 무시됩니다.
--socks5 ="": SOCKS5 연결을 수신할 위치(기본값: 127.0.0.1:1080)
--socks5ServerIP ="": 양말5 서버 IP가 수신 IP와 다른 경우에만
--tcpTimeout ="": 시간(초) (기본값: 0)
--udpTimeout ="": 시간(초) (기본값: 0)
TCP 및 UDP를 지원하는 Brook을 통해 네트워크 트래픽을 릴레이합니다. [주소에서]에 액세스하는 것은 [주소로]에 액세스하는 것과 같습니다. [src <-> 주소 <->에서 $ brook server/wsserver/wssserver/quicserver <-> 주소로]
--example : 최소한의 사용 예를 표시합니다.
--from, -f, -l ="": 청취 주소: ':9999'와 같습니다.
--link ="": 브룩 링크, $ 브룩 링크를 통해 얻을 수 있습니다. 서버 및 비밀번호 매개변수는 무시됩니다.
--password, -p ="": 비밀번호
--server, -s ="": 브룩 서버 또는 브룩 wsserver 또는 브룩 wssserver 또는 브룩 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)
TCP 및 UDP를 지원하는 brook을 통해 DNS 서버를 실행합니다. [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)
-예 : 최소한의 사용 예를 보여줍니다
-link = "": Brook Link, $ Brook Link를 통해 얻을 수 있습니다. 서버 및 비밀번호 매개 변수는 무시됩니다
-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 = "": 시간 (s) (기본값 : 0)
--udptimeout = "": 시간 (기본값 : 0)
브룩 링크를 생성합니다
-Address = "": 서버 인 경우 Brook WSServer 또는 Brook WSSServer 또는 Brook Quicserver 인 경우 1.2.3.4:443과 같은 호스트의 주소를 해결하는 대신 주소를 지정하십시오.
--ca = "": 서버가 Brook Wssserver 또는 Brook Quicserver 일 때/spath/to/ca.pem과 같은 신뢰할 수없는 인증에 CA를 지정하십시오.
--clienthkdfinfo = "": 클라이언트 hkdf 정보, 대부분은 이것을 변경할 필요가없고, 이것이 무엇인지 모르는 경우 Brook 프로토콜을 읽으십시오.
-예 : 최소한의 사용 예를 보여줍니다
--- 프레임 = "": 서버가 Brook WSSServer 일 때 ClientHello를 여러 조각으로 나눈 다음 지연으로 하나씩 보내십시오 (밀리 초). 형식은 min_length : max_length : min_delay : max_delay, 50 : 100 : 10 : 50과 같이 0이 될 수 없습니다.
-inscure : 서버가 Brook WSSServer 또는 Brook Quicserver 인 경우 클라이언트는 서버의 인증 체인 및 호스트 이름을 확인하지 않습니다.
-name = "":이 서버의 이름을 알려줍니다
-password, -p = "": 암호
-server, -s = "": Brook Server, Brook WSServer, Brook WSSServer, Socks5 Server, 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 = "": Server HKDF 정보, 대부분은 이것을 변경할 필요가없고, 이것이 무엇인지 모르는 경우 Brook 프로토콜을 읽으십시오.
--tlsfingerprint = "": 서버가 Brook Wssserver 일 때 TLS 지문을 선택하면 값은 다음과 같습니다. Chrome
--token = "": 토큰은 사용자의 신원을 나타냅니다. 16 진수로 인코딩 된 문자열. 서버에는 -userapi가 활성화되어 있어야합니다. 참고 : Brook Gui (OpenWrt 제외) 및 Tun2Brook에서만 지원합니다.
-udpoverStream : 서버가 Brook Quicserver 일 때 UDP Over Stream. 정상적인 상황에서는 Quic의 최대 데이터 그램 크기가 매우 작기 때문에이 매개 변수가 필요합니다. 참고 : 현재 Brook Cli와 Tun2Brook Suppport 만
--udpovertcp : 서버가 Brook Server 일 때 TCP의 UDP
-username, -u = "": Server가 Socks5 Server 일 때 사용자 이름
-WithOutbrookProtocol : Server가 Brook WSServer 또는 Brook WSSServer 또는 Brook Quicserver 인 경우 데이터는 Brook 프로토콜로 암호화되지 않습니다.
클라이언트를 실행하고 TCP 및 UDP를 지원하는 Brook 링크에 연결하십시오. SOCKS5 프록시를 시작할 수 있습니다.
-예 : 최소한의 사용 예를 보여줍니다
-http = "": HTTP 프록시 연결을 듣는 곳
-link, -l = "": Brook Link, $ Brook Link를 통해 얻을 수 있습니다.
-Socks5 = "": Socks5 연결 위치 (기본값 : 127.0.0.1:1080)
---socks5serverip = "": Socks5 서버 IP가 듣기 IP와 다른 경우에만
--tcptimeout = "": 시간 (s) (기본값 : 0)