728x90
반응형
#-*- coding: utf-8 -*-
import sys
try:
reload(sys)
sys.setdefaultencoding('utf-8')
except:
pass
import re
import os, json
try:
import requests
except ImportError:
os.system('pip install requests')
import requests
try:
import argparse
except ImportError:
os.system('pip install argparse')
import argparse
try:
from bs4 import BeautifulSoup as bs
except ImportError:
os.system('pip install BeautifulSoup4')
from bs4 import BeautifulSoup as bs
try:
import telepot
except ImportError:
os.system('pip install telepot')
import telepot
def start(url,id,passwd,mode,name,telgm,telgm_alim,telgm_token,telgm_botid):
with requests.Session() as s:
#시놀로지의 SID 먼저 받아온다.
main = url + '/webapi/auth.cgi?api=SYNO.API.Auth&method=login&version=3&account=' + id +'&passwd=' + passwd + '&format=sid&session=dsm_info'
request_headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) \ AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 \ Safari/537.36'}
text = s.get(main, headers=request_headers)#.content
html = text.text
jsonObject = json.loads(html)
jsonArray = jsonObject.get("data").get("sid")
jsontf = jsonObject.get("success")
data = url + '/webapi/entry.cgi?_sid=' + jsonArray + '&api=SYNO.Virtualization.API.Guest.Action&method=' + mode + '&version=1&guest_name=' + name
#print(data)
text = s.get(data, headers=request_headers).content
#html = text.text
jsonObject = json.loads(text)
jsontf = jsonObject.get("success")
#print(jsontf)
if jsontf == True:
msg = '{} 의 {} 실행결과는 성공하였습니다.'.format(name,mode,jsontf)
print(msg)
else:
msg = '{} 의 {} 실행결과는 실패하였습니다.'.format(name,mode,jsontf)
print(msg)
if telgm == '0' :
bot = telepot.Bot(token = telgm_token)
if telgm_alim == '0' :
bot.sendMessage(chat_id = telgm_botid, text=msg, disable_notification=True)
else:
bot.sendMessage(chat_id = telgm_botid, text=msg, disable_notification=False)
# else:
# print(msg)
#print(text)
def main():
parser = argparse.ArgumentParser(prog='시놀로지 VMM ON/OFF Beta', description='시놀로지 VMM ON/OFF Beta',epilog="도움말 확인하세요.")
parser.add_argument('--url', required=True, type=str, help='Url')
parser.add_argument('--id', required=True, type=str, help='시놀로지ID')
parser.add_argument('--passwd', required=True, type=str, help='시놀로지PASSWD')
parser.add_argument('--mode', required=True, default='poweron', type=str, choices=['poweron','poweroff'])
parser.add_argument('--name', required=True, type=str, help='가상머신 이름')
parser.add_argument('--telgm', required=False, type=str,default='1', help='텔레그램사용',choices=['0','1'])
parser.add_argument('--telgm_alim', required=False, type=str, default='1', help='텔레그램알림',choices=['0','1'])
parser.add_argument('--telgm_token', required=False, type=str, help='텔레그램토큰')
parser.add_argument('--telgm_botid', required=False, type=str, help='텔레그램아이디')
args = parser.parse_args()
url = args.url
mode = args.mode
name = args.name
id = args.id
passwd = args.passwd
telgm = args.telgm
telgm_alim = args.telgm_alim
telgm_token = args.telgm_token
telgm_botid = args.telgm_botid
start(url,id,passwd,mode,name,telgm,telgm_alim,telgm_token,telgm_botid)
if __name__=="__main__":
main()
사용방법은
python vmm.py --id test --passwd 1234 --url http://127.0.0.1 --mode poweroff --name win98
위의 명령은 win98 이라는 가상머신을 끄는 명령줄입니다.
python vmm.py --id test --passwd 1234 --url http://127.0.0.1 --mode poweron --name win98
위의 명령은 win98 이라는 가상머신을 켜는 명령줄입니다.
소스코드가 지저분 해보이긴 합니다.
순서가 시놀로지의 API 문서대로 SID 라는것을 받아와서 해당 SID 를 입력하여 가상 머신을 끄고 켜고 합니다.
중간에 가상머신의 이름을 찾는것도 있지만 필요성이 없어서요 ㅎㅎㅎ
아참 모든 소스 코드는 인자값이 대부분 비슷합니다.
이유는 위의 소스코드로 기본으로 만들기 때문입니다.
첫 모듈 불러오는부분과 def main() 부분부터 끝 라인까지는 위의 소스를 토대로 만들어요.
이상입니다.~
728x90
반응형
'파이썬' 카테고리의 다른 글
파이썬 으로 이미지인식 자동 메크로 #2 (0) | 2021.01.25 |
---|---|
파이썬 으로 이미지인식 자동 메크로 #1 (0) | 2021.01.25 |
툰코 다운로더를 수정 해버렸습니다. (0) | 2021.01.24 |
툰코 다운로더 업데이트중... (0) | 2021.01.24 |
웹툰 다운로더... 이어받기... (0) | 2021.01.23 |