Help us shape the future of Go! Take the 2026 Go Developer Survey

fastdialer

package
v0.5.13 Latest Latest
Warning

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

Go to latest
Published: Jul 10, 2026 License: MIT Imports: 39 Imported by: 262

Documentation

Overview

fastdialer is a dialer package containing a dns/tls cache layer

Index

Constants

View Source
const (
	// DefaultMaxResolverEntries is the default maximum number of resolver
	// entries to read from the resolvers file.
	DefaultMaxResolverEntries = 4096

	// DefaultNdots is the default ndots value.
	DefaultNdots = 1
)
View Source
const ResolverFilePath = "/etc/resolv.conf"

ResolverFilePath in unix file os

Variables

View Source
var (
	MaxDNSCacheSize  int64
	MaxDNSItems      = 1024
	MaxDialCacheSize = 10000
)

option to disable ztls fallback in case of handshake error reads from env variable DISABLE_ZTLS_FALLBACK

View Source
var (
	CouldNotConnectError  = errkit.New("could not connect to any address found for host").SetKind(errkit.ErrKindNetworkPermanent)
	NoAddressFoundError   = errkit.New("no address found for host").SetKind(errkit.ErrKindNetworkPermanent)
	NoAddressAllowedError = errkit.New("denied address found for host").SetKind(errkit.ErrKindNetworkPermanent)
	NoPortSpecifiedError  = errkit.New("port was not specified").SetKind(errkit.ErrKindNetworkPermanent)
	MalformedIP6Error     = errkit.New("malformed IPv6 address").SetKind(errkit.ErrKindNetworkPermanent)
	ResolveHostError      = errkit.New("could not resolve host").SetKind(errkit.ErrKindNetworkPermanent)
	NoTLSHistoryError     = errkit.New("no tls data history available")
	NoTLSDataError        = errkit.New("no tls data found for the key")
	NoDNSDataError        = errkit.New("no data found")
	AsciiConversionError  = errkit.New("could not convert hostname to ASCII")
	ErrDialTimeout        = errkit.New("dial timeout").SetKind(errkit.ErrKindNetworkTemporary)
)
View Source
var DefaultOptions = Options{
	BaseResolvers:                   DefaultResolvers,
	MaxRetries:                      5,
	HostsFile:                       true,
	ResolversFile:                   true,
	CacheType:                       Memory,
	DialerTimeout:                   10 * time.Second,
	DialerKeepAlive:                 10 * time.Second,
	MaxTemporaryErrors:              30,
	MaxTemporaryToPermanentDuration: time.Minute,
}

DefaultOptions of the cache

View Source
var DefaultResolvers = []string{
	"1.1.1.1:53",
	"1.0.0.1:53",
	"8.8.8.8:53",
	"8.8.4.4:53",
}

DefaultResolvers trusted

View Source
var DefaultTLSConfig = &tls.Config{
	Renegotiation:      tls.RenegotiateOnceAsClient,
	InsecureSkipVerify: true,
	MinVersion:         tls.VersionTLS10,
	CipherSuites:       getUnsafeCipherSuites(),
}

DefaultTLSConfig is a default TLS configuration that is used by the fastdialer.

View Source
var DefaultZTLSConfig = &ztls.Config{
	InsecureSkipVerify: true,
	MinVersion:         ztls.VersionTLS10,
	CipherSuites:       getUnsafeCipherSuites(),
}

DefaultZTLSConfig is a default ZTLS configuration that is used by the fastdialer.

View Source
var MaxDialerTimeout = time.Minute
View Source
var (
	// MaxResolverEntries limits the number of resolver entries parsed from
	// resolver file.
	//
	// -1 means no limit.
	//
	// Deprecated: Use [DefaultMaxResolverEntries] instead. Adjust via [Options].
	MaxResolverEntries = 4096
)
View Source
var MinDialerTimeout = time.Second

Functions

func AsTLSConfig added in v0.0.15

func AsTLSConfig(ztlsConfig *ztls.Config) (*tls.Config, error)

func AsZTLSConfig added in v0.0.15

func AsZTLSConfig(tlsConfig *tls.Config) (*ztls.Config, error)

func HandleResolverLine added in v0.0.9

func HandleResolverLine(raw string) (ip string)

HandleLine a resolver file line

func IsTLS13 added in v0.0.15

func IsTLS13(config interface{}) bool

Types

type CacheType added in v0.0.13

type CacheType uint8
const (
	Memory CacheType = iota
	Disk
	Hybrid
)

type ContextOption added in v0.0.16

type ContextOption string
const (
	// SniName to use in tls connection
	SniName ContextOption = "sni-name"
	IP      ContextOption = "ip"
)

type Dialer

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

Dialer structure containing data information

func NewDialer

func NewDialer(options Options) (*Dialer, error)

NewDialer instance

func (*Dialer) Close

func (d *Dialer) Close()

Close instance and cleanups

func (*Dialer) Dial

func (d *Dialer) Dial(ctx context.Context, network, address string) (conn net.Conn, err error)

Dial function compatible with net/http

func (*Dialer) DialTLS added in v0.0.6

func (d *Dialer) DialTLS(ctx context.Context, network, address string) (conn net.Conn, err error)

DialTLS with encrypted connection

Note that this configuration is included for compatibility with the Go version <1.22, and is not intended to be secure. It is recommended to use the DialTLSWithConfig or DialTLSWithConfigImpersonate methods instead.

func (*Dialer) DialTLSWithConfig added in v0.0.13

func (d *Dialer) DialTLSWithConfig(ctx context.Context, network, address string, config *tls.Config) (conn net.Conn, err error)

DialTLS with encrypted connection

func (*Dialer) DialTLSWithConfigImpersonate added in v0.0.29

func (d *Dialer) DialTLSWithConfigImpersonate(ctx context.Context, network, address string, config *tls.Config, impersonate impersonate.Strategy, identity *impersonate.Identity) (conn net.Conn, err error)

DialTLSWithConfigImpersonate dials tls with impersonation

func (*Dialer) DialZTLS added in v0.0.15

func (d *Dialer) DialZTLS(ctx context.Context, network, address string) (conn net.Conn, err error)

DialZTLS with encrypted connection using ztls

Note that this configuration is included for compatibility with the Go version <1.22, and is not intended to be secure. It is recommended to use the DialZTLSWithConfig method instead.

func (*Dialer) DialZTLSWithConfig added in v0.0.15

func (d *Dialer) DialZTLSWithConfig(ctx context.Context, network, address string, config *ztls.Config) (conn net.Conn, err error)

DialZTLSWithConfig dials ztls with config

func (*Dialer) GetDNSData

func (d *Dialer) GetDNSData(hostname string) (*retryabledns.DNSData, error)

GetDNSData for the given hostname

func (*Dialer) GetDNSDataFromCache

func (d *Dialer) GetDNSDataFromCache(hostname string) (*retryabledns.DNSData, error)

GetDNSDataFromCache cached by the resolver

func (*Dialer) GetDialedIP

func (d *Dialer) GetDialedIP(hostname string) string

GetDialedIP returns the ip dialed by the HTTP client

func (*Dialer) GetTLSData added in v0.0.13

func (d *Dialer) GetTLSData(hostname string) (*cryptoutil.TLSData, error)

GetTLSData returns the tls data for a hostname

func (*Dialer) GetTimeout added in v0.4.14

func (d *Dialer) GetTimeout() time.Duration

GetTimeout returns the maximum timeout allowed for dialer

type DiskDBType added in v0.0.13

type DiskDBType uint8
const (
	LevelDB DiskDBType = iota
	Pogreb
)

type Options

type Options struct {
	BaseResolvers       []string
	MaxRetries          int
	HostsFile           bool
	ResolversFile       bool
	EnableFallback      bool
	Allow               []string
	Deny                []string
	AllowSchemeList     []string
	DenySchemeList      []string
	AllowPortList       []int
	DenyPortList        []int
	CacheType           CacheType
	CacheMemoryMaxItems int // used by Memory cache type
	DiskDbType          DiskDBType
	WithDialerHistory   bool
	WithCleanup         bool
	WithTLSData         bool
	DialerTimeout       time.Duration
	DialerKeepAlive     time.Duration
	Dialer              *net.Dialer
	ProxyDialer         *proxy.Dialer
	WithZTLS            bool
	SNIName             string
	OnBeforeDial        func(hostname, IP, port string)
	// OnValidateTarget is called after network policy validation and before dialing.
	// If it returns an error, the target is considered invalid.
	OnValidateTarget         func(hostname, IP, port string) error
	OnInvalidTarget          func(hostname, IP, port string)
	OnDialCallback           func(hostname, IP string)
	DisableZtlsFallback      bool
	WithNetworkPolicyOptions *networkpolicy.Options
	// optional network policy override for sharing
	NetworkPolicy *networkpolicy.NetworkPolicy
	// optional logger to log errors(like hostfile init error)
	Logger *log.Logger
	// optional max temporary errors to mark as permanent
	MaxTemporaryErrors              int
	MaxTemporaryToPermanentDuration time.Duration

	// ConnectionCacheExpiry is the duration after which a cached connection
	// expires.
	//
	// Default is [DefaultConnExpiry].
	ConnectionCacheExpiry time.Duration

	// MaxResolverEntries limits the number of resolvers read from the resolvers
	// file.
	//
	// Default is [DefaultMaxResolverEntries].
	// Use -1 for unlimited entries.
	MaxResolverEntries int

	// Ndots enforces the resolv.conf(5) ndots: threshold for treating a name
	// as absolute before search domains are appended (see
	// https://man7.org/linux/man-pages/man5/resolv.conf.5.html).
	//
	// Default is [DefaultNdots].
	Ndots int
}

type ResolverConfig added in v0.5.3

type ResolverConfig struct {
	// Resolvers are the list of nameservers.
	Resolvers []string

	// SearchDomains are the search domains.
	SearchDomains []string

	// Ndots enforces the resolv.conf(5) ndots: threshold for treating a name
	// as absolute before search domains are appended (see
	// https://man7.org/linux/man-pages/man5/resolv.conf.5.html).
	Ndots int
}

ResolverConfig captures nameservers plus search-domain semantics from resolv.conf(5).

Directories

Path Synopsis
ja3
ja3 is a package for creating JA3 fingerprints from TLS clients.
ja3 is a package for creating JA3 fingerprints from TLS clients.
impersonate
impersonate package contains strategy to impersonate a client and define an alias for the internal client tls spefications
impersonate package contains strategy to impersonate a client and define an alias for the internal client tls spefications
metafiles are metadata files related to networking like /etc/hosts etc
metafiles are metadata files related to networking like /etc/hosts etc

Jump to

Keyboard shortcuts

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