?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form
라이선스 MIT

안녕하세요?


이 스크립트는 ping 테스트를 하고 그 결과를 "시행시간 - ping 결과값"으로 로그 파일로 저장합니다.


저의 미니 홈서버(스틱 PC)에서 윈도우 스케줄러에 넣고 가볍게 돌리려는 목적으로 작성되었습니다.

(일본 VPS들의 일주일간 오전/오후/야간 시간대의 ping을 알아보기 위해 만들었습니다)



스포어 회원님들께서는 대부분 개발자이실텐데 


개발자가 아닌 저의 부족한 실력으로 짠 스크립트가 부끄럽네요 ㅠㅠ


실례를 무릅쓰고 간단히 설명을 드리면 


우선 cmd 창에서 ping 명령어를 실행하고 


이를 오토핫키로 불러와서 "ms"라는 문자열이 있는지 정규식으로 확인하여 ping loss 여부를 판단하고 


ping 테스트 결과값을 날짜 및 시간과 함께 로그파일에 저장하고 윈도우 메세지 박스로 알려줍니다.


물론 오토핫키 자체의 명령어만으로도 스크립트를 짤 수도 있겠지만


제가 실력이 부족하여 빠른 개발을 위해 cmd에서 ping 테스트를 한 것을 불러오는 방식을 선택했습니다.


URL := "studyforus.com"   ;스포어의 ping을 체크해보겠습니다.
timeout = 1000   ;ping 테스트에서 타임아웃값은 1000으로 잡았습니다.
 
Runwait, %comspec% /c ping -w %timeout% %url% > ping.log,,hide   ;cmd에서 ping 명령어를 실행합니다.
fileread, strvar, ping.log   ;ping을 실행한 결과를 열어서 변수로 불러옵니다.
filedelete, ping.log   ;임시생성한 파일을 삭제합니다.
 
if RegExMatch(strvar, " = (\d+)ms$", testdata)   ;=와 ms 사이의 마지막 정수값(평균)을 찾습니다.
    result := "average " testdata1 "ms"
else
    result := "No response"   ;4번 모두 ping loss된 경우의 처리를 해줍니다.
 
formattime, curtime,, yyyy/MM/dd HH:mm:ss   ;현재 날짜와 시간을 불러옵니다.
fileappend, %curtime% - %result% `n, pinghist.log   ;로그 파일로 결과를 저장합니다.
msgbox, %result%   ;메세지박스로 출력합니다.


오토핫키에서는 관리자 권한과 관련된 부분을 건드리지 않더라도


위와 같은 스크립트만으로도 원하는 결과를 얻을 수 있었습니다.


제가 생각하는 이 스크립트의 가장 큰 단점은


일본 VPS가 저녁시간대에 4번 테스트 중에 1번 정도 ping loss 되는 경우가 가끔 있는데 


그러한 경우까지 로그 파일에 반영하지 못한다는 점입니다.


그럼 스포어 회원님들께서도 뜻깊은 한가위 되시기를 기원합니다.


항상 감사드립니다.



  • profile
    이니스프리 2018.09.26 23:12
    ping loss 되는 경우를 체크하여 파일에 기록하기 위하여 다음과 같이 수정하였습니다.

    "TTL"이란 문자열이 cmd에서 ping을 수행한 결과에 몇 번 반복되는지를 카운트하는 방식을 택했습니다.

    결과값은 4번 ping 시도에서 몇 번 성공하였는지의 방식으로 출력됩니다.

    영문 윈도우와 한글 윈도우 모두에서 잘 작동하는 것을 확인했습니다.

    부족한 점을 더 보완하게 되면 다시 댓글을 남기겠습니다 ^^


    URL := "www.studyforus.com"
    timeout = 1000

    Runwait, %comspec% /c ping -w %timeout% %url% > ping.log,,hide
    fileread, strvar, ping.log
    filedelete, ping.log

    Loop
    {
    stringgetpos, temp, strvar, TTL, L%a_index%
    if errorlevel
    {
    count := a_index - 1
    break
    }
    }

    if RegExMatch(strvar, " = (\d+)ms$", testdata)
    result := "average " testdata1 "ms : " count "/4"
    else
    result := "No response : 0/4"

    formattime, curtime,, yyyy/MM/dd HH:mm:ss
    fileappend, %curtime% - %result% `n, pinghist.log
    msgbox, %result%
  • profile
    이니스프리 2018.10.02 18:21
    사이트별로 로그 파일명을 변경하는 것이 번거로워서

    다음과 같이 로그 파일명에 사이트 URL을 포함하도록 수정했습니다.

    아래의 경우 로그파일은 ping_studyforus.log로 저장됩니다.


    URL := "www.studyforus.com"
    timeout = 1000

    Runwait, %comspec% /c ping -w %timeout% %url% > ping.log,,hide
    fileread, strvar, ping.log
    filedelete, ping.log

    Loop
    {
    stringgetpos, temp, strvar, TTL, L%a_index%
    if errorlevel
    {
    count := a_index - 1
    break
    }
    }

    if RegExMatch(strvar, " = (\d+)ms$", testdata)
    result := "average " testdata1 "ms : " count "/4"
    else
    result := "No response : 0/4"

    formattime, curtime,, yyyy/MM/dd HH:mm:ss
    filename := "ping_" strsplit(URL, ".")[2] ".log"
    fileappend, %curtime% - %result% `n, %filename%

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
78 코드 AWSCLI, in a single file (portable, linux) file Seia 2021.04.10 164
77 코드 [Python-Gnuboard] 파이썬으로 구현한 그누보드 자동 글쓰기 함수 1 file 이니스프리 2021.04.08 1218
76 코드 [Python] 휴일지킴이 약국을 크롤링하여 Folium 지도에 마커로 표시하는 PyQt 윈도우 앱 7 file 이니스프리 2021.03.13 1143
75 코드 도박 중독자를 위한 광고 차단 규칙 file 제르엘 2020.08.21 290
74 코드 [Python] 유튜브 영상을 다운받아 일정 간격으로 캡쳐하여 10장씩 merge하기 3 file 이니스프리 2020.05.27 1048
73 자료 [Autohotkey] 매분 정각에 전체화면을 캡쳐하는 스크립트 4 file 이니스프리 2020.05.22 1102
72 코드 [Python/Telegram] Studyforus 알림봇 (댓글, 스티커 파싱) 7 file 이니스프리 2020.05.15 644
71 코드 [Python] url 주소로부터 IP 주소 알아내기 title: 황금 서버 (30일)humit 2020.02.20 2059
70 코드 [Python] 네이버 실시간 검색어 3 title: 황금 서버 (30일)humit 2020.01.23 1123
69 코드 Koa에서 자동으로 라우팅 채워주기 Seia 2020.01.22 436
68 코드 JavaScript에서 파이썬 문자열 처리 함수 중 하나 (바인딩)를 구현 7 Seia 2020.01.20 462
67 코드 [Python] Google Image Search 결과를 받아오기 file 이니스프리 2019.12.09 947
66 코드 [파이썬] Requests를 사용한 네이버 카페 크롤링 - 일정수 이상의 리플이 달린 게시글만 텔레그램 알림 3 file 이니스프리 2019.11.17 4183
65 코드 [JS] 클라이언트단 GET Parameter Hanam09 2019.11.16 465
64 코드 [Python] 싸이월드 미니홈피 백업 스크립트 1 이니스프리 2019.11.07 2165
63 코드 [Python] PIL을 이용한 Animated GIF의 리사이징 file 이니스프리 2019.11.03 1100
62 코드 [PyQt] sir.kr에서 스크랩한 게시글을 보여주는 윈도우앱 (검색 및 정렬 가능) 7 file 이니스프리 2019.08.09 998
61 코드 [아미나] Dropbox API를 이용한 이미지 호스팅 보드스킨 12 file 이니스프리 2019.07.13 1373
60 코드 [Python] 네이버 모바일 이미지 검색에서의 이미지 파일을 멀티스레드로 다운받고 1개의 파일로 병합 11 file 이니스프리 2019.07.12 1376
59 코드 [PHP/Javascript] 아미나에 자동으로 게시글을 생성하고 Ajax로 전송하여 결과를 표시하기 2 file 이니스프리 2019.07.09 775
Board Pagination Prev 1 2 3 4 Next
/ 4