Documentation
¶
Index ¶
- Constants
- Variables
- func SetConfig(file string)
- func SetHomeDir(root string)
- type AdapterType
- type Chain
- type Conn
- type ConnContext
- type Connection
- type DNSMode
- type DelayHistory
- type Inbound
- type InboundType
- type Listener
- type Metadata
- type NetWork
- type PacketConn
- type PacketConnContext
- type PlainContext
- type Port
- type Proxy
- type ProxyAdapter
- type Rule
- type RuleConfig
- type RuleType
- type Type
- type UDPPacket
Constants ¶
const ( DefaultTCPTimeout = 5 * time.Second DefaultUDPTimeout = DefaultTCPTimeout DefaultTLSTimeout = DefaultTCPTimeout )
const ( TCP NetWork = iota UDP HTTP Type = iota HTTPCONNECT SOCKS4 SOCKS5 REDIR TPROXY TUNNEL )
Socks addr type
const Name = "clash"
Variables ¶
var ( Version = "unknown version" BuildTime = "unknown time" )
var DNSModeMapping = map[string]DNSMode{ DNSNormal.String(): DNSNormal, DNSFakeIP.String(): DNSFakeIP, }
DNSModeMapping is a mapping for EnhancedMode enum
var Path = func() *path { homeDir, err := os.UserHomeDir() if err != nil { homeDir, _ = os.Getwd() } homeDir = P.Join(homeDir, ".config", Name) return &path{homeDir: homeDir, configFile: "config.yaml"} }()
Path is used to get the configuration path
Functions ¶
func SetConfig ¶ added in v0.17.0
func SetConfig(file string)
SetConfig is used to set the configuration file
func SetHomeDir ¶ added in v0.8.0
func SetHomeDir(root string)
SetHomeDir is used to set the configuration path
Types ¶
type AdapterType ¶ added in v0.5.0
type AdapterType int
AdapterType is enum of adapter type
const ( Direct AdapterType = iota Reject Shadowsocks ShadowsocksR Snell Socks5 Http Vmess Trojan Relay Selector Fallback URLTest LoadBalance )
Adapter Type
func (AdapterType) String ¶ added in v0.5.0
func (at AdapterType) String() string
type Conn ¶ added in v0.16.0
type Conn interface {
net.Conn
Connection
}
type ConnContext ¶ added in v1.4.0
type ConnContext interface {
PlainContext
Metadata() *Metadata
Conn() net.Conn
}
type Connection ¶ added in v0.16.0
type Connection interface {
Chains() Chain
AppendToChains(adapter ProxyAdapter)
}
type DNSMode ¶ added in v1.8.0
type DNSMode int
func (DNSMode) MarshalJSON ¶ added in v1.8.0
MarshalJSON serialize EnhancedMode with json
func (DNSMode) MarshalYAML ¶ added in v1.8.0
MarshalYAML serialize EnhancedMode with yaml
func (*DNSMode) UnmarshalJSON ¶ added in v1.8.0
UnmarshalJSON unserialize EnhancedMode with json
type DelayHistory ¶ added in v0.13.0
type InboundType ¶ added in v1.18.0
type InboundType string
const ( InboundTypeSocks InboundType = "socks" InboundTypeRedir InboundType = "redir" InboundTypeTproxy InboundType = "tproxy" InboundTypeHTTP InboundType = "http" InboundTypeMixed InboundType = "mixed" )
type Metadata ¶ added in v0.8.0
type Metadata struct {
NetWork NetWork `json:"network"`
Type Type `json:"type"`
SrcIP net.IP `json:"sourceIP"`
DstIP net.IP `json:"destinationIP"`
SrcPort Port `json:"sourcePort"`
DstPort Port `json:"destinationPort"`
Host string `json:"host"`
DNSMode DNSMode `json:"dnsMode"`
ProcessPath string `json:"processPath"`
SpecialProxy string `json:"specialProxy"`
OriginDst netip.AddrPort `json:"-"`
}
Metadata is used to store connection address
func (*Metadata) Pure ¶ added in v1.8.0
Pure is used to solve unexpected behavior when dialing proxy connection in DNSMapping mode.
func (*Metadata) RemoteAddress ¶ added in v0.16.0
func (*Metadata) SourceAddress ¶ added in v0.18.0
type PacketConn ¶ added in v0.16.0
type PacketConn interface {
net.PacketConn
Connection
}
type PacketConnContext ¶ added in v1.4.0
type PacketConnContext interface {
PlainContext
Metadata() *Metadata
PacketConn() net.PacketConn
}
type PlainContext ¶ added in v1.4.0
type PlainContext interface {
ID() uuid.UUID
}
type Port ¶ added in v1.18.0
type Port uint16
Port is used to compatible with old version
func (Port) MarshalJSON ¶ added in v1.18.0
type Proxy ¶
type Proxy interface {
ProxyAdapter
Alive() bool
DelayHistory() []DelayHistory
LastDelay() uint16
URLTest(ctx context.Context, url string) (uint16, uint16, error)
// Deprecated: use DialContext instead.
Dial(metadata *Metadata) (Conn, error)
// Deprecated: use DialPacketConn instead.
DialUDP(metadata *Metadata) (PacketConn, error)
}
type ProxyAdapter ¶
type ProxyAdapter interface {
Name() string
Type() AdapterType
Addr() string
SupportUDP() bool
MarshalJSON() ([]byte, error)
// StreamConn wraps a protocol around net.Conn with Metadata.
//
// Examples:
// conn, _ := net.DialContext(context.Background(), "tcp", "host:port")
// conn, _ = adapter.StreamConn(conn, metadata)
//
// It returns a C.Conn with protocol which start with
// a new session (if any)
StreamConn(c net.Conn, metadata *Metadata) (net.Conn, error)
// DialContext return a C.Conn with protocol which
// contains multiplexing-related reuse logic (if any)
DialContext(ctx context.Context, metadata *Metadata, opts ...dialer.Option) (Conn, error)
ListenPacketContext(ctx context.Context, metadata *Metadata, opts ...dialer.Option) (PacketConn, error)
// Unwrap extracts the proxy from a proxy-group. It returns nil when nothing to extract.
Unwrap(metadata *Metadata) Proxy
}
type RuleConfig ¶ added in v1.18.0
type RuleConfig string
Rule Config Type String represents a rule type in configuration files.
const ( RuleConfigDomain RuleConfig = "DOMAIN" RuleConfigDomainSuffix RuleConfig = "DOMAIN-SUFFIX" RuleConfigDomainKeyword RuleConfig = "DOMAIN-KEYWORD" RuleConfigGeoIP RuleConfig = "GEOIP" RuleConfigIPCIDR RuleConfig = "IP-CIDR" RuleConfigIPCIDR6 RuleConfig = "IP-CIDR6" RuleConfigSrcIPCIDR RuleConfig = "SRC-IP-CIDR" RuleConfigSrcPort RuleConfig = "SRC-PORT" RuleConfigDstPort RuleConfig = "DST-PORT" RuleConfigInboundPort RuleConfig = "INBOUND-PORT" RuleConfigProcessName RuleConfig = "PROCESS-NAME" RuleConfigProcessPath RuleConfig = "PROCESS-PATH" RuleConfigIPSet RuleConfig = "IPSET" RuleConfigRuleSet RuleConfig = "RULE-SET" RuleConfigScript RuleConfig = "SCRIPT" RuleConfigMatch RuleConfig = "MATCH" )
type RuleType ¶
type RuleType int
type UDPPacket ¶ added in v0.17.0
type UDPPacket interface {
// Data get the payload of UDP Packet
Data() []byte
// WriteBack writes the payload with source IP/Port equals addr
// - variable source IP/Port is important to STUN
// - if addr is not provided, WriteBack will write out UDP packet with SourceIP/Port equals to original Target,
// this is important when using Fake-IP.
WriteBack(b []byte, addr net.Addr) (n int, err error)
// Drop call after packet is used, could recycle buffer in this function.
Drop()
// LocalAddr returns the source IP/Port of packet
LocalAddr() net.Addr
}
UDPPacket contains the data of UDP packet, and offers control/info of UDP packet's source