Documentation ¶
Overview ¶
Package ping is a simple but powerful ICMP echo (ping) library.
Here is a very simple example that sends and receives three packets:
pinger, err := ping.NewPinger("www.google.com") if err != nil { panic(err) } pinger.Count = 3 err = pinger.Run() // blocks until finished if err != nil { panic(err) } stats := pinger.Statistics() // get send/receive/rtt stats
Here is an example that emulates the traditional UNIX ping command:
pinger, err := ping.NewPinger("www.google.com") if err != nil { panic(err) } // Listen for Ctrl-C. c := make(chan os.Signal, 1) signal.Notify(c, os.Interrupt) go func() { for _ = range c { pinger.Stop() } }() pinger.OnRecv = func(pkt *ping.Packet) { fmt.Printf("%d bytes from %s: icmp_seq=%d time=%v\n", pkt.Nbytes, pkt.IPAddr, pkt.Seq, pkt.Rtt) } pinger.OnFinish = func(stats *ping.Statistics) { fmt.Printf("\n--- %s ping statistics ---\n", stats.Addr) fmt.Printf("%d packets transmitted, %d packets received, %v%% packet loss\n", stats.PacketsSent, stats.PacketsRecv, stats.PacketLoss) fmt.Printf("round-trip min/avg/max/stddev = %v/%v/%v/%v\n", stats.MinRtt, stats.AvgRtt, stats.MaxRtt, stats.StdDevRtt) } fmt.Printf("PING %s (%s):\n", pinger.Addr(), pinger.IPAddr()) err = pinger.Run() if err != nil { panic(err) }
It sends ICMP Echo Request packet(s) and waits for an Echo Reply in response. If it receives a response, it calls the OnRecv callback. When it's finished, it calls the OnFinish callback.
For a full ping example, see "cmd/ping/ping.go".
Index ¶
- type ErrorCallback
- type Logger
- type NoopLogger
- type Packet
- type PingIP
- type PingIPTask
- func (p *PingIPTask) ICMPRequestType() icmp.Type
- func (p *PingIPTask) ID() int
- func (p *PingIPTask) IPV6ICMPRequestType() icmp.Type
- func (p *PingIPTask) New(addr string, count int, logger Logger, pinger Pinger)
- func (p *PingIPTask) RecvBackHook(r RecvPakcet)
- func (p *PingIPTask) Reset()
- func (p *PingIPTask) Rst() *Statistics
- func (p *PingIPTask) SendBackHook()
- func (p *PingIPTask) SendPrexHook() ([]byte, net.Addr)
- func (p *PingIPTask) Start()
- func (p *PingIPTask) Statistics() *Statistics
- func (p *PingIPTask) UUID() uuid.UUID
- type Pinger
- type RecvPakcet
- type Statistics
- type StdLogger
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ErrorCallback ¶ added in v1.4.7
type ErrorCallback interface {
F(err error)
}
var ( // 负责错误处理回调 ErrorInf ErrorCallback )
type NoopLogger ¶
type NoopLogger struct { }
func (NoopLogger) Debugf ¶
func (l NoopLogger) Debugf(format string, v ...interface{})
func (NoopLogger) Errorf ¶
func (l NoopLogger) Errorf(format string, v ...interface{})
func (NoopLogger) Fatalf ¶
func (l NoopLogger) Fatalf(format string, v ...interface{})
func (NoopLogger) Infof ¶
func (l NoopLogger) Infof(format string, v ...interface{})
func (NoopLogger) Warnf ¶
func (l NoopLogger) Warnf(format string, v ...interface{})
type Packet ¶
type Packet struct { // Rtt is the round-trip time it took to ping. Rtt time.Duration // Addr is the string address of the host being pinged. Addr string // Seq is the ICMP sequence number. Seq int // ID is the ICMP identifier. ID int }
Packet represents a received and processed ICMP echo packet.
type PingIPTask ¶ added in v1.3.1
type PingIPTask struct { // interrupted. Count int // Number of packets sent PacketsSent int // Number of packets received PacketsRecv int // Number of duplicate packets received PacketsRecvDuplicates int // If true, keep a record of rtts of all received packets. // Set to false to avoid memory bloat for long running pings. RecordRtts bool Interval time.Duration Timeout time.Duration Size int // contains filtered or unexported fields }
func (*PingIPTask) ICMPRequestType ¶ added in v1.3.1
func (p *PingIPTask) ICMPRequestType() icmp.Type
func (*PingIPTask) ID ¶ added in v1.3.1
func (p *PingIPTask) ID() int
func (*PingIPTask) IPV6ICMPRequestType ¶ added in v1.6.5
func (p *PingIPTask) IPV6ICMPRequestType() icmp.Type
func (*PingIPTask) New ¶ added in v1.3.1
func (p *PingIPTask) New(addr string, count int, logger Logger, pinger Pinger)
func (*PingIPTask) RecvBackHook ¶ added in v1.3.1
func (p *PingIPTask) RecvBackHook(r RecvPakcet)
RecvBackHook return true, close
func (*PingIPTask) Reset ¶ added in v1.3.1
func (p *PingIPTask) Reset()
共28个字段, 其中重置28个 mtx和rwmtx也要重置
func (*PingIPTask) Rst ¶ added in v1.3.1
func (p *PingIPTask) Rst() *Statistics
func (*PingIPTask) SendBackHook ¶ added in v1.3.1
func (p *PingIPTask) SendBackHook()
func (*PingIPTask) SendPrexHook ¶ added in v1.3.1
func (p *PingIPTask) SendPrexHook() ([]byte, net.Addr)
func (*PingIPTask) Start ¶ added in v1.3.1
func (p *PingIPTask) Start()
func (*PingIPTask) Statistics ¶ added in v1.3.1
func (p *PingIPTask) Statistics() *Statistics
func (*PingIPTask) UUID ¶ added in v1.4.8
func (p *PingIPTask) UUID() uuid.UUID
type Pinger ¶
func NewPingerIPV4ByAddr ¶ added in v1.6.7
func NewPingerIPV6 ¶ added in v1.6.5
func NewPingerIPV6ByAddr ¶ added in v1.6.9
type RecvPakcet ¶
type Statistics ¶
type Statistics struct { // PacketsRecv is the number of packets received. PacketsRecv int // PacketsSent is the number of packets sent. PacketsSent int // PacketsRecvDuplicates is the number of duplicate responses there were to a sent packet. PacketsRecvDuplicates int // PacketLoss is the percentage of packets lost. PacketLoss float64 // IPAddr is the address of the host being pinged. IPAddr *net.IPAddr // Addr is the string address of the host being pinged. Addr string // Rtts is all of the round-trip times sent via this pinger. Rtts []time.Duration // MinRtt is the minimum round-trip time sent via this pinger. MinRtt time.Duration // MaxRtt is the maximum round-trip time sent via this pinger. MaxRtt time.Duration // AvgRtt is the average round-trip time sent via this pinger. AvgRtt time.Duration // StdDevRtt is the standard deviation of the round-trip times sent via // this pinger. StdDevRtt time.Duration }
Click to show internal directories.
Click to hide internal directories.