엄청나게 오랜만에 우연히 생각나서 올리는 게시글...
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번만 성공해도 성공으로 할 경우, 패킷 성공률 비교하는 부분을 기호에 맞게 수정하면 된다.
실행 결과
끝!
반응형
'지식저장소 > Golang' 카테고리의 다른 글
[Golang] Timer - 준비시간 / 답변시간 타이머 (0) | 2023.07.25 |
---|---|
[Golang] File Compare - 파일 비교 (0) | 2023.03.23 |
[Golang] AES - CFB - Base64 암호화 (0) | 2021.10.22 |
[Golang] Byte Slice를 hex로 보기 쉽게 출력하기 (0) | 2020.11.10 |
[Golang] AES - CBC - pkcs7Pad 암호화 (0) | 2020.11.02 |