Maison >développement back-end >Golang >Golang teste s'il peut envoyer un ping avec succès

Golang teste s'il peut envoyer un ping avec succès

尚
original
2020-01-13 15:27:376542parcourir

Golang teste s'il peut envoyer un ping avec succès

Dans le projet, nous avons besoin de savoir quelles IP sont des IP disponibles, nous avons donc pensé à utiliser ICMP (Internet Control Message Protocol). Vous pouvez utiliser la bibliothèque open source –github.com/sparrc/go-ping pour déterminer si le ping peut réussir.

Code pour utiliser la bibliothèque open source –github.com/sparrc/go-ping pour déterminer si le ping peut réussir :

func ServerPing(target string) bool  {
	pinger, err := ping.NewPinger(target)
	if err != nil {
		panic(err)
	}

	pinger.Count = ICMPCOUNT
	pinger.Timeout = time.Duration(PINGTIME*time.Millisecond)
	pinger.SetPrivileged(true)
	pinger.Run()// blocks until finished
	stats := pinger.Statistics()

	fmt.Println(stats)
	// 有回包,就是说明IP是可用的
	if stats.PacketsRecv >= 1 {
		return true
	}
	return false
}

Ceci est jugé par le nombre de paquets renvoyés, ou par le juge du taux d’abandon des paquets. Dans le même temps, la bibliothèque fournit la structure des statistiques, y compris des informations ICMP détaillées, comme suit

type Statistics struct {
	// PacketsRecv is the number of packets received.
	PacketsRecv int

	// PacketsSent is the number of packets sent.
	PacketsSent 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
}

Pour plus de connaissances sur Golang, veuillez faire attention au site Web PHP chinoistutoriel golangColonne.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn