Go 语言代码:获取网段 IP 并找出 ping 值最小的 10 个
package main
import ( "fmt" "net" "os/exec" "sort" "strings" )
func main() { var ips []string ip, ipnet, _ := net.ParseCIDR('103.21.244.0/22') for ip := ip.Mask(ipnet.Mask); ipnet.Contains(ip); inc(ip) { ips = append(ips, ip.String()) }
pingResults := make(map[string]float64)
for _, ip := range ips {
cmd := exec.Command('ping', '-c', '5', ip)
out, _ := cmd.CombinedOutput()
output := string(out)
if strings.Contains(output, '5 packets transmitted, 5 packets received') {
lines := strings.Split(output, '
') timeLine := lines[len(lines)-2] time := strings.Split(timeLine, ' ')[3] pingResults[ip] = strToFloat(time) } }
var sortedIps []string
for ip := range pingResults {
sortedIps = append(sortedIps, ip)
}
sort.Slice(sortedIps, func(i, j int) bool {
return pingResults[sortedIps[i]] < pingResults[sortedIps[j]]
})
for _, ip := range sortedIps[:10] {
fmt.Printf('ip: %s, ping: %.2fms
', ip, pingResults[ip]) } }
func inc(ip net.IP) { for j := len(ip) - 1; j >= 0; j-- { ip[j]++ if ip[j] > 0 { break } } }
func strToFloat(str string) float64 { var result float64 fmt.Sscanf(str, '%f', &result) return result }
原文地址: https://www.cveoy.top/t/topic/nbip 著作权归作者所有。请勿转载和采集!