libprobe

package module
v0.4.0 Latest Latest
Warning

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

Go to latest
Published: Feb 4, 2025 License: MIT Imports: 19 Imported by: 0

Documentation

Overview

Package libprobe implements network probing functionality.

MTR (My TraceRoute) combines the functionality of traceroute and ping. It works by: 1. Sending ICMP Echo requests with increasing TTL values 2. Collecting ICMP Time Exceeded messages from intermediate routers 3. Recording statistics for each hop including latency, loss rate, and jitter 4. Performing multiple probes to gather accurate statistics

The implementation uses raw sockets to send and receive ICMP packets, requiring root privileges on most systems.

Index

Constants

View Source
const (
	HTTPStepDNSLookup    = "DNS_LOOKUP"
	HTTPStepConnect      = "CONNECT"
	HTTPStepTLSHandshake = "TLS_HANDSHAKE"
	HTTPStepWriteRequest = "WRITE_REQUEST"
)
View Source
const (
	KindHTTP = "HTTP"
)
View Source
const (
	KindICMP = "ICMP"
)
View Source
const (
	KindTCP = "TCP"
)

Variables

This section is empty.

Functions

This section is empty.

Types

type BaseResult added in v0.4.0

type BaseResult[T any] struct {
	Target    Target[T]
	Success   bool
	Err       error
	Duration  time.Duration
	StartTime time.Time
	EndTime   time.Time
}

BaseResult 提供基础结果实现

func (BaseResult[T]) Error added in v0.4.0

func (r BaseResult[T]) Error() error

func (BaseResult[T]) GetTarget added in v0.4.0

func (r BaseResult[T]) GetTarget() Target[T]

func (BaseResult[T]) IsSuccess added in v0.4.0

func (r BaseResult[T]) IsSuccess() bool

func (BaseResult[T]) RTT added in v0.4.0

func (r BaseResult[T]) RTT() time.Duration

type HTTPClientTrace added in v0.3.5

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

func (*HTTPClientTrace) CreateContext added in v0.3.5

func (t *HTTPClientTrace) CreateContext(ctx context.Context) context.Context

func (*HTTPClientTrace) SetEndTime added in v0.3.6

func (t *HTTPClientTrace) SetEndTime(when time.Time)

func (*HTTPClientTrace) TraceInfo added in v0.3.5

func (t *HTTPClientTrace) TraceInfo() HTTPTraceInfo

type HTTPExtention added in v0.4.0

type HTTPExtention struct {
	// HTTP-specific parameters
	Method  string      // HTTP method (GET, POST, etc.)
	Headers http.Header // Request headers
	Body    []byte      // Request body
}

type HTTPProber

type HTTPProber struct{}

func NewHTTPProber

func NewHTTPProber() *HTTPProber

func (*HTTPProber) Kind

func (p *HTTPProber) Kind() string

func (*HTTPProber) Probe

func (p *HTTPProber) Probe(target Target[HTTPExtention]) (Result[HTTPExtention], error)

type HTTPResult

type HTTPResult struct {
	BaseResult[HTTPExtention]
	DNSResolveTime   time.Duration // DNS lookup time
	ConnectTime      time.Duration // TCP connection time
	TLSHandshakeTime time.Duration // TLS handshake time
	TTFB             time.Duration // Time to first byte
	TransferTime     time.Duration // Content transfer time
	StatusCode       int           // HTTP status code
	ResponseSize     int           // Response body size in bytes
	ResponseBody     []byte        // Raw response body
}

HTTPResult contains detailed timing information for HTTP requests

func (HTTPResult) RTT

func (r HTTPResult) RTT() time.Duration

func (HTTPResult) String

func (r HTTPResult) String() string

type HTTPTraceInfo added in v0.3.5

type HTTPTraceInfo struct {
	// FailedStep is the step name that failed while requesting.
	FailedStep string

	// DNSLookup is a duration that transport took to perform
	// DNS lookup.
	DNSLookup time.Duration

	// ConnTime is a duration that took to obtain a successful connection.
	ConnTime time.Duration

	// TCPConnTime is a duration that took to obtain the TCP connection.
	TCPConnTime time.Duration

	// TLSHandshake is a duration that TLS handshake took place.
	TLSHandshake time.Duration

	// RequestSendingTime is a duration that request wrote takes(may contains multiple retries).
	RequestSendingTime time.Duration

	// TTFB(TimeToFirstByte) is a duration that server took to respond first byte.
	TTFB time.Duration

	// ResponseTime is a duration since first response byte from server to
	// request completion.
	ResponseTime time.Duration

	// TotalTime is a duration that total request took end-to-end.
	TotalTime time.Duration

	// IsConnReused is whether this connection has been previously
	// used for another HTTP request.
	IsConnReused bool

	// IsConnWasIdle is whether this connection was obtained from an
	// idle pool.
	IsConnWasIdle bool

	// ConnIdleTime is a duration how long the connection was previously
	// idle, if IsConnWasIdle is true.
	ConnIdleTime time.Duration

	// RemoteAddr returns the remote network address.
	RemoteAddr net.Addr

	// Timestamps
	RequestStartAt      time.Time
	FirstResponseByteAt time.Time
}

type ICMPExtention added in v0.4.0

type ICMPExtention struct {
	TTL      int    // Time To Live value
	SourceIP string // Source IP address for the probe
	EnableV6 bool   // Whether to use IPv6
	Sequence int    // ICMP sequence number
	Size     int    // ICMP packet size
}

ICMPExtention defines ICMP-specific probe parameters

type ICMPProber

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

func NewICMPProber

func NewICMPProber() *ICMPProber

func (*ICMPProber) Kind

func (p *ICMPProber) Kind() string

func (*ICMPProber) Probe

func (p *ICMPProber) Probe(target Target[ICMPExtention]) (Result[ICMPExtention], error)

type ICMPResult

type ICMPResult struct {
	BaseResult[ICMPExtention]
	Address  string
	Sequence int
	Size     int
}

func (ICMPResult) RTT

func (r ICMPResult) RTT() time.Duration

func (ICMPResult) String

func (r ICMPResult) String() string

type IcmpID added in v0.4.0

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

IcmpID manages unique ICMP Echo identifiers for concurrent probes

func (*IcmpID) Get added in v0.4.0

func (c *IcmpID) Get() uint16

Get returns a unique ICMP Echo identifier

type MTRExtention added in v0.4.0

type MTRExtention struct {
	ICMPExtention
	MaxHops    int  // Maximum number of hops to probe
	ResolvePtr bool // Whether to resolve PTR records
}

MTRExtention contains MTR-specific parameters

type MTRHop added in v0.4.0

type MTRHop struct {
	TTL       int           // Time To Live value
	Address   string        // IP address of the hop
	Hostname  string        // DNS name (if resolvable)
	Loss      float64       // Packet loss percentage
	LastRTT   time.Duration // Last Round Trip Time
	AvgRTT    time.Duration // Average Round Trip Time
	BestRTT   time.Duration // Best Round Trip Time
	WorstRTT  time.Duration // Worst Round Trip Time
	StdDevRTT time.Duration // Standard deviation of RTT
	Sent      int           // Number of packets sent
	Received  int           // Number of packets received
}

MTRHop represents a single hop in the route

type MTRProber added in v0.4.0

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

MTRProber MTR 探测器 MTRProber implements the MTR (My TraceRoute) probe functionality

func NewMTRProber added in v0.4.0

func NewMTRProber() *MTRProber

NewMTRProber creates a new MTR prober instance

func (*MTRProber) Kind added in v0.4.0

func (p *MTRProber) Kind() string

Kind returns the probe type identifier

func (*MTRProber) Probe added in v0.4.0

func (p *MTRProber) Probe(target Target[MTRExtention]) (Result[MTRExtention], error)

Probe performs the MTR probe operation

type MTRResult added in v0.4.0

type MTRResult struct {
	BaseResult[MTRExtention]
	Hops []MTRHop // All hops in the route
}

MTRResult contains the complete MTR probe results

func (MTRResult) String added in v0.4.0

func (r MTRResult) String() string

type Prober

type Prober[T any] interface {
	Kind() string
	Probe(target Target[T]) (Result[T], error)
}

Prober 定义探测器接口

type Result

type Result[T any] interface {
	// RTT returns the round-trip time of the probe
	RTT() time.Duration
	// String returns a human-readable representation of the result
	String() string
	// GetTarget returns the original probe target
	GetTarget() Target[T]
	// IsSuccess returns whether the probe was successful
	IsSuccess() bool
	// Error returns any error that occurred during probing
	Error() error
}

Result defines the interface for probe results

type TCPExtention added in v0.4.0

type TCPExtention struct {
	// Port specifies the TCP port to connect to
	Port int
}

type TCPProber

type TCPProber struct{}

func NewTCPProber

func NewTCPProber() *TCPProber

func (*TCPProber) Kind

func (p *TCPProber) Kind() string

func (*TCPProber) Probe

func (p *TCPProber) Probe(target Target[TCPExtention]) (Result[TCPExtention], error)

type TCPResult

type TCPResult struct {
	BaseResult[TCPExtention]
	ConnectTime time.Duration
}

func (TCPResult) RTT

func (r TCPResult) RTT() time.Duration

RTT returns the total round-trip time for TCP connection

func (TCPResult) String

func (r TCPResult) String() string

type Target

type Target[T any] struct {
	// Address can be an IP, IP:Port or URL
	Address string
	// Timeout for the entire probe operation
	Timeout time.Duration
	// Interval between multiple probes
	Interval time.Duration
	// Number of probes to send
	Count int

	// Extension parameters specific to each probe type
	Extention T

	// DEPRECATED: These fields will be moved to respective Extensions
	RequestMethod string
	Headers       http.Header
	Body          io.Reader
}

Target defines a probe target with generic extension parameters

func (Target[T]) GetCount

func (t Target[T]) GetCount() int

Jump to

Keyboard shortcuts

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