IT. POST LIST

POST ALL LABEL

Telegram_CLI install & lua_scripts 모니터 활용

By 때찌때찌맴매 - 1월 12, 2015

Telegram_CLI install & lua_scripts 모니터 활용


약 4개월 전에 Telegram 사용이 핫 할때 사용하다가 2개월 전에 cli  사용 법을 알아서 이것 저것 좀 해보다가 이제 올림 ㅇㅇ;

1. telegram_cli 설치

* 패키지, 소스 설치 및 설정

yum install libevent-devel openssl-devel readline-devel libconfig-devel lua lua-devel -y

ln -sf /usr/lib64/libncursesw.so /usr/lib/libncursesw.so

mkdir /tele

cd /tele

git clone –recursive https://github.com/vysheng/tg telegram_cli

export LDFLAGS=”-lncursesw”

./configure && make

cp /root/tele/telegram_cli/tg-server.pub /root/tele/telegram_cli/bin/

cd /root/tele/telegram_cli/bin/

./telegram-cli -k tg-server.pub



– 구동이 시작되면 본인 폰인증 시작~~





* 설치 및 구동이 완료 되었고 명령어를 통해 사용이 가능 합니다.



* help를 입력하면 해당 명령어 등으로 메시지를 전달할 수 있습니다.



* help에 있는 contact_list 명령어를 사용하게 되면 텔레그램에 등록되어 있는  유저 목록을 출력합니다.





* user_info 사용시 해당 계정정보가 출력 됩니다.

* 여기서 중요한점은 텔레그램 명령어 사용시 공백이 불가 합니다. 대신 계 정등에 공백이 확인 되는 경우에는 “ _” (언더바)를 통해 유져명을 이어갑 니다.(현재는 공식한글이 지원되서 정상적으로 된다고 합니다.)

* 그리고 계정뒤에는 “ #코드넘버”가 보이는데 코드넘버로 메세지 전송이 가 능합니다.



“msg user#코드넘버  ”



* 메세지 전송은 계정으로 가능하지만 계졍명은 핸드폰의 주소록을 통해 확인  됨으로 코드 넘버로 하는게 정확한것 같습니다.

* ex) msg 길동_홍 안녕하세요

msg user#코드넘버 안녕하세요

둘다 동일 인물에게 같은 내용이 전달 됩니다.



2. Telegram send, receive sample source

* sample source
======================================================================================
#!/usr/bin/lua
dir_cmd="/tele/telegram_cli/bin/sh"
auth_phone={ ["82본인폰번호"] = true }
function on_msg_receive (msg)
 
 if ( msg.text == 'date' ) then
  send_msg(msg.from.print_name, os.date(), ok_cd, false)
  return
 end

  local recv_msg = msg.text
                local result = {}
                function split(str, delim)
                        local i=1
                        if ( str ~= nil ) then

                                for tmp in string.gmatch(str, "[^%s]+") do
         table.insert( result, tmp )
                                     i = i+1
                                end
                        end
                        return result
                end

       r = split(recv_msg," ")
       cmd = r[1]
       cmd2 = r[2] 
  
  print("receive : ", cmd, "\n")
  print("Name    : ", msg.from.print_name)
  print("Phone   : ", msg.from.phone) 
  print("Msg Num : ", msg.id)  
  print("to.Name : ", msg.to.print_name)
 
  if (msg.to.id == our_id) then
   user_id = msg.from.print_name
  else
   user_id = msg.to.print_name
  end

   if auth_phone[msg.from.phone] then
   print "auth    : OK "
  else
   print "auth    : invalid user"
   return
  end

  mark_read(user_id, ok_cb, false)
  
  if ( cmd == 'Help' ) then
   send_text(user_id, dir_cmd ..'/help.txt', ok_cd, false)
   return
  end 

end
function ok_cb(extra, success, result)
end

======================================================================================

* telegram_cli를 통해 메세지 전송시 답문을 받게 만들었습니다.

* 모티브는 http://truefeel.tistory.com/ 바탕으로 진행 하였으며, 해당 홈페이지의  내용대 로 진행시 변수 다루는 부분에서 정상적으로 구동 되지 않아 수정 하였습니다.

* source 분석

============================================================
#!/usr/bin/lua
dir_cmd="/tele/telegram_cli/bin/sh"
auth_phone={ ["82본인폰번호"] = true }
==================================================================

– 실행할 스트립트의 경로와 본인의 폰번호를 삽입하여 본인의 명령에만 실 행 가능하도록 하였습니다.

==================================================================
function on_msg_receive (msg)
 
 if ( msg.text == 'date' ) then
  send_msg(msg.from.print_name, os.date(), ok_cd, false)
  return
 end

  local recv_msg = msg.text
                local result = {}
                function split(str, delim)
                        local i=1
                        if ( str ~= nil ) then

                                for tmp in string.gmatch(str, "[^%s]+") do
         table.insert( result, tmp )
                                     i = i+1
                                end
                        end
                        return result
                end

       r = split(recv_msg," ")
       cmd = r[1]
       cmd2 = r[2] function on_msg_receive (msg)

==================================================================

– Cli 메신저로 송신을 할 때 변수 처리할 내용들을 저장하는 소스입니다.

Ex) ping 8.8.8.8

– 예제 실행시 cmd=ping cmd2=8.8.8.8 변수처리가 되어 구문을 진행 합니다.

– 변수 값들이 늘어나면 cmd3,cmd4 로 늘려도 되고, 간단하게는 cmd를 배열 처리 하면 될 것 같습니다.

==================================================================
  print("receive : ", cmd, "\n")
  print("Name    : ", msg.from.print_name)
  print("Phone   : ", msg.from.phone) 
  print("Msg Num : ", msg.id)  
  print("to.Name : ", msg.to.print_name)
==================================================================

– 텔레그램에서 문자 입력시 상대의 상대이름, 번화번호, 메시지넘버, 본인이 름, 메시지내용이 출력 됩니다.

==================================================================
  if (msg.to.id == our_id) then
   user_id = msg.from.print_name
  else
   user_id = msg.to.print_name
  End
==================================================================

– secret chat을 지원합니다. msg.to.id == our_id 라면, 즉 받는 사람과 Cli 메신 저 유저가 같다면 일반대화창으로 대화중이고, 그렇지 않는 것은 비밀대화 이다. 비밀대화는 msg.from.print_name이 아닌 msg.to.print_name 에게 메시 지를 보내야 합니다. 아래 루틴이 없다면 폰에서 비밀대화로 메시지를 보 냈더라도 CLI에서는 응답을 일반대화창으로 보냅니다.

==================================================================
   if auth_phone[msg.from.phone] then
   print "auth    : OK "
  else
   print "auth    : invalid user"
   return
  end

  mark_read(user_id, ok_cb, false)
==================================================================

– auth_phone={ [“82본인폰번호“] = true } 지정한 번호와 Cli 메신저로 보낸 번 호와 대조하여 해당 명령어를 수행할지 말지를 결정 합니다.

– 지정된 번호가 아니라면 Cli  메신저 내부에서만 해당 내용을 “auth    :  invalid user” 출력하고, 메시지만 전송합니다.

==================================================================
 if ( cmd == 'Help' ) then
  send_text(user_id, dir_cmd ..'/help.txt', ok_cd, false)
   return
  end 

end
function ok_cb(extra, success, result)
end
==================================================================

– 위 지정된 번호로 정상 비교시, 해당 구문을 구동합니다.

– 여러개의 비교문을 넣어 스크립트 및 mrtg 사진등을 불러와 모니터링이  가 능합니다.

==================================================================

3. Telegram-Cli test



* # ./telegram-cli -k tg-server.pub -s test.lua    ==> 명령어를 입력하면 루아 스크 립트와 같이 실행이 됩니다.



* # ./telegram-cli -k tg-server.pub -s test.lua -d &  ==> 명령어를 입력 하면 데몬 형태로 구동이 가능 합니다.



* 핸드폰에서 Help입력시 수신으로 메시지가 날라옵니다.



* Cli 에서는 수신 받은 메시지와 송신한 메시지를 출력합니다.


* 한글역시 출력이 됩니다.

* ping, nslookup 역시 가능 하고, 이는 사용될 쉘 스크립트를 간단 하게 작성  해 놓은 상태이고, 자동으로 실시간 모니터링을 원한다면, echo를 이용합니다.

* 예를들어 포트 체크시 오픈과 클로즈를 비교 하는 쉘 스크립트 작성 후

echo “msg 이름 할말 ” | /tele/telegram_cli/bin/telegram-cli -k  /tele/telegram_cli/bin/tg-server.pub -W

또는

echo “msg user#코드넘버 할말 ” | /tele/telegram_cli/bin/telegram-cli -k   /tele/telegram_cli/bin/tg-server.pub -W

내용을 삽입 하면 됩니다. 물론 크론텝에 등록 하여 1분에서 5분 주기로  등록 합니다.



* Telegram-Cli 의 장,단점

* 장점

반복 되는 단순한 작업은 외부에서 쉘 스크립트 작성을 통해 빠르게 작업이 가능 하고, 쉘스크립트 작성자의 역량에 따라 편리하고 쉽게 작업 및  모니터링이 가능합니다.

* 단점

1)  centos 5.x 어떤버젼 에서는 프로그램 실행을 종료 했다가 다시 들어가면  구동하는데 시간이 오래 걸리는 반면 5.11에서는 또 정상적으로 구동되는  부분 (그래서 centos 6.5를 사용. 정확하게 파악은 하지 않았습니다.)

 2) 본인 휴대폰으로 인증시 수신 메시지가 알람이 안울린 다는 점. 그래서  작업 폰으로 등록 하고, 본인 폰으로 받아야 되는것 같습니다.

 3) 리시브 받기 위해 데몬 형태로 구동을 하는 방법과,  크론에 등록 하여  에코로 발송하는 방법은 한 계정에서는 같이 사용을 할 수 없습니다.

테스트 결과 데몬형태 구동 후 에코를 날려보니 처음에는 메시지가 정상적으로 가지만 다음부터는 구동을 하지 않았습니다.

동시에 사용하려면 폰이 두대 있어야 된다는 점.(데몬은 본인 폰으로, 에 코는 작업폰으로 하면 될 것 같습니다.)

4) root에서 두개 이상을 인증해서 사용해 볼려고 했습니다. /bin 디렉토리 밑 에 generate 파일이 있어서 키값을 생성 해볼려고 했으나 실패 하였고,

프로그램 다운시 제공하는 키는 한개지만, 같은 서버, 다른 계정으로는 구동이 가능 합니다.(로컬에서 작업 공간 바꿔서 해도 될 것 같습니다. 테스 트는 해보지 않았습니다.)


* 텔레그램 접해보면서 재미있는 생각들이 좀 떠올랐는데 막상 해볼려고 하니, 회사에 사용은 간단한 작업이나 모니터링 이외에 없을 것 같습니다.  잘못하면 위험할 수도 있을꺼 같아서 나중에 다시 구상해 봐야할 것 같습 니다.

*해당 자료는 회사에서 서버 모니터링 텔레그램으로 해봐라 해서 메뉴얼 식으로 만든 내용임  그리고 한글은.. 테스트결과 정상적으로..ㅇㅇ;;

* 한참 이슈일때 해봤으나 나쁜 관계로..이제 올림;; 시간 날때 iscsi 이미지 튜닝도 올리겠음니다.

☆참고 자료☆

좋은진호님 블로그 – http://truefeel.tistory.com/224
텔레그램 README-LUA – https://github.com/vysheng/tg/blob/master/README-LUA
Lua Check if a file exits – http://stackoverflow.com/questions/4990990/lua-check-if-a-file-exists
텔레그램 Messenger Client – http://www.forum-raspberrypi.de/Thread-tutorial-telegram-messenger-client-auf-dem-raspberry?page=2

  • Share:

You Might Also Like

0 개의 댓글