Updated at: 2024-07-25
Brook GUI 会在不同的时机向脚本传递不同的_全局变量_,脚本只需要将处理结果赋值给全局变量 out
。
在说图形客户端之前,先说一下命令行客户端 brook
。我们知道,在你部署好服务端以后,可以用命令行客户端 brook
在本地创建一个 socks5 代理或 http 代理,然后需要在系统代理处或浏览器代理处配置一下以使用这个代理。但是:
关于 socks5 和 http 代理的具体原理可以看这篇文章。
图形客户端不使用 socks5 和 http 代理模式,所以不会出现有些软件不走系统代理的情况,而是使用虚拟网卡接管整个系统的网络,当然也包含基于 UDP 的 http3。并且 Brook 允许我们以编程的方式控制网络请求,所以我们有必要的知道基础的网络请求的知识。
注意:当我们谈到地址时是指包含端口的地址,比如域名地址:
google.com:443
,比如 IP 地址:8.8.8.8:53
google.com:443
8.8.8.8:53
发起一个网络请求,以查询 google.com
的 IPgoogle.com
的 IP 比如 1.2.3.4
给 App1.2.3.4:443
1.2.3.4:443
发起网络请求以上实际上 App 共发起了两个网络请求,一个是发往 IP 地址: 8.8.8.8:53
,另一个是发往 IP 地址:1.2.3.4:443
。也就说域名实际上只是 IP 的别名,一定要获取到域名的 IP 才能建立连接。
Brook 有一个 Fake DNS 功能,它可以解析出 App 向系统 DNS 发起的查询请求里的域名,来决定如何向 App 响应。
google.com:443
8.8.8.8:53
发起一个网络请求,以查询 google.com
的 IP8.8.8.8:53
发起网络请求。此时会触发 in_dnsquery
变量,并携带 domain
等240.0.0.1
240.0.0.1:443
240.0.0.1:443
发起网络请求240.0.0.1:443
发起网络请求,Brook 客户端发现这是一个虚假 IP,会将虚假 IP 地址转换回域名地址 google.com:443
。此时会触发 in_address
变量,并携带 domainaddress
等google.com:443
送往 Brook Servergoogle.com
的 IP,比如得到 1.2.3.4
1.2.3.4:443
1.2.3.4:443
发起一个网络请求,并将数据返回给 Brook 客户端但如果有以下情况,则不会/不能解析出域名,即 Brook 客户端全程不会/不能知道是什么域名:
如何避免 Fake DNS 不生效,请查看这篇文章。
google.com:443
8.8.8.8:53
发起一个网络请求,以查询 google.com
的 IP8.8.8.8:53
发起网络请求。此时会触发 in_address
变量,并携带 ipaddress
等8.8.8.8:53
送往 Brook Server8.8.8.8:53
发起一个网络请求,并将查询结果比如 1.2.3.4
返回给 Brook 客户端1.2.3.4:443
1.2.3.4:443
发起网络请求1.2.3.4:443
发起网络请求。此时会触发 in_address
变量,并携带 ipaddress
等1.2.3.4:443
送往 Brook Server1.2.3.4:443
发起一个网络请求,并将数据返回给 Brook 客户端google.com:443
8.8.8.8:443
发起一个网络请求,以查询 google.com
的 IP8.8.8.8:443
发起网络请求。此时会触发 in_address
变量,并携带 ipaddress
等8.8.8.8:443
送往 Brook Server8.8.8.8:443
发起一个网络请求;并将查询结果比如 1.2.3.4
返回给 Brook 客户端1.2.3.4:443
1.2.3.4:443
发起网络请求1.2.3.4:443
发起网络请求。此时会触发 in_address
变量,并携带 ipaddress
等1.2.3.4:443
送往 Brook Server1.2.3.4:443
发起一个网络请求,并将数据返回给 Brook 客户端in_brooklinks
变量时:in_dnsquery
变量时,可以按需处理,比如:in_address
变量时,可以按需处理,比如:in_httprequest
和 in_httpresponse
in_httprequest
变量时,可以按需处理,比如:in_httpresponse
变量时,可以按需处理,比如:更详细的信息请查看 Brook 文档:https://brook.app