엄청나게 오랜만에 우연히 생각나서 올리는 게시글...

 

Ping 테스트를 반복적으로 하는 프로그램 

가끔 전원 On/Off 테스트에 사용하거나 네트워크 체크할 때 사용했던 기억이 가물가물.... 

 

Ping테스트를 할 타겟 IP와 반복적으로 할 간격[초]을 인자로 받아서 실행하도록 하였다.

func main() {
	target := os.Args[1]
	t := os.Args[2]
	timeDelay, err := strconv.Atoi(t)
	if err != nil {
		log.Println("ERR : ", err)
	}
	log.Println("Start")
	for {
		if !pingCheck(target) {
			log.Println("Stop")
			break
		}
		time.Sleep(time.Second * time.Duration(timeDelay))
	}
}

 

Ping 테스트는 3번 시도하여 100%성공이 아니면 실패로 리턴하도록 하였다. 

func pingCheck(target string) bool {
	out, err := exec.Command("ping", target, "-c 3").Output()
	if err != nil {
		log.Println("ERR : ", err)
	}
	log.Println(string(out))
	if strings.Contains(string(out), "Destination Host Unreachable") || strings.Contains(string(out), "errors") {
		log.Println("Down")
		return false
	}
	if strings.Contains(string(out), "0% packet loss") {
		n := strings.Index(string(out), "0% packet loss")
		if string(out[n-1]) == "0" && string(out[n-2]) == "1" {
			log.Println("Down")
			return false
		}
	} else {
		log.Println("Down")
		return false
	}

	log.Println("Alive")
	return true
}

 

3번 중 2번만 성공해도 성공으로 할 경우, 패킷 성공률 비교하는 부분을 기호에 맞게 수정하면 된다.

 

실행 결과

끝!

반응형

+ Recent posts