Added ICMP Packet ID to distinguish ICMP replies in multithreading environment (#15)

This commit is contained in:
webfrank 2018-08-29 19:21:50 +02:00 committed by Cameron Sparr
parent 5740bb1ff1
commit d046b24518

16
ping.go
View File

@ -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,
@ -142,7 +145,8 @@ type Pinger struct {
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,
},