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 DNSPrefer
- type DelayHistory
- type DelayHistoryStoreType
- type Dialer
- type EBpf
- type Group
- type HTTPVersion
- type InboundConfig
- type InboundListener
- type Listener
- type Metadata
- func (m *Metadata) AddrPort() netip.AddrPort
- func (m *Metadata) AddrType() int
- func (m *Metadata) Pure() *Metadata
- func (m *Metadata) RemoteAddress() string
- func (m *Metadata) Resolved() bool
- func (m *Metadata) RuleHost() string
- func (m *Metadata) SetRemoteAddr(addr net.Addr) error
- func (m *Metadata) SetRemoteAddress(rawAddress string) error
- func (m *Metadata) SourceAddrPort() netip.AddrPort
- func (m *Metadata) SourceAddress() string
- func (m *Metadata) SourceDetail() string
- func (m *Metadata) SourceValid() bool
- func (m *Metadata) String() string
- func (m *Metadata) UDPAddr() *net.UDPAddr
- func (m *Metadata) Valid() bool
- type MultiAddrListener
- type NatTable
- type NetWork
- type PacketAdapter
- type PacketConn
- type PacketConnContext
- type PlainContext
- type Proxy
- type ProxyAdapter
- type ProxyState
- type Rule
- type RuleGeoIP
- type RuleGeoSite
- type RuleGroup
- type RuleType
- type TUNStack
- type Tunnel
- type Type
- type UDPPacket
- type UDPPacketInAddr
- type WriteBack
- type WriteBackProxy
Constants ¶
const ( DefaultTCPTimeout = dialer.DefaultTCPTimeout DefaultUDPTimeout = dialer.DefaultUDPTimeout DefaultDropTime = 12 * DefaultTCPTimeout DefaultTLSTimeout = DefaultTCPTimeout DefaultTestURL = "https://www.gstatic.com/generate_204" )
const ( BpfFSPath = "/sys/fs/bpf/mat" TcpAutoRedirPort = 't'<<8 | 'r'<<0 MatTrafficMark = 'c'<<24 | 'l'<<16 | 't'<<8 | 'm'<<0 )
const Name = "mat"
Variables ¶
var ( ASNEnable bool GeodataMode bool GeoAutoUpdate bool GeoUpdateInterval int GeoIpUrl string MmdbUrl string GeoSiteUrl string ASNUrl string )
var ( GeositeName = "GeoSite.dat" GeoipName = "GeoIP.dat" ASNName = "ASN.mmdb" )
var ( Meta = true Version = "1.10.0" BuildTime = "unknown time" MatName = "mat" )
var DNSModeMapping = map[string]DNSMode{ DNSNormal.String(): DNSNormal, DNSFakeIP.String(): DNSFakeIP, DNSMapping.String(): DNSMapping, }
DNSModeMapping is a mapping for EnhancedMode enum
var ErrNotSupport = errors.New("no support")
var Path = func() *path { homeDir, err := os.UserHomeDir() if err != nil { homeDir, _ = os.Getwd() } allowUnsafePath, _ := strconv.ParseBool(os.Getenv("SKIP_SAFE_PATH_CHECK")) homeDir = P.Join(homeDir, ".config", Name) if _, err = os.Stat(homeDir); err != nil { if configHome, ok := os.LookupEnv("XDG_CONFIG_HOME"); ok { homeDir = P.Join(configHome, Name) } } return &path{homeDir: homeDir, configFile: "config.yaml", allowUnsafePath: allowUnsafePath} }()
Path is used to get the configuration path
on Unix systems, `$HOME/.config/mat`. on Windows, `%USERPROFILE%/.config/mat`.
var StackTypeMapping = map[string]TUNStack{ strings.ToLower(TunGvisor.String()): TunGvisor, strings.ToLower(TunSystem.String()): TunSystem, strings.ToLower(TunMixed.String()): TunMixed, }
var (
UA string
)
Functions ¶
func SetConfig ¶ added in v1.18.8
func SetConfig(file string)
SetConfig is used to set the configuration file
func SetHomeDir ¶ added in v1.18.8
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 RejectDrop Compatible Pass Dns Relay Selector Fallback URLTest LoadBalance Shadowsocks ShadowsocksR Snell Socks5 Http Vmess Vless Trojan Hysteria Hysteria2 WireGuard Tuic Ssh )
Adapter Type
func (AdapterType) String ¶ added in v0.5.0
func (at AdapterType) String() string
type Conn ¶ added in v1.18.8
type Conn interface { N.ExtendedConn Connection }
type ConnContext ¶ added in v1.18.8
type ConnContext interface { PlainContext Metadata() *Metadata Conn() *N.BufferedConn }
type Connection ¶ added in v1.18.8
type Connection interface { Chains() Chain AppendToChains(adapter ProxyAdapter) RemoteDestination() string }
type DNSMode ¶ added in v1.18.8
type DNSMode int
func (DNSMode) MarshalJSON ¶ added in v1.18.8
MarshalJSON serialize EnhancedMode with json
func (DNSMode) MarshalYAML ¶ added in v1.18.8
MarshalYAML serialize EnhancedMode with yaml
func (*DNSMode) UnmarshalJSON ¶ added in v1.18.8
UnmarshalJSON unserialize EnhancedMode with json
type DelayHistory ¶ added in v1.18.8
type DelayHistoryStoreType ¶ added in v1.18.8
type DelayHistoryStoreType int
type HTTPVersion ¶ added in v1.18.8
type HTTPVersion string
const ( // HTTPVersion11 is HTTP/1.1. HTTPVersion11 HTTPVersion = "http/1.1" // HTTPVersion2 is HTTP/2. HTTPVersion2 HTTPVersion = "h2" // HTTPVersion3 is HTTP/3. HTTPVersion3 HTTPVersion = "h3" )
type InboundConfig ¶ added in v1.18.8
type InboundConfig interface { Name() string Equal(config InboundConfig) bool }
type InboundListener ¶ added in v1.18.8
type Metadata ¶ added in v1.18.8
type Metadata struct { NetWork NetWork `json:"network"` Type Type `json:"type"` SrcIP netip.Addr `json:"sourceIP"` DstIP netip.Addr `json:"destinationIP"` DstGeoIP []string `json:"destinationGeoIP"` // can be nil if never queried, empty slice if got no result DstIPASN string `json:"destinationIPASN"` SrcPort uint16 `json:"sourcePort,string"` // `,string` is used to compatible with old version json output DstPort uint16 `json:"destinationPort,string"` // `,string` is used to compatible with old version json output InIP netip.Addr `json:"inboundIP"` InPort uint16 `json:"inboundPort,string"` // `,string` is used to compatible with old version json output InName string `json:"inboundName"` InUser string `json:"inboundUser"` Host string `json:"host"` DNSMode DNSMode `json:"dnsMode"` Uid uint32 `json:"uid"` Process string `json:"process"` ProcessPath string `json:"processPath"` SpecialProxy string `json:"specialProxy"` SpecialRules string `json:"specialRules"` RemoteDst string `json:"remoteDestination"` DSCP uint8 `json:"dscp"` RawSrcAddr net.Addr `json:"-"` RawDstAddr net.Addr `json:"-"` // Only domain rule SniffHost string `json:"sniffHost"` }
Metadata is used to store connection address
func (*Metadata) Pure ¶ added in v1.18.8
Pure is used to solve unexpected behavior when dialing proxy connection in DNSMapping mode.
func (*Metadata) RemoteAddress ¶ added in v1.18.8
func (*Metadata) SetRemoteAddr ¶ added in v1.18.8
func (*Metadata) SetRemoteAddress ¶ added in v1.18.8
func (*Metadata) SourceAddrPort ¶ added in v1.18.8
func (*Metadata) SourceAddress ¶ added in v1.18.8
func (*Metadata) SourceDetail ¶ added in v1.18.8
func (*Metadata) SourceValid ¶ added in v1.18.8
type MultiAddrListener ¶ added in v1.18.8
type NatTable ¶ added in v1.18.8
type NatTable interface { Set(key string, e PacketConn, w WriteBackProxy) Get(key string) (PacketConn, WriteBackProxy) GetOrCreateLock(key string) (*sync.Cond, bool) Delete(key string) DeleteLock(key string) GetForLocalConn(lAddr, rAddr string) *net.UDPConn AddForLocalConn(lAddr, rAddr string, conn *net.UDPConn) bool RangeForLocalConn(lAddr string, f func(key string, value *net.UDPConn) bool) GetOrCreateLockForLocalConn(lAddr string, key string) (*sync.Cond, bool) DeleteForLocalConn(lAddr, key string) DeleteLockForLocalConn(lAddr, key string) }
type PacketAdapter ¶ added in v1.18.8
PacketAdapter is a UDP Packet adapter for socks/redir/tun
func NewPacketAdapter ¶ added in v1.18.8
func NewPacketAdapter(packet UDPPacket, metadata *Metadata) PacketAdapter
type PacketConn ¶ added in v1.18.8
type PacketConn interface { N.EnhancePacketConn Connection }
type PacketConnContext ¶ added in v1.18.8
type PacketConnContext interface { PlainContext Metadata() *Metadata PacketConn() net.PacketConn }
type PlainContext ¶ added in v1.18.8
type PlainContext interface {
ID() uuid.UUID
}
type Proxy ¶
type Proxy interface { ProxyAdapter AliveForTestUrl(url string) bool DelayHistory() []DelayHistory ExtraDelayHistories() map[string]ProxyState LastDelayForTestUrl(url string) uint16 URLTest(ctx context.Context, url string, expectedStatus utils.IntRanges[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 SupportXUDP() bool SupportTFO() bool MarshalJSON() ([]byte, error) // Deprecated: use DialContextWithDialer and ListenPacketWithDialer instead. // StreamConn wraps a protocol around net.Conn with Metadata. // // Examples: // conn, _ := net.DialContext(context.Background(), "tcp", "host:port") // conn, _ = adapter.StreamConnContext(context.Background(), conn, metadata) // // It returns a C.Conn with protocol which start with // a new session (if any) StreamConnContext(ctx context.Context, 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) // SupportUOT return UDP over TCP support SupportUOT() bool SupportWithDialer() NetWork DialContextWithDialer(ctx context.Context, dialer Dialer, metadata *Metadata) (Conn, error) ListenPacketWithDialer(ctx context.Context, dialer Dialer, metadata *Metadata) (PacketConn, error) // IsL3Protocol return ProxyAdapter working in L3 (tell dns module not pass the domain to avoid loopback) IsL3Protocol(metadata *Metadata) bool // Unwrap extracts the proxy from a proxy-group. It returns nil when nothing to extract. Unwrap(metadata *Metadata, touch bool) Proxy }
type ProxyState ¶ added in v1.18.8
type ProxyState struct { Alive bool `json:"alive"` History []DelayHistory `json:"history"` }
type RuleGeoIP ¶ added in v1.18.8
type RuleGeoIP interface {
GetIPMatcher() *router.GeoIPMatcher
}
type RuleGeoSite ¶ added in v1.18.8
type RuleGeoSite interface {
GetDomainMatcher() router.DomainMatcher
}
type RuleType ¶
type RuleType int
const ( Domain RuleType = iota DomainSuffix DomainKeyword DomainRegex GEOSITE GEOIP SrcGEOIP IPASN SrcIPASN IPCIDR SrcIPCIDR IPSuffix SrcIPSuffix SrcPort DstPort InPort DSCP InUser InName InType ProcessName ProcessPath ProcessNameRegex ProcessPathRegex RuleSet Network Uid SubRules MATCH AND OR NOT )
Rule Type
type TUNStack ¶ added in v1.18.8
type TUNStack int
func (TUNStack) MarshalJSON ¶ added in v1.18.8
MarshalJSON serialize TUNStack with json
func (TUNStack) MarshalYAML ¶ added in v1.18.8
MarshalYAML serialize TUNStack with yaml
func (*TUNStack) UnmarshalJSON ¶ added in v1.18.8
UnmarshalJSON unserialize TUNStack with json
type UDPPacket ¶ added in v1.18.8
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 // 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