Files
v2ray_simple/tlsLayer/const.go
hahahrfool e664b9740e feat:添加回落和分流功能.
创建新子包netLayer, 将 proxy.Addr改为 netLayer.Addr
修订文档

RoutePolicy等分流机制也放到 netLayer

引入github.com/oschwald/maxminddb-golang 依赖,支持使用 GeoLite2-Country.mmdb 来进行ip分流

另外注意它默认的版本对于 golang.org/x/sys 包的依赖太老了,会导致go1.18中编译不通过,我在
go.mod 文件中新增了下面代码,就能通过编译了

```
require (
	golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86 // indirect
)
```

verysimple的可执行文件的相同目录下,必须有该mmdb文件才能够开启ip分流功能

新配置方式:配置文件新加一行 "route":{ "mycountry":"CN" }

mycountry指定的国家的ip会被直连发送,其他地址ip会被发送到代理.

新配置方式,回落,直接在 local 项的 url 的 query部分添加 fallback=:80, 或者 fallback=127.0.0.1:80
即可 回落到指定端口.

将tls_test重新挪动到tlsLayer包中

在main.go中添加了 logLevel变量,并且把关于配置文件的部分挪动到 config.go

出了上面的分流和回落以外,还新增支持了 #xxx 的尾缀,用于配置该url的tag. tag在未来会被用于精准分流

Makefile中新增了 PACK 参数用于编译出 打包版的发行包;可选 tag=embed_geoip 参数用于将mmdb.tgz文件内置到可执行程序里

同时,我开始直接使用go1.18编译本项目,期待性能提升,因为这是新发布的版本,看了介绍据说对 mac m1有20%的提升.
2022-03-16 19:28:26 +08:00

83 lines
3.9 KiB
Go

/*
Package tlsLayer 提供tls流量的基本探测功能
*/
package tlsLayer
var etStrMap map[int]string
const (
et_server_name = 0
et_max_fragment_length = 1
et_status_request = 5
et_supported_groups = 10
et_signature_algorithms = 13
et_use_srtp = 14
et_heartbeat = 15
et_application_layer_protocol_negotiation = 16
et_signed_certificate_timestamp = 18
et_client_certificate_type = 19
et_server_certificate_type = 20
et_padding = 21
et_pre_shared_key = 41
et_early_data = 42
et_supported_versions = 43
et_cookie = 44
et_psk_key_exchange_modes = 45
et_certificate_authorities = 47
et_oid_filters = 48
et_post_handshake_auth = 49
et_signature_algorithms_cert = 50
et_key_share = 51
)
const (
etstr_server_name = "server_name "
etstr_max_fragment_length = "max_fragment_length"
etstr_status_request = "status_request"
etstr_supported_groups = "supported_groups"
etstr_signature_algorithms = "signature_algorithms"
etstr_use_srtp = "use_srtp"
etstr_heartbeat = "heartbeat"
etstr_application_layer_protocol_negotiation = "application_layer_protocol_negotiation"
etstr_signed_certificate_timestamp = "signed_certificate_timestamp"
etstr_client_certificate_type = "client_certificate_type"
etstr_server_certificate_type = "server_certificate_type"
etstr_padding = "padding"
etstr_pre_shared_key = "pre_shared_key"
etstr_early_data = "early_data"
etstr_supported_versions = "supported_versions"
etstr_cookie = "cookie"
etstr_psk_key_exchange_modes = "psk_key_exchange_modes"
etstr_certificate_authorities = "certificate_authorities"
etstr_oid_filters = "oid_filters"
etstr_post_handshake_auth = "post_handshake_auth"
etstr_signature_algorithms_cert = "signature_algorithms_cert"
etstr_key_share = "key_share"
)
func init() {
etStrMap = make(map[int]string)
etStrMap[et_server_name] = etstr_server_name
etStrMap[et_max_fragment_length] = etstr_max_fragment_length
etStrMap[et_status_request] = etstr_status_request
etStrMap[et_supported_groups] = etstr_supported_groups
etStrMap[et_signature_algorithms] = etstr_signature_algorithms
etStrMap[et_use_srtp] = etstr_use_srtp
etStrMap[et_heartbeat] = etstr_heartbeat
etStrMap[et_application_layer_protocol_negotiation] = etstr_application_layer_protocol_negotiation
etStrMap[et_signed_certificate_timestamp] = etstr_signed_certificate_timestamp
etStrMap[et_client_certificate_type] = etstr_client_certificate_type
etStrMap[et_server_certificate_type] = etstr_server_certificate_type
etStrMap[et_padding] = etstr_padding
etStrMap[et_pre_shared_key] = etstr_pre_shared_key
etStrMap[et_early_data] = etstr_early_data
etStrMap[et_supported_versions] = etstr_supported_versions
etStrMap[et_cookie] = etstr_cookie
etStrMap[et_psk_key_exchange_modes] = etstr_psk_key_exchange_modes
etStrMap[et_certificate_authorities] = etstr_certificate_authorities
etStrMap[et_oid_filters] = etstr_oid_filters
etStrMap[et_post_handshake_auth] = etstr_post_handshake_auth
etStrMap[et_signature_algorithms_cert] = etstr_signature_algorithms_cert
etStrMap[et_key_share] = etstr_key_share
}