mirror of
https://github.com/go-ping/ping.git
synced 2025-04-29 03:03:34 +00:00
Added ICMP Packet ID to distinguish ICMP replies in multithreading environment (#15)
This commit is contained in:
parent
5740bb1ff1
commit
d046b24518
20
ping.go
20
ping.go
@ -90,7 +90,10 @@ func NewPinger(addr string) (*Pinger, error) {
|
||||
Interval: time.Second,
|
||||
Timeout: time.Second * 100000,
|
||||
Count: -1,
|
||||
|
||||
id: rand.Intn(0xffff),
|
||||
network: "udp",
|
||||
ipv4: ipv4,
|
||||
size: timeSliceLength,
|
||||
network: "udp",
|
||||
ipv4: ipv4,
|
||||
Size: timeSliceLength,
|
||||
@ -140,9 +143,10 @@ type Pinger struct {
|
||||
ipaddr *net.IPAddr
|
||||
addr string
|
||||
|
||||
ipv4 bool
|
||||
source string
|
||||
|
||||
ipv4 bool
|
||||
source string
|
||||
size int
|
||||
id int
|
||||
sequence int
|
||||
network string
|
||||
}
|
||||
@ -430,6 +434,12 @@ func (p *Pinger) processPacket(recv *packet) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Check if reply from same ID
|
||||
body := m.Body.(*icmp.Echo)
|
||||
if body.ID != p.id {
|
||||
return nil
|
||||
}
|
||||
|
||||
outPkt := &Packet{
|
||||
Nbytes: recv.nbytes,
|
||||
IPAddr: p.ipaddr,
|
||||
@ -475,7 +485,7 @@ func (p *Pinger) sendICMP(conn *icmp.PacketConn) error {
|
||||
bytes, err := (&icmp.Message{
|
||||
Type: typ, Code: 0,
|
||||
Body: &icmp.Echo{
|
||||
ID: rand.Intn(65535),
|
||||
ID: p.id,
|
||||
Seq: p.sequence,
|
||||
Data: t,
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user