파이썬

시놀로지의 VMM 을 원격으로 켜고 끄자?

귀신이보인다 2021. 6. 23. 15:18
728x90
반응형

생각보다 API 가 공개가 되어 쉽게 해결이 되었습니다.

 

블로그장은 일단 부딪혀 보고 않되면 되게 하는 성격이라 좀 더러버요 ㅎㅎㅎ

 

참고로 제 부하직원 하지 마세요 ㅎㅎㅎ 그럼 힘들고 고달플겁니다.

 

아 개인적인 이야기는 여기서 그만하고 여튼 전 시놀로지를 이용하면서 가상으로 안드로이드와 우분투를 현재 동작시키고 있습니다.

 

안드로이드는 특정 앱의 적립을 위해서 켜놓고 있으며 우분투는 도커 빌드를 위하여 켜놓고 있습니다.

 

상시 가상 컴퓨터를 켜놓게 되면 시놀로지의 자원을 많이 사용하게 됩니다.

 

우분투의 경우에는 빌드를 위한 가상컴퓨터이니 꺼두어도 상관없겠습니다.

 

공개할 소스는 이렇습니다

 

import requests
import argparse

def start2(url, id, passwd):
	s = requests.Session()
	data = 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 = requests.get(data, headers=request_headers).content
	print(text)

def start(url, sid, mode, name):
	s = requests.Session()
	data = url + '/webapi/entry.cgi?_sid=' + sid + '&api=SYNO.Virtualization.API.Guest.Action&method=' + mode + '&version=1&guest_name=' + name
	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 = requests.get(data, headers=request_headers).content
	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('--sid', required=False, type=str, help='SID')
	parser.add_argument('--id', required=False, type=str, help='시놀로지ID')
	parser.add_argument('--passwd', required=False, type=str, help='시놀로지PASSWD')
	parser.add_argument('--mode', required=False, default='none', type=str, choices=['poweron','poweroff'])
	parser.add_argument('--name', required=False, type=str, help='가상머신 이름')
	args = parser.parse_args()
	url = args.url
	sid = args.sid
	mode = args.mode
	name = args.name
	id = args.id
	passwd = args.passwd

	if mode == 'poweron' or mode == 'poweroff':
		print("ad")
		start(url, sid, mode, name)
	if mode == 'none':
		start2(url, id, passwd)
if __name__=="__main__":
	main()  

 

간단하면서도 무언가 이상하죠??

이 소스를 이용하기 위해선 시놀로지 API 에서 원하는 SID 번호라는게 존재합니다.

처음에는 SID 번호를 받기 위해서는 

 

python 저장한이름.py --url 본인의시놀로지주소:포트번호 --id 시놀로지의아이디 --passwd 시놀로지의비밀번호

이렇게 입력하시면

b'{"data":{"sid":"블라블라많이깁니다."},"success":true}\n'

위와 같이 나오게 됩니다.

 

그러면 끝이나는것이고요.

이제 사용하기 위해서는 시놀로지의 가상컴퓨터 이름을 본인이 알고 계시니 전 모르겠습니다.

여튼 vmm 가상컴퓨터에 들어가보시면 목록이 쭉 나오게 되는데 이름 탭의 그 이름이 --name 으로 들어갑니다.

자 이제 가상컴퓨터를 꺼보겠습니다.

 

python 저장한이름.py --url 본인의시놀로지주소:포트번호 --sid 블라블라 --name 가상컴퓨터이름 --mode poweroff

이렇게 입력하시면 가상컴퓨터가 꺼질겁니다.

켜기 위해서는 --mode poweron 이렇게 해주시면 되십니다.

728x90
반응형