proxy

package
v1.1.34 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 15, 2026 License: GPL-3.0 Imports: 15 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrorNotSSRLink             = errors.New("not a correct ssr link")
	ErrorPasswordParseFail      = errors.New("password parse failed")
	ErrorPathNotComplete        = errors.New("path not complete")
	ErrorMissingQuery           = errors.New("link missing query")
	ErrorProtocolParamParseFail = errors.New("protocol param parse failed")
	ErrorObfsParamParseFail     = errors.New("obfs param parse failed")
)
View Source
var (
	ErrorNotVmessLink          = errors.New("not a correct vmess link")
	ErrorVmessPayloadParseFail = errors.New("vmess link payload parse failed")
)
View Source
var ErrorNotSSLink = errors.New("not a correct ss link")

ErrorNotSSLink is an error type

View Source
var ErrorNotTrojanink = errors.New("not a correct trojan link")
View Source
var ErrorNotVlessLink = errors.New("not a correct vless link")

ErrorNotVlessLink 非法的 vless 链接

View Source
var ErrorTypeCanNotConvert = errors.New("type not support")
View Source
var SSCipherList = []string{
	"aes-128-gcm",
	"aes-192-gcm",
	"aes-256-gcm",
	"aes-128-cfb",
	"aes-192-cfb",
	"aes-256-cfb",
	"aes-128-ctr",
	"aes-192-ctr",
	"aes-256-ctr",
	"rc4-md5",
	"chacha20-ietf",
	"xchacha20",
	"chacha20-ietf-poly1305",
	"xchacha20-ietf-poly1305",
}
View Source
var SSRCipherList = []string{
	"aes-128-cfb",
	"aes-192-cfb",
	"aes-256-cfb",
	"aes-128-ctr",
	"aes-192-ctr",
	"aes-256-ctr",
	"aes-128-ofb",
	"aes-192-ofb",
	"aes-256-ofb",
	"des-cfb",
	"bf-cfb",
	"cast5-cfb",
	"rc4-md5",
	"chacha20-ietf",
	"salsa20",
	"camellia-128-cfb",
	"camellia-192-cfb",
	"camellia-256-cfb",
	"idea-cfb",
	"rc2-cfb",
	"seed-cfb",
}

Functions

func GrepSSLinkFromString

func GrepSSLinkFromString(text string) []string

GrepSSLinkFromString() remove web fuzz characters before a ss link

func GrepSSRLinkFromString

func GrepSSRLinkFromString(text string) []string

func GrepTrojanLinkFromString

func GrepTrojanLinkFromString(text string) []string

func GrepVlessLinkFromString added in v1.1.31

func GrepVlessLinkFromString(text string) []string

GrepVlessLinkFromString 从文本中抓取 vless 链接

func GrepVmessLinkFromString

func GrepVmessLinkFromString(text string) []string

func ToClashMap added in v1.1.22

func ToClashMap(p Proxy) map[string]interface{}

ToClashMap 将代理转换为 mihomo adapter.ParseProxy 所需的配置 map。 替代原先 String() → json.Unmarshal 的往返转换:健康检查、测速、中转检测 会对每个代理调用一次,消除大批量检测时的 JSON 序列化/反序列化开销。 键名与空值省略规则与各结构体的 json tag 完全一致,保证与旧行为等价 (mihomo 解码器按这些键读取,弱类型转换)。

Types

type Base

type Base struct {
	Name    string `yaml:"name" json:"name" gorm:"index"`
	Server  string `yaml:"server" json:"server" gorm:"index"`
	Type    string `yaml:"type" json:"type" gorm:"index"`
	Country string `yaml:"country,omitempty" json:"country,omitempty" gorm:"index"`
	Port    int    `yaml:"port" json:"port" gorm:"index"`
	UDP     bool   `yaml:"udp,omitempty" json:"udp,omitempty"`
	Useable bool   `yaml:"useable,omitempty" json:"useable,omitempty" gorm:"index"`
}

Base implements interface Proxy. It's the basic proxy struct. Vmess etc extends Base

func (*Base) AddBeforeName

func (b *Base) AddBeforeName(name string)

func (*Base) AddToName

func (b *Base) AddToName(name string)

func (*Base) BaseInfo

func (b *Base) BaseInfo() *Base

BaseInfo() get basic info struct of a proxy

func (*Base) Clone

func (b *Base) Clone() Base

Clone() returns a new basic proxy

func (*Base) SetCountry

func (b *Base) SetCountry(country string)

SetUseable() set Base info "Country" (string)

func (*Base) SetIP

func (b *Base) SetIP(ip string)

SetIP() to a proxy

func (*Base) SetName

func (b *Base) SetName(name string)

SetName() to a proxy

func (*Base) SetUseable

func (b *Base) SetUseable(useable bool)

SetUseable() set Base info "Useable" (true or false)

func (*Base) TypeName

func (b *Base) TypeName() string

TypeName() Get specific proxy type

type HTTP2Options

type HTTP2Options struct {
	Host []string `yaml:"host,omitempty" json:"host,omitempty"`
	Path string   `yaml:"path,omitempty" json:"path,omitempty"` // 暂只处理一个Path
}

type HTTPOptions

type HTTPOptions struct {
	Method  string              `yaml:"method,omitempty" json:"method,omitempty"`
	Path    []string            `yaml:"path,omitempty" json:"path,omitempty"`
	Headers map[string][]string `yaml:"headers,omitempty" json:"headers,omitempty"`
}

type Proxy

type Proxy interface {
	String() string
	ToClash() string
	ToSurge() string
	ToLoon() string
	ToQuanX() string
	Link() string
	Identifier() string
	SetName(name string)
	AddToName(name string)
	SetIP(ip string)
	TypeName() string // ss ssr vmess trojan
	BaseInfo() *Base
	Clone() Proxy
	SetUseable(useable bool)
	SetCountry(country string)
}

func ParseProxyFromClashProxy

func ParseProxyFromClashProxy(p map[string]interface{}) (proxy Proxy, err error)
func ParseProxyFromLink(link string) (p Proxy, err error)

type ProxyList

type ProxyList []Proxy

func (ProxyList) Clone

func (ps ProxyList) Clone() ProxyList

func (ProxyList) Deduplication

func (ps ProxyList) Deduplication() ProxyList

Deduplication by proxy identifier

func (ProxyList) Derive

func (ps ProxyList) Derive() ProxyList

Derive 将原有节点中的ss和ssr互相转换进行衍生

func (*ProxyList) Find added in v0.9.0

func (ps *ProxyList) Find(new Proxy) bool

func (ProxyList) Len

func (ps ProxyList) Len() int

sort排序使用

func (ProxyList) Less

func (ps ProxyList) Less(i, j int) bool

sort排序使用

func (ProxyList) NameAddCountry

func (ps ProxyList) NameAddCountry() ProxyList

func (ProxyList) NameAddIndex

func (ps ProxyList) NameAddIndex() ProxyList

func (ProxyList) NameAddTG

func (ps ProxyList) NameAddTG() ProxyList

func (ProxyList) NameClear

func (ps ProxyList) NameClear() ProxyList

func (ProxyList) NameReIndex

func (ps ProxyList) NameReIndex() ProxyList

func (ProxyList) Sort

func (ps ProxyList) Sort() ProxyList

func (ProxyList) Swap

func (ps ProxyList) Swap(i, j int)

sort排序使用

func (ProxyList) ToProxyMap added in v0.7.2

func (ps ProxyList) ToProxyMap() ProxyMap

func (ProxyList) TypeCounts added in v1.1.24

func (ps ProxyList) TypeCounts() (ss, ssr, vmess, trojan, vless int)

TypeCounts 单次遍历统计各类型数量(替代多次 TypeLen 的 O(4n) 扫描)

func (ProxyList) TypeLen

func (ps ProxyList) TypeLen(t string) int

func (*ProxyList) UniqAppendProxy

func (ps *ProxyList) UniqAppendProxy(new Proxy) ProxyList

Append an unique new proxy to original ProxyList

func (*ProxyList) UniqAppendProxyList

func (ps *ProxyList) UniqAppendProxyList(new ProxyList) ProxyList

Append unique new proxies to original ProxyList

func (*ProxyList) UniqAppendProxyList2 added in v0.7.2

func (ps *ProxyList) UniqAppendProxyList2(new ProxyList) ProxyList

type ProxyMap added in v0.7.2

type ProxyMap map[string]Proxy

func (ProxyMap) ToProxyList added in v0.7.2

func (mp ProxyMap) ToProxyList() ProxyList

func (ProxyMap) UniqAppendProxy added in v0.7.2

func (mp ProxyMap) UniqAppendProxy(p Proxy)

type Shadowsocks

type Shadowsocks struct {
	Base
	Password   string                 `yaml:"password" json:"password"`
	Cipher     string                 `yaml:"cipher" json:"cipher"`
	Plugin     string                 `yaml:"plugin,omitempty" json:"plugin,omitempty"`
	PluginOpts map[string]interface{} `yaml:"plugin-opts,omitempty" json:"plugin-opts,omitempty"`
}

Shadowsocks is a type of proxy

func Convert2SS

func Convert2SS(p Proxy) (ss *Shadowsocks, err error)

Convert2SS convert proxy to Shadowsocks if possible

func ParseSSLink(link string) (*Shadowsocks, error)

ParseSSLink() parses an ss link to ss proxy

func (Shadowsocks) Clone

func (ss Shadowsocks) Clone() Proxy

func (Shadowsocks) Identifier

func (ss Shadowsocks) Identifier() string

Identifier generates an unique identifier of one proxy

func (ss Shadowsocks) Link() (link string)

https://shadowsocks.org/en/config/quick-guide.html Link converts a ss proxy to string

func (Shadowsocks) String

func (ss Shadowsocks) String() string

func (Shadowsocks) ToClash

func (ss Shadowsocks) ToClash() string

ToClash converts proxy to clash proxy string

func (Shadowsocks) ToLoon

func (ss Shadowsocks) ToLoon() string

ToLoon converts proxy to loon proxy string

func (Shadowsocks) ToQuanX added in v1.1.33

func (ss Shadowsocks) ToQuanX() string

ToQuanX converts proxy to quanx string

func (Shadowsocks) ToSurge

func (ss Shadowsocks) ToSurge() string

ToSurge converts proxy to surge proxy string

type ShadowsocksR

type ShadowsocksR struct {
	Base
	Password      string `yaml:"password" json:"password"`
	Cipher        string `yaml:"cipher" json:"cipher"`
	Protocol      string `yaml:"protocol" json:"protocol"`
	ProtocolParam string `yaml:"protocol-param,omitempty" json:"protocol-param,omitempty"`
	Obfs          string `yaml:"obfs" json:"obfs"`
	ObfsParam     string `yaml:"obfs-param,omitempty" json:"obfs-param,omitempty"`
	Group         string `yaml:"group,omitempty" json:"group,omitempty"`
}

字段依据clash的配置设计

func Convert2SSR

func Convert2SSR(p Proxy) (ssr *ShadowsocksR, err error)

Convert2SS convert proxy to ShadowsocksR if possible

func ParseSSRLink(link string) (*ShadowsocksR, error)

func (ShadowsocksR) Clone

func (ssr ShadowsocksR) Clone() Proxy

func (ShadowsocksR) Identifier

func (ssr ShadowsocksR) Identifier() string

func (ShadowsocksR) String

func (ssr ShadowsocksR) String() string

func (ShadowsocksR) ToClash

func (ssr ShadowsocksR) ToClash() string

func (ShadowsocksR) ToLoon

func (ssr ShadowsocksR) ToLoon() string

func (ShadowsocksR) ToQuanX added in v1.1.33

func (ssr ShadowsocksR) ToQuanX() string

ToQuanX converts proxy to quanx string

func (ShadowsocksR) ToSurge

func (ssr ShadowsocksR) ToSurge() string

type Trojan

type Trojan struct {
	Base
	Password       string   `yaml:"password" json:"password"`
	ALPN           []string `yaml:"alpn,omitempty" json:"alpn,omitempty"`
	SNI            string   `yaml:"sni,omitempty" json:"sni,omitempty"`
	SkipCertVerify bool     `yaml:"skip-cert-verify,omitempty" json:"skip-cert-verify,omitempty"`
	UDP            bool     `yaml:"udp,omitempty" json:"udp,omitempty"`
}
func ParseTrojanLink(link string) (*Trojan, error)

func (Trojan) Clone

func (t Trojan) Clone() Proxy

func (Trojan) Identifier

func (t Trojan) Identifier() string

func (Trojan) String

func (t Trojan) String() string

func (Trojan) ToClash

func (t Trojan) ToClash() string

func (Trojan) ToLoon

func (t Trojan) ToLoon() string

func (Trojan) ToQuanX added in v1.1.33

func (t Trojan) ToQuanX() string

ToQuanX converts proxy to quanx string

func (Trojan) ToSurge

func (t Trojan) ToSurge() string

type Vless added in v1.1.31

type Vless struct {
	Base
	UUID           string `yaml:"uuid" json:"uuid"`
	Encryption     string `yaml:"encryption,omitempty" json:"encryption,omitempty"`
	Flow           string `yaml:"flow,omitempty" json:"flow,omitempty"`
	Network        string `yaml:"network,omitempty" json:"network,omitempty"`
	WSPath         string `yaml:"ws-path,omitempty" json:"ws-path,omitempty"`
	Host           string `yaml:"host,omitempty" json:"host,omitempty"`
	ServerName     string `yaml:"servername,omitempty" json:"servername,omitempty"`
	Fingerprint    string `yaml:"fingerprint,omitempty" json:"fingerprint,omitempty"`
	TLS            bool   `yaml:"tls,omitempty" json:"tls,omitempty"`
	SkipCertVerify bool   `yaml:"skip-cert-verify,omitempty" json:"skip-cert-verify,omitempty"`
	UDP            bool   `yaml:"udp,omitempty" json:"udp,omitempty"`
}

Vless 是 vless 协议代理

func ParseVlessLink(link string) (*Vless, error)

ParseVlessLink 解析 vless://uuid@host:port?...#name 链接

func (Vless) Clone added in v1.1.31

func (v Vless) Clone() Proxy

func (Vless) Identifier added in v1.1.31

func (v Vless) Identifier() string
func (v Vless) Link() (link string)

Link 生成 vless:// 链接

func (Vless) String added in v1.1.31

func (v Vless) String() string

func (Vless) ToClash added in v1.1.31

func (v Vless) ToClash() string

ToClash 输出 clash 配置(vless 使用 ws-opts 嵌套结构)

func (Vless) ToLoon added in v1.1.31

func (v Vless) ToLoon() string

ToLoon 输出 loon 配置

func (Vless) ToQuanX added in v1.1.33

func (v Vless) ToQuanX() string

ToQuanX converts proxy to quanx string

func (Vless) ToSurge added in v1.1.31

func (v Vless) ToSurge() string

ToSurge 输出 surge 配置

func (*Vless) UnmarshalJSON added in v1.1.31

func (v *Vless) UnmarshalJSON(data []byte) error

UnmarshalJSON 兼容 clash 配置的 ws-opts 嵌套结构: clash 配置里 ws 传输用 ws-opts:{path, headers:{Host}},而结构体字段是扁平的

type Vmess

type Vmess struct {
	Base
	UUID           string            `yaml:"uuid" json:"uuid"`
	AlterID        int               `yaml:"alterId" json:"alterId"`
	Cipher         string            `yaml:"cipher" json:"cipher"`
	Network        string            `yaml:"network,omitempty" json:"network,omitempty"`
	WSPath         string            `yaml:"ws-path,omitempty" json:"ws-path,omitempty"`
	ServerName     string            `yaml:"servername,omitempty" json:"servername,omitempty"`
	WSHeaders      map[string]string `yaml:"ws-headers,omitempty" json:"ws-headers,omitempty"`
	HTTPOpts       HTTPOptions       `yaml:"http-opts,omitempty" json:"http-opts,omitempty"`
	HTTP2Opts      HTTP2Options      `yaml:"h2-opts,omitempty" json:"h2-opts,omitempty"`
	TLS            bool              `yaml:"tls,omitempty" json:"tls,omitempty"`
	SkipCertVerify bool              `yaml:"skip-cert-verify,omitempty" json:"skip-cert-verify,omitempty"`
}
func ParseVmessLink(link string) (*Vmess, error)

func (Vmess) Clone

func (v Vmess) Clone() Proxy

func (Vmess) Identifier

func (v Vmess) Identifier() string
func (v Vmess) Link() (link string)

func (Vmess) String

func (v Vmess) String() string

func (Vmess) ToClash

func (v Vmess) ToClash() string

func (Vmess) ToLoon

func (v Vmess) ToLoon() string

func (Vmess) ToQuanX added in v1.1.33

func (v Vmess) ToQuanX() string

ToQuanX converts proxy to quanx string

func (Vmess) ToSurge

func (v Vmess) ToSurge() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL