netapi

package
v0.3.3 Latest Latest
Warning

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

Go to latest
Published: Jan 27, 2024 License: MIT Imports: 19 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrBlocked = errors.New("BLOCK")

Functions

func Get

func Get[T any](ctx context.Context, k any) (t T, _ bool)

func GetDefault

func GetDefault[T any](ctx context.Context, k any, Default T) T

func MergeBufioReaderConn added in v0.3.3

func MergeBufioReaderConn(c net.Conn, r *bufio.Reader) (net.Conn, error)

func NewBlockError

func NewBlockError(network statistic.Type, hostname string) error

func NewMultipleReaderConn

func NewMultipleReaderConn(c net.Conn, r io.Reader) net.Conn

func NewPrefixBytesConn

func NewPrefixBytesConn(c net.Conn, prefix ...*pool.Bytes) net.Conn

func NewStore

func NewStore(ctx context.Context) context.Context

func PaseNetwork

func PaseNetwork(s string) statistic.Type

Types

type Address

type Address interface {
	// Hostname return hostname of address, eg: www.example.com, 127.0.0.1, ff::ff
	Hostname() string
	// IP return net.IP, if address is ip else resolve the domain and return one of ips
	IP(context.Context) (net.IP, error)
	AddrPort(context.Context) (netip.AddrPort, error)
	UDPAddr(context.Context) (*net.UDPAddr, error)
	TCPAddr(context.Context) (*net.TCPAddr, error)
	// Port return port of address
	Port() Port
	// Type return type of address, domain or ip
	Type() Type
	NetworkType() statistic.Type

	net.Addr

	// WithResolver will use call IP(), IPHost(), UDPAddr(), TCPAddr()
	// return the current resolver is applied, if can't apply return false
	WithResolver(_ Resolver, canCover bool) bool
	PreferIPv6(b bool)
	// OverrideHostname clone address(exclude Values) and change hostname
	OverrideHostname(string) Address
	OverridePort(Port) Address
}
var EmptyAddr Address = &emptyAddr{}

func ParseAddrPort

func ParseAddrPort(net statistic.Type, addrPort netip.AddrPort) Address

func ParseAddress

func ParseAddress(network statistic.Type, addr string) (ad Address, _ error)

func ParseAddressPort

func ParseAddressPort(network statistic.Type, addr string, port Port) (ad Address)

func ParseIPAddr

func ParseIPAddr(ad *net.IPAddr) Address

func ParseSysAddr

func ParseSysAddr(ad net.Addr) (Address, error)

func ParseTCPAddress

func ParseTCPAddress(ad *net.TCPAddr) Address

func ParseUDPAddr

func ParseUDPAddr(ad *net.UDPAddr) Address

func ParseUnixAddr

func ParseUnixAddr(ad *net.UnixAddr) Address

func ReadFrom added in v0.3.3

func ReadFrom(pc net.PacketConn) (*pool.Bytes, Address, error)

type ChannelListener

type ChannelListener struct {
	// contains filtered or unexported fields
}

func NewChannelListener

func NewChannelListener(addr net.Addr) *ChannelListener

func (*ChannelListener) Accept

func (c *ChannelListener) Accept() (net.Conn, error)

func (*ChannelListener) Addr

func (c *ChannelListener) Addr() net.Addr

func (*ChannelListener) Close

func (c *ChannelListener) Close() error

func (*ChannelListener) NewConn

func (c *ChannelListener) NewConn(conn net.Conn)

type CurrentKey

type CurrentKey struct{}

type DNSErrCode added in v0.3.3

type DNSErrCode struct {
	// contains filtered or unexported fields
}

func NewDNSErrCode added in v0.3.3

func NewDNSErrCode(code dnsmessage.RCode) *DNSErrCode

func (*DNSErrCode) As added in v0.3.3

func (d *DNSErrCode) As(err any) bool

func (*DNSErrCode) Code added in v0.3.3

func (d *DNSErrCode) Code() dnsmessage.RCode

func (DNSErrCode) Error added in v0.3.3

func (d DNSErrCode) Error() string

type DNSHandler

type DNSHandler interface {
	Server
	HandleUDP(context.Context, net.PacketConn) error
	HandleTCP(context.Context, net.Conn) error
	Do(context.Context, *pool.Bytes, func([]byte) error) error
}
var EmptyDNSServer DNSHandler = &emptyHandler{}

type DestinationKey

type DestinationKey struct{}

func (DestinationKey) String

func (DestinationKey) String() string

type DomainAddr

type DomainAddr struct {
	// contains filtered or unexported fields
}

func (*DomainAddr) AddrPort

func (d *DomainAddr) AddrPort(ctx context.Context) (netip.AddrPort, error)

func (*DomainAddr) Hostname

func (d *DomainAddr) Hostname() string

func (*DomainAddr) IP

func (d *DomainAddr) IP(ctx context.Context) (net.IP, error)

func (DomainAddr) Network

func (d DomainAddr) Network() string

func (DomainAddr) NetworkType

func (d DomainAddr) NetworkType() statistic.Type

func (*DomainAddr) OverrideHostname

func (d *DomainAddr) OverrideHostname(s string) Address

func (*DomainAddr) OverridePort

func (d *DomainAddr) OverridePort(p Port) Address

func (*DomainAddr) Port

func (d *DomainAddr) Port() Port

func (DomainAddr) PreferIPv6

func (d DomainAddr) PreferIPv6(b bool)

func (DomainAddr) Resolver

func (d DomainAddr) Resolver() Resolver

func (*DomainAddr) String

func (d *DomainAddr) String() string

func (*DomainAddr) TCPAddr

func (d *DomainAddr) TCPAddr(ctx context.Context) (*net.TCPAddr, error)

func (*DomainAddr) Type

func (d *DomainAddr) Type() Type

func (*DomainAddr) UDPAddr

func (d *DomainAddr) UDPAddr(ctx context.Context) (*net.UDPAddr, error)

func (DomainAddr) WithResolver

func (d DomainAddr) WithResolver(resolver Resolver, canCover bool) bool

type DropResolver added in v0.3.3

type DropResolver struct{}

func (DropResolver) Close added in v0.3.3

func (e DropResolver) Close() error

func (DropResolver) LookupIP added in v0.3.3

func (e DropResolver) LookupIP(_ context.Context, domain string) ([]net.IP, error)

func (DropResolver) Raw added in v0.3.3

type DynamicProxy

type DynamicProxy struct {
	// contains filtered or unexported fields
}

func NewDynamicProxy

func NewDynamicProxy(p Proxy) *DynamicProxy

func (*DynamicProxy) Conn

func (d *DynamicProxy) Conn(ctx context.Context, a Address) (net.Conn, error)

func (*DynamicProxy) Dispatch

func (d *DynamicProxy) Dispatch(ctx context.Context, a Address) (Address, error)

func (*DynamicProxy) PacketConn

func (d *DynamicProxy) PacketConn(ctx context.Context, a Address) (net.PacketConn, error)

func (*DynamicProxy) Set

func (d *DynamicProxy) Set(p Proxy)

type EmptyDispatch

type EmptyDispatch struct{}

func (EmptyDispatch) Dispatch

func (EmptyDispatch) Dispatch(_ context.Context, a Address) (Address, error)

type EmptyPacketListener added in v0.3.3

type EmptyPacketListener struct {
	net.Listener
}

func (EmptyPacketListener) Packet added in v0.3.3

func (*EmptyPacketListener) Stream added in v0.3.3

type ErrorResolver

type ErrorResolver func(domain string) error

func (ErrorResolver) Close

func (e ErrorResolver) Close() error

func (ErrorResolver) LookupIP

func (e ErrorResolver) LookupIP(_ context.Context, domain string) ([]net.IP, error)

func (ErrorResolver) Raw

type FakeIPKey

type FakeIPKey struct{}

func (FakeIPKey) String

func (FakeIPKey) String() string

type ForceFakeIP

type ForceFakeIP struct{}

type IPAddrPort

type IPAddrPort struct {
	// contains filtered or unexported fields
}

func (*IPAddrPort) AddrPort

func (d *IPAddrPort) AddrPort(context.Context) (netip.AddrPort, error)

func (*IPAddrPort) Hostname

func (d *IPAddrPort) Hostname() string

func (*IPAddrPort) IP

func (d *IPAddrPort) IP(context.Context) (net.IP, error)

func (IPAddrPort) Network

func (d IPAddrPort) Network() string

func (IPAddrPort) NetworkType

func (d IPAddrPort) NetworkType() statistic.Type

func (*IPAddrPort) OverrideHostname

func (d *IPAddrPort) OverrideHostname(s string) Address

func (*IPAddrPort) OverridePort

func (d *IPAddrPort) OverridePort(p Port) Address

func (*IPAddrPort) Port

func (d *IPAddrPort) Port() Port

func (IPAddrPort) PreferIPv6

func (d IPAddrPort) PreferIPv6(b bool)

func (IPAddrPort) Resolver

func (d IPAddrPort) Resolver() Resolver

func (*IPAddrPort) String

func (d *IPAddrPort) String() string

func (*IPAddrPort) TCPAddr

func (d *IPAddrPort) TCPAddr(context.Context) (*net.TCPAddr, error)

func (*IPAddrPort) Type

func (d *IPAddrPort) Type() Type

func (*IPAddrPort) UDPAddr

func (d *IPAddrPort) UDPAddr(context.Context) (*net.UDPAddr, error)

func (IPAddrPort) WithResolver

func (d IPAddrPort) WithResolver(resolver Resolver, canCover bool) bool

type InboundKey

type InboundKey struct{}

func (InboundKey) String

func (InboundKey) String() string

type Listener added in v0.3.3

type Listener interface {
	Stream(context.Context) (net.Listener, error)
	Packet(context.Context) (net.PacketConn, error)
	Server
}

func NewEmptyPacketListener added in v0.3.3

func NewEmptyPacketListener(lis net.Listener) Listener

type LogConn

type LogConn struct {
	net.Conn
}

func (*LogConn) Read

func (l *LogConn) Read(b []byte) (int, error)

func (*LogConn) SetDeadline

func (l *LogConn) SetDeadline(t time.Time) error

func (*LogConn) SetReadDeadline

func (l *LogConn) SetReadDeadline(t time.Time) error

func (*LogConn) SetWriteDeadline

func (l *LogConn) SetWriteDeadline(t time.Time) error

func (*LogConn) Write

func (l *LogConn) Write(b []byte) (int, error)

type Packet

type Packet struct {
	Src       net.Addr
	Dst       Address
	WriteBack WriteBack
	Payload   *pool.Bytes
}

type PacketProxy

type PacketProxy interface {
	PacketConn(context.Context, Address) (net.PacketConn, error)
}

type Port

type Port interface {
	Port() uint16
	String() string
}
var EmptyPort Port = PortUint16(0)

func ParsePort

func ParsePort[T constraints.Integer](p T) Port

func ParsePortStr

func ParsePortStr(p string) (Port, error)

type PortUint16

type PortUint16 uint16

func (PortUint16) Port

func (p PortUint16) Port() uint16

func (PortUint16) String

func (p PortUint16) String() string

type PreferIPv6

type PreferIPv6 struct{}

type ProtocolServer added in v0.3.3

type ProtocolServer interface {
	Server
	AcceptStream() (*StreamMeta, error)
	AcceptPacket() (*Packet, error)
}

type Proxy

type Proxy interface {
	StreamProxy
	PacketProxy
	Dispatch(context.Context, Address) (Address, error)
}

func NewErrProxy

func NewErrProxy(err error) Proxy

func NewWrapStoreProxy

func NewWrapStoreProxy(p Proxy) Proxy

type Reader added in v0.3.3

type Reader struct {
	io.Reader
}

func NewReader added in v0.3.3

func NewReader(r io.Reader) *Reader

func (*Reader) ReadByte added in v0.3.3

func (r *Reader) ReadByte() (byte, error)

func (*Reader) ReadBytes added in v0.3.3

func (r *Reader) ReadBytes(n int) ([]byte, error)

type Resolver

type Resolver interface {
	LookupIP(ctx context.Context, domain string) ([]net.IP, error)
	Raw(ctx context.Context, req dnsmessage.Question) (dnsmessage.Message, error)
	io.Closer
}
var Bootstrap Resolver = &System{}

type Server

type Server interface {
	io.Closer
}

type SourceKey

type SourceKey struct{}

func (SourceKey) String

func (SourceKey) String() string

type Store

type Store interface {
	Add(k, v any) Store
	Get(k any) (any, bool)
	Range(func(k, v any) bool)
	Map() map[any]any
}

func StoreFromContext

func StoreFromContext(ctx context.Context) Store

type StreamMeta

type StreamMeta struct {
	Source      net.Addr
	Destination net.Addr
	Inbound     net.Addr

	Src     net.Conn
	Address Address
}

type StreamProxy

type StreamProxy interface {
	Conn(context.Context, Address) (net.Conn, error)
}

type System

type System struct{ DisableIPv6 bool }

func (*System) Close

func (d *System) Close() error

func (*System) LookupIP

func (d *System) LookupIP(ctx context.Context, domain string) ([]net.IP, error)

func (*System) Raw

type Type

type Type uint8
const (
	DOMAIN Type = 1
	IP     Type = 2
	UNIX   Type = 3
	EMPTY  Type = 4
)

func (Type) String

func (t Type) String() string

type WrapListener added in v0.3.3

type WrapListener struct {
	Listener
	// contains filtered or unexported fields
}

func ListenWrap added in v0.3.3

func ListenWrap(lis net.Listener, inbound Listener) *WrapListener

func (*WrapListener) Close added in v0.3.3

func (w *WrapListener) Close() error

func (*WrapListener) Stream added in v0.3.3

func (w *WrapListener) Stream(ctx context.Context) (net.Listener, error)

type WriteBack added in v0.3.3

type WriteBack func(b []byte, addr net.Addr) (int, error)

type Writer added in v0.3.3

type Writer struct {
	io.Writer
}

func NewWriter added in v0.3.3

func NewWriter(w io.Writer) *Writer

func (*Writer) WriteByte added in v0.3.3

func (w *Writer) WriteByte(b byte) error

func (*Writer) WriteString added in v0.3.3

func (w *Writer) WriteString(b string) (int, error)

Jump to

Keyboard shortcuts

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