Esempio n. 1
0
	def analysisThread(self,server):
		try:
			domainData = self.domainAnalysisCache.pop()
			if domainData:
				if domainData.connect:
					domainConfig.config.domainConnectTimes(domainData.domain,domainData.connect)
				domain = getDomainName(domainData.domain)
				data = self.domainAnalysis[domainData.timeMark][domainData.fromIp][domain if domain else domainData.domain]
				if not "connect" in data:
					data["connect"] = 0
					data["incoming"] = 0
					data["outgoing"] = 0
				
				data["connect"] += domainData.connect
				data["incoming"] += domainData.incoming
				data["outgoing"] += domainData.outgoing
				
				dataExpireTime = time.time()-86400*7 #删除7天之前的数据
				for (k,d) in self.domainAnalysis.items():
					if(k < dataExpireTime):
						del self.domainAnalysis[k]
						break
				
				domainAnalysisJson = json.dumps(self.domainAnalysis)
				open(domainAnalysisConfig, "wt").write(domainAnalysisJson)

		except:
			log.log(3,"analysis error!")
		server.addDelay(10, analysis.analysisThread,server)
Esempio n. 2
0
	def analysisThread(self,server):
		try:
			domainData = self.domainAnalysisCache.pop()
			if domainData:
				if domainData.connect:
					domainConfig.config.domainConnectTimes(domainData.domain,domainData.connect)
				domain = getDomainName(domainData.domain)
				data = self.domainAnalysis[domainData.timeMark][domainData.fromIp][domain if domain else domainData.domain]
				if not "connect" in data:
					data["connect"] = 0
					data["incoming"] = 0
					data["outgoing"] = 0
				
				data["connect"] += domainData.connect
				data["incoming"] += domainData.incoming
				data["outgoing"] += domainData.outgoing
				
				dataExpireTime = time.time()-86400*7 #删除7天之前的数据
				for (k,d) in self.domainAnalysis.items():
					if(k < dataExpireTime):
						del self.domainAnalysis[k]
						break
				
				domainAnalysisJson = json.dumps(self.domainAnalysis)
				open(domainAnalysisConfig, "wt").write(domainAnalysisJson)

		except:
			log.log(3,"analysis error!")
		server.addDelay(5, analysis.analysisThread,server)
Esempio n. 3
0
	def domainConnectTimes(self, domain, times):
		if domain in self.setting:
			data = self.setting[domain]
			data["connectTimes"] += times
			self.save()
		else:
			_domain = getDomainName(domain)
			if _domain and not _domain == domain:
				self.domainConnectTimes(_domain, times)
Esempio n. 4
0
	def domainConnectTimes(self,domain,times):
		if domain in self.setting:
			data = self.setting[domain]
			data["connectTimes"] += times
			self.save()
		else:
			_domain = getDomainName(domain)
			if not _domain == domain:
				self.domainConnectTimes(_domain, times)
Esempio n. 5
0
	def get(self,fromIp,domain,timeMark):
		try:
			url = urlparse.urlparse(domain)
			domain = url.netloc if len(url.netloc)>0 else domain
		except:
			pass
		
		domain = hostParser.getDomainName(domain)
		for s in self.siteList:
			if domain == s.domain and fromIp == s.fromIp and timeMark == s.timeMark:
				return s

		site = analysisSite(domain,fromIp,timeMark)
		self.siteList.append(site)
		return site
Esempio n. 6
0
	def get(self):
		opt = self.get_argument('opt',"").encode('utf8')
		if opt == "":
			self.render("admin_temp.html")
		else:
			if opt == "puturl":
				addr,port = parserUrlAddrPort(self.get_argument("url").encode('utf8'))
				if addr:
					domain = getDomainName(addr)
					if domainConfig.config.addDomain(domain):
						domainConfig.config.save()
				self.redirect("/admin", False)
			else:
				domain = self.get_argument("domain",default="").encode('utf8')
				ok = False
				if opt == "delete":
					ok = domainConfig.config.removeDomain(domain)
				elif opt == "close":
					ok = domainConfig.config.closeDomain(domain)
				elif opt == "open":
					ok = domainConfig.config.openDomain(domain)
				if ok:
					domainConfig.config.save()
				self.redirect("/admin", False)
	def onHTTP(self, header, method, path, query, post):
# 		log.log(1,self,header,method,path,query,post)
		if method == "POST":
			postJson = json.loads(post)
			opt = postJson["opt"]
			respons = {}

			if(opt == "status"):
				respons = self.server.dumpConnects()
			elif(opt == "serverList"):
				respons["pac"] = "http://" + self.messageParse.getHeader("host") + "/pac"
				respons["list"] = settingConfig.setting(settingConfig.remoteServerList)
			elif opt == "setServerList":
				settingConfig.setting(settingConfig.remoteServerList, postJson["data"])
				respons["status"] = "ok"
# 			elif opt == "testRemoteProxy":
# 				respons["status"] = ""
			elif opt == "domainList":
				
				if "action" in postJson:
					action = postJson["action"]
					domain = postJson["domain"]
					respons={"status":"ok"}
					if action == "delete":
						domainConfig.config.removeDomain(domain)
					elif action == "open":
						domainConfig.config.openDomain(domain)
					elif action == "close":
						domainConfig.config.closeDomain(domain)
					else:
						respons={"status":"no found action"}
				else:
					respons["domainList"] = domainConfig.config.getDomainListWithAnalysis()
			elif opt == "analysisData":
				respons["analysisData"] = analysis.getAnalysisData(
																selectDomain=postJson["domain"],
																startTime=postJson["startTime"],
																todayStartTime=postJson["todayStartTime"]
																)
			elif opt == "addDomain":
				url = postJson["url"]
				host = parserUrlAddrPort(url)[0]
				if host:
					host = getDomainName(host)
				else:
					host = url if getDomainName(url) else ""
				respons["status"] = "ok" if domainConfig.config.addDomain(host) else "error"
			self.reseponse(respons,connection=self.messageParse.connection())
		elif path == "/pac":
			content = self.getFileContent("/pac.js")
			domainList = domainConfig.config.getDomainOpenedList()
			domainListJs = ""
			for domain in domainList:
				domainListJs += "A(\"" + domain + "\")||"
			content = content.replace("{{domainList}}", domainListJs)
			content = content.replace("{{proxy_ddr}}", self.messageParse.getHeader("host"))
			self.reseponse(content,connection=self.messageParse.connection())
		else:
			if path == "/":
				path = "/index.html"
			content = self.getFileContent(path)
			if content:
				
				self.reseponse(content,ContentType=get_mime_type(path),connection=self.messageParse.connection())
			else:
				self.reseponse("\"" + path + "\" not found", code=404,connection=self.messageParse.connection())