Exemple #1
0
 def vserial_ready(self, gate):
     if not self.TRCloudapi:
         self.TRCloudapi = CloudApiv1(self.TRAccesskey)
     gate_online = False
     app_ready = False
     app_info = {}
     gate_status_ret = self.TRCloudapi.get_gate_status(gate)
     if gate_status_ret:
         if gate_status_ret['message'] == "ONLINE":
             gate_online = True
         else:
             gate_online = False
     if gate_online:
         gate_apps_ret = self.TRCloudapi.get_gate_apps(gate)
         if gate_apps_ret:
             gate_apps = gate_apps_ret['message']
             for app in gate_apps:
                 if app.get('info').get('inst') == "freeioe_Vserial_npc":
                     app_info = app.get('info')
                     break
             for app in gate_apps:
                 if app.get('info').get(
                         'inst') == "freeioe_Vserial_npc" and app.get(
                             'info').get(
                                 'name') == "APP00000378" and app.get(
                                     'info').get('running'):
                     app_ready = True
                     break
     return gate_online, {"ready": app_ready, "info": app_info}
Exemple #2
0
 def vserial_action(self, gate, action):
     now_str = str(time.time())
     action_data = {
         "install": {
             "id": gate + '/freeioe_Vserial_npc/install/' + now_str,
             "device": gate,
             "data": {
                 "inst": "freeioe_Vserial_npc",
                 "name": "APP00000378",
                 "version": 'latest',
                 "conf": {}
             }
         },
         "start": {
             "id": gate + '/freeioe_Vserial_npc/start/' + now_str,
             "device": gate,
             "data": {
                 "inst": "freeioe_Vserial_npc"
             }
         },
         "stop": {
             "id": gate + '/freeioe_Vserial_npc/stop/' + now_str,
             "device": gate,
             "data": {
                 "inst": "freeioe_Vserial_npc"
             }
         },
         "uninstall": {
             "id": gate + '/freeioe_Vserial_npc/uninstall/' + now_str,
             "device": gate,
             "data": {
                 "inst": "freeioe_Vserial_npc"
             }
         },
         "upgrade": {
             "id": gate + '/freeioe_Vserial_npc/upgrade/' + now_str,
             "device": gate,
             "data": {
                 "inst": "freeioe_Vserial_npc",
                 "name": "APP00000378",
                 "version": 'latest',
                 "conf": {}
             }
         }
     }
     if not self.TRCloudapi:
         self.TRCloudapi = CloudApiv1(self.TRAccesskey)
     ret, gate_action_ret = None, None
     if action_data.get(action):
         ret, gate_action_ret = self.TRCloudapi.post_action_to_app(
             action, action_data.get(action))
     return ret, gate_action_ret
Exemple #3
0
 def start_vserial(self):
     if not self._vserial_is_running:
         if not self.TRCloudapi:
             self.TRCloudapi = CloudApiv1(self.TRAccesskey)
         self.enable_heartbeat(True, 60)
         if not self.NPSApi:
             self.NPSApi = npsApiv1(self.nps_host)
         if not self.__auth_key:
             self.nps_authcode()
         if not self.userinfo['tid']:
             self.nps_tunnel()
         if self.userinfo['tid']:
             now_time = str(int(time.time()))
             auth_key_md5 = hashlib.md5(
                 (self.__auth_key +
                  now_time).encode(encoding="UTF-8")).hexdigest()
             if not self.userinfo['client_status']:
                 # print("用户 {0} 当前禁用".format(self.userinfo["name"]))
                 ret = self.NPSApi.nps_api_post(
                     "/client/changestatus/", {
                         "auth_key": auth_key_md5,
                         "timestamp": now_time,
                         "id": self.userinfo['cid'],
                         "status": 1
                     })
             if not self.userinfo['tunnel_status']:
                 # print("隧道 {0} 当前禁用".format(self.userinfo["tunnel_alias"]))
                 ret = self.NPSApi.nps_api_post(
                     "/index/start/", {
                         "auth_key": auth_key_md5,
                         "timestamp": now_time,
                         "id": self.userinfo['tid']
                     })
             # 检测网关是否在线
             gate_status_ret = self.TRCloudapi.get_gate_status(
                 self.userinfo['gate'])
             if gate_status_ret:
                 if gate_status_ret['message'] == "ONLINE":
                     self._gate_online = True
                     self.userinfo['gate_status'] = "ONLINE"
                 else:
                     self._gate_online = False
                     self.userinfo['gate_status'] = "OFFLINE"
             if self._gate_online:
                 model = sn_model_map.get(
                     self.userinfo.get("gate")[0:6]) or sn_model_map.get(
                         self.userinfo.get("gate")[0:7]) or "C202"
                 gate_port = model_port_map.get(model).get(
                     self.userinfo.get("gate_port_name")) or "/dev/ttyS1"
                 gate_vserial_command = {
                     "port": gate_port,
                     "nps": {
                         "server_addr":
                         self.userinfo['tunnel_host'] + ":7088",
                         "vkey": self.userinfo['vkey']
                     },
                     "user_id": self.userinfo['name']
                 }
                 gate_datas = {
                     "id":
                     self.userinfo['gate'] + '/send_command/start/' +
                     str(time.time()),
                     "device":
                     self.userinfo['gate'],
                     "data": {
                         "device":
                         self.userinfo['gate'] + ".freeioe_Vserial_npc",
                         "cmd": "start",
                         "param": gate_vserial_command
                     }
                 }
                 ret, ret_content = self.TRCloudapi.post_command_to_cloud(
                     gate_datas)
                 # print(json.dumps(ret, sort_keys=False, indent=4, separators=(',', ':')))
                 if ret:
                     if ret_content["gate_mes"]["result"]:
                         local_ports = self.list_all()
                         local_newPort = None
                         for x in range(0, len(local_ports) + 1):
                             local_newPort = "COM" + str(x + 1)
                             if local_newPort not in local_ports:
                                 break
                         self.userinfo["local_port_name"] = local_newPort
                         self._vserial_is_running = True
                         self._start_time = time.time()
                         self.userinfo["info"] = {
                             "user": self.userinfo.get("name"),
                             "gate": self.userinfo.get("gate"),
                             "gate_port":
                             self.userinfo.get("gate_port_name"),
                             "serial_driver": "vspax"
                         }
                         handler = TcpClientHander(
                             self.userinfo.get("local_port_name"),
                             self.userinfo.get("tunnel_host"),
                             int(self.userinfo.get("tunnel_port")),
                             self.userinfo.get("info"))
                         self.add(handler)
                         return self._vserial_is_running, self.userinfo
                     else:
                         self.clean_cfg()
                         return False, "下发指令到网关不正常,请检查后重试"
                 else:
                     self.clean_cfg()
                     return False, "网关Npc服务启动不正常,请检查后重试"
             else:
                 self.clean_cfg()
                 return False, "网关不在线,或你无权访问此网关,请检查后重试"
         else:
             self.clean_cfg()
             return False, "NPS连接错误或无此用户 {0} ".format(
                 self.userinfo.get("name"))
     else:
         return False, "用户 {0} 正在使用中……,如需重新配置,请先停止再启动".format(
             self.userinfo.get("name"))
Exemple #4
0
	def start_vnet(self):
		if not self._vnet_is_running:
			self.check_frpc_service()
			self.check_tinc_service()
			if not self.FRPApi:
				self.FRPApi = frpcManager(self.frps_host)
			if not self.TRCloudapi:
				self.TRCloudapi = CloudApiv1(self.TRAccesskey)
			self.enable_heartbeat(True, 60)
			gate_status_ret = self.TRCloudapi.get_gate_status(self.userinfo['gate'])
			if gate_status_ret:
				if gate_status_ret['message'] == "ONLINE":
					self._gate_online = True
					self.userinfo['gate_status'] = "ONLINE"
				else:
					self._gate_online = False
					self.userinfo['gate_status'] = "OFFLINE"
			if self._gate_online:
				self.gate_vpn_data()
				local_vnet_ip = self.userinfo["local_vnet_ip"]
				local_vnet_netmask = self.userinfo["gate_lan_netmask"]
				if local_vnet_ip and is_ipv4(local_vnet_ip):
					cfgfile = os.getcwd() + r'\vnet\_frpc\frpc.ini'
					self.FRPApi.wirte_common_frpcini(cfgfile, {"server_addr": self.userinfo.get('tunnel_host'),
					                                           "server_port": self.frps_port, "token": self.frps_token})
					self.FRPApi.add_proxycfg_frpcini(cfgfile, {
						"vnet_bridge@" + self.userinfo.get('gate'): frpc_proxy['bridge']})
					self.wmi_in_thread(self.prepend_tap, "vnet", [local_vnet_ip], ["255.255.255.0"])
					self.services_start()
					if self._service_is_running:
						local_proxy = None
						for i in range(3):
							self._log.info(str(i) + ' query local_proxy_status!')
							local_proxy = self.FRPApi.local_frpcproxy_status("vnet_bridge@" + self.userinfo.get('gate'))
							if local_proxy:
								break
							time.sleep(i + 2)
						if local_proxy:
							if local_proxy['status'] == 'running':
								self.userinfo['client_online'] = 'online'
								peer_host = local_proxy['remote_addr'].split(':')[0]
								self.userinfo['tunnel_port'] = local_proxy['remote_addr'].split(':')[1]
								self._log.info('post vnet start command to gate: ' + self.userinfo.get("gate"))
								gate_vnet_config = {"net": "bridge", "Address": self.userinfo['tunnel_host'],
								                    "Port": str(self.userinfo['tunnel_port']), "proxy_name": "vnet_bridge@" + self.userinfo.get('gate'),
								                    "user_id": self.userinfo['name']}
								gate_datas = {"id": self.userinfo['gate'] + '/send_command/start/' + str(time.time()),
								              "device": self.userinfo['gate'],
								              "data": {"device": self.userinfo['gate'] + ".freeioe_Vnet_frpc", "cmd": "start",
								                       "param": gate_vnet_config}}
								ret, ret_content = self.TRCloudapi.post_command_to_cloud(gate_datas)
								# print(json.dumps(ret, sort_keys=False, indent=4, separators=(',', ':')))
								if ret:
									if ret_content["gate_mes"]["result"]:
										self._vnet_is_running = True
										self._start_time = time.time()
										return self._vnet_is_running, self.userinfo
									else:
										print(json.dumps(ret_content, sort_keys=False, indent=4, separators=(',', ':')))
										self.services_stop()
										return False, "下发指令到网关不正常,请检查后重试"
								else:
									self.services_stop()
									return False, "网关VPN服务启动不正常,请检查后重试"
							else:
								self.services_stop()
								return False, "本地代理服务(frpc_vnet)工作不正常,请检查frpc日志"
						else:
							self.services_stop()
							return False, "本地代理服务(frpc_vnet)工作不正常,请检查frpc日志"
					else:
						self.services_stop()
						return False, "本地服务启动不正常,请检查后重试"
				else:
					return False, "无法获取到网关LAN口IP地址,网关可能未安装应用,或未开启数据上传,请检查后重试"
			else:
				return False, "网关不在线,或你无权访问此网关,请检查后重试"
		else:
			return False, "用户 {0} 正在使用中……,如需重新配置,请先停止再启动".format(self.userinfo.get("name"))
Exemple #5
0
	def start_vnet(self):
		if not self._vnet_is_running:
			self.check_tinc_service()
			if not self.TRCloudapi:
				self.TRCloudapi = CloudApiv1(self.TRAccesskey)
			self.enable_heartbeat(True, 60)
			if not self.NPSApi:
				self.NPSApi = npsApiv1(self.nps_host)
			if not self.__auth_key:
				self.nps_authcode()
			if not self.userinfo['tid']:
				# print("get tid")
				self.nps_tunnel()
			if self.userinfo['tid']:
				now_time = str(int(time.time()))
				auth_key_md5 = hashlib.md5((self.__auth_key + now_time).encode(encoding="UTF-8")).hexdigest()
				if not self.userinfo['client_status']:
					# print("用户 {0} 当前禁用".format(self.userinfo["name"]))
					ret = self.NPSApi.nps_api_post("/client/changestatus/",
					                   {"auth_key": auth_key_md5, "timestamp": now_time, "id": self.userinfo['cid'],
					                    "status": 1})
				if not self.userinfo['tunnel_status']:
					# print("隧道 {0} 当前禁用".format(self.userinfo["tunnel_alias"]))
					ret = self.NPSApi.nps_api_post("/index/start/",
					                   {"auth_key": auth_key_md5, "timestamp": now_time, "id": self.userinfo['tid']})
				# 检测网关是否在线
				gate_status_ret = self.TRCloudapi.get_gate_status(self.userinfo['gate'])
				if gate_status_ret:
					if gate_status_ret['message'] == "ONLINE":
						self._gate_online = True
						self.userinfo['gate_status'] = "ONLINE"
					else:
						self._gate_online = False
						self.userinfo['gate_status'] = "OFFLINE"
				if self._gate_online:
					self.gate_vpn_data()
					local_vnet_ip = self.userinfo["local_vnet_ip"]
					local_vnet_netmask = self.userinfo["gate_lan_netmask"]
					if local_vnet_ip and is_ipv4(local_vnet_ip):
						self.nps_changevk()
						time.sleep(0.5)
						self.wmi_in_thread(self.prepend_tap, "vnet", [local_vnet_ip], ["255.255.255.0"])
						self.services_start()
						gate_vnet_config = {"net": "bridge", "Address": self.userinfo['tunnel_host'],
						                    "Port": str(self.userinfo['tunnel_port']), "proxy_name": "vnet_npc_proxy",
						                    "user_id": self.userinfo['name']}
						gate_datas = {"id": self.userinfo['gate'] + '/send_command/start/' + str(time.time()),
						              "device": self.userinfo['gate'],
						              "data": {"device": self.userinfo['gate'] + ".freeioe_Vnet_npc", "cmd": "start",
						                       "param": gate_vnet_config}}
						ret, ret_content = self.TRCloudapi.post_command_to_cloud(gate_datas)
						# print(json.dumps(ret, sort_keys=False, indent=4, separators=(',', ':')))
						if ret:
							if ret_content["gate_mes"]["result"]:
								self._vnet_is_running = True
								self._start_time = time.time()
								return self._vnet_is_running, self.userinfo
							else:
								self.services_stop()
								self.clean_cfg()
								return False, "下发指令到网关不正常,请检查后重试"
						else:
							self.services_stop()
							self.clean_cfg()
							return False, "网关VPN服务启动不正常,请检查后重试"
					else:
						self.services_stop()
						self.clean_cfg()
						return False, "无法获取正确的本地Vnet IP,网关可能未安装应用,或未开启数据上传,请检查后重试"
				else:
					self.services_stop()
					self.clean_cfg()
					return False, "网关不在线,或你无权访问此网关,请检查后重试"
			else:
				self.services_stop()
				self.clean_cfg()
				return False, "NPS连接错误或无此用户 {0} ".format(self.userinfo.get("name"))
		else:
			return False, "用户 {0} 正在使用中……,如需重新配置,请先停止再启动".format(self.userinfo.get("name"))
Exemple #6
0
 def online(self, sn):
     if not self.TRCloudapi:
         self.TRCloudapi = CloudApiv1(self.TRAccesskey)
     return self.TRCloudapi.get_gate_status(sn)
Exemple #7
0
 def gatelist(self):
     if not self.TRCloudapi:
         self.TRCloudapi = CloudApiv1(self.TRAccesskey)
     return self.TRCloudapi.get_gate_list()