Esempio n. 1
0
 def serverToSource(self):
     error = False
     baseServer.log(1, self.threadid, "----", "<")
     if self.lock.get() == "ok":
         try:
             count = 0
             while True:
                 if self.orignConn is None:
                     break
                 baseServer.log(1, self.threadid, "orignConn", "recv")
                 tmp = self.orignConn.recv(DDDProxyConfig.cacheSize)
                 if not tmp:
                     break
                 count += len(tmp)
                 baseServer.log(1, self.threadid, "localProxy", "send", tmp)
                 DDDProxySocketMessage.send(self.localProxy, tmp)
                 baseServer.log(1, self.threadid, "localProxy", "send", "end")
                 self.markActive("orignConn recv")
         except socket.timeout:
             pass
         except:
             baseServer.log(3, self.threadid, "serverToSource error!!!")
             error = True
     baseServer.log(1, self.threadid, "----", ">")
     return not error
	def sourceToServer(self):
		baseServer.log(1, self.threadid, "}}}}", "<")
		threading.currentThread().name = "worker%s-%s-send"%(self.threadid,self.addr)
		try:
			socetParser = socetMessageParser()
			count = 0
			while self.source != None:
				tmp = self.source.recv(DDDProxyConfig.cacheSize)
				if not tmp:
					break
				baseServer.log(1, "}}}}", tmp)
				length = len(tmp)
				self.dataCountSend += length;
				count += length;
				DDDProxySocketMessage.send(self.remoteSocket, tmp)
				
				#以下数据是为了时统计用
				if socetParser is not None:
					socetParser.putMessage(tmp)
					if socetParser.messageStatus():
						self.httpMessage = socetParser.httpMessage()
						host, port = hostParser.parserUrlAddrPort(self.httpMessage[1] if self.httpMessage[0] != "CONNECT" else "https://" + self.httpMessage[1])
						threading.currentThread().name = "worker%s-%s-%s:%d-send"%(self.threadid,self.addr,host,port)
						self.hostPort = (host, port)
						
						
						#代理host黑名单
						ipAddr = re.match("(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})", host)
						foundIp = False
						if ipAddr:
							ipAddr = ipAddr.groups()
							mathIp = "%s.%s.%s" % (ipAddr[0], ipAddr[1], ipAddr[2]);
							for i in self.blockHost:
								if i.startswith(mathIp):
									foundIp = True
									break
						if foundIp or host in self.blockHost:
							baseServer.log(2, self.threadid, "block", host)
							break
						
						baseServer.log(2, self.addr, self.httpMessage)
						self.domainAnalysisAddData("connect", 1)
						socetParser = None
		
				if self.domainAnalysisAddData("incoming", count):
					count = 0
				self.markActive()
		except socket.timeout:
			pass
		except:
			baseServer.log(3, self.threadid, "}}}} error!")
# 		sendPack.end(self.remoteSocket)
		threading.currentThread().name = "worker%s-IDLE-send"%(self.threadid)
		baseServer.log(1, self.threadid, "}}}}", ">")
		self.close()
Esempio n. 3
0
	def run(self):
		if not self.AgreeConnIp(self.addr):
			baseServer.log(2, self.threadid, "not agree ip %s connect!" % (self.addr))
			return;

		baseServer.log(1, self.threadid, "..... threadid start")
		self.connRemoteProxyServer()
		DDDProxySocketMessage.sendOne(self.remoteSocket, "[%d]" % (self.threadid))
		baseServer.log(1, self.threadid, "threadid mark")
		thread.start_new_thread(self.sourceToServer, tuple())
		threading.currentThread().name = "%d-%s-recv"%(self.threadid,self.addr)
		self.serverToSource()
		baseServer.log(1, self.threadid, "!!!!! threadid end")
Esempio n. 4
0
    def sourceToServer(self):
        try:
            # 接收消息头
            socetParser = socetMessageParser()
            hasData = False
            for data in DDDProxySocketMessage.recv(self.localProxy):
                baseServer.log(1, self.threadid, ">>>>>", data, len(data))
                socetParser.putMessage(data)
                if socetParser.messageStatus():
                    self.httpMessage = socetParser.httpMessage()
                    hasData = True
                    break
                self.markActive("recv header")

            if not hasData:
                return False

                # 连接原始服务器
            self.method, path, protocol = self.httpMessage
            if self.method:
                baseServer.log(2, "httpMessage", self.threadid, self.method, path, protocol)
            if self.method == "CONNECT":
                self.httpData = False
                self.openOrignConn("https://" + path)
                baseServer.log(1, self.threadid, "CONNECT ", path)
                DDDProxySocketMessage.send(self.localProxy, "HTTP/1.1 200 OK\r\n\r\n")
            else:
                self.httpData = True
                baseServer.log(1, self.threadid, ">>>>>", "openOrignConn")
                self.openOrignConn(path)
                baseServer.log(1, self.threadid, ">>>>>", socetParser.messageData())
                self.orignConn.send(socetParser.messageData())

            self.lock.put("ok")

            # 转发原始请求到原始服务器
            for data in DDDProxySocketMessage.recv(self.localProxy):
                self.orignConn.send(data)
                self.markActive("localProxy recv")

            self.close()
            return True
        except TypeError:
            pass
        except:
            baseServer.log(3, self.threadid, "sourceToServer error!!!")
        self.lock.put("error")
        self.close()
        return False
	def run(self):
		if not self.AgreeConnIp(self.addr):
			baseServer.log(2, self.threadid, "not agree ip %s connect!" % (self.addr))
			return;

		baseServer.log(1, self.threadid, "..... threadid start")
		host,port,auth = setting[settingConfig.remoteServerKey]
		self.connRemoteProxyServer(host,port,auth)
		mark = "[%s,%s]" % (self.addr,self.threadid)
		DDDProxySocketMessage.sendOne(self.remoteSocket,mark )
		baseServer.log(1, self.threadid, "threadid mark")
		
		mainThreadPool.callInThread(self.sourceToServer)
# 		thread.start_new_thread(self.sourceToServer, tuple())
		
		self.serverToSource()
		baseServer.log(1, self.threadid, "!!!!! threadid end")
	def close(self):
		try:
			if self.source:
				self.source.shutdown(0)
		except:
			pass
		self.source = None
		try:
			if self.remoteSocket:
				DDDProxySocketMessage.end(self.remoteSocket)
		except:
			pass
		try:
			if self.remoteSocket:
				self.remoteSocket.shutdown(0)
		except:
			pass
		self.remoteSocket = None
Esempio n. 7
0
	def serverToSource(self):
		baseServer.log(1, self.threadid, "-<")
		try:
			for data in DDDProxySocketMessage.recv(self.remoteSocket):
				self.source.send(data)
				self.markActive()
				self.domainAnalysisAddData("outgoing", len(data))
		except:
			pass
		baseServer.log(1, self.threadid, "->")
		self.close()
Esempio n. 8
0
    def run(self):
        try:
            if self.check():
                self.localProxyMark = DDDProxySocketMessage.recvOne(self.localProxy)
                baseServer.log(1, self.threadid, "self.localProxyMark", self.localProxyMark)

                thread.start_new_thread(self.sourceToServer, tuple())
                self.serverToSource()
        except:
            baseServer.log(3)
        self.close()

        baseServer.log(1, self.threadid, "!!!!! threadid end")
Esempio n. 9
0
    def close(self):

        try:
            if self.orignConn:
                self.orignConn.shutdown(0)
            self.orignConn = None
        except:
            pass

        try:
            if self.localProxy:
                DDDProxySocketMessage.end(self.localProxy)
        except:
            pass

        try:
            if self.localProxy:
                self.localProxy.shutdown(0)
            self.localProxy = None
        except:
            pass

        self.lock.put("close")
Esempio n. 10
0
	def serverToSource(self):
		threading.currentThread().name = "worker%s-%s-recv"%(self.threadid,self.addr)
		baseServer.log(1, self.threadid, "-<")
		try:
			count = 0
			for data in DDDProxySocketMessage.recv(self.remoteSocket):
				self.source.send(data)
				self.markActive()
				length = len(data)
				self.dataCountRecv += length
				count += length
				if self.domainAnalysisAddData("outgoing", count):
					count = 0
		except:
			pass
		threading.currentThread().name = "worker%s-IDLE-recv"%(self.threadid)
		baseServer.log(1, self.threadid, "->")
		self.close()
Esempio n. 11
0
	def getInThread(self):
		opt = self.get_argument("opt", default="status")
		if opt:
			opt = opt.encode("utf8")
		
# 		threading.currentThread().name = "statusPage-%s"%(opt)
		if opt == "remoteProxy":
			status = "connected"
			try:
				port = self.get_argument("port", default=0)
				port = port if port else 8083
				test = proxyServerHandler(conn=None, addr=["", ""], threadid=None)
				test.connRemoteProxyServer(host=self.get_argument("host", default=""),
										port=int(port),
										auth=self.get_argument("auth", default=""))
				DDDProxySocketMessage.sendOne(test.remoteSocket, "[%s,%s]" % ("0.0.0.0", "test"))
				DDDProxySocketMessage.sendOne(test.remoteSocket,
															"CONNECT www.google.com:443 HTTP/1.1\r\n\r\n");
				status = "connected,auth no pass"
				for d in  DDDProxySocketMessage.recv(test.remoteSocket):
					if d == "HTTP/1.1 200 OK\r\n\r\n":
						status = "connected"
				test.close()
			except:
				printError()
				status = "can not connect"
			self.write({"status":status})
		elif opt == "pac_setting_test_local":
			self.write({"status":"fail"})
		else:
			working = []
			working.extend(t.name for t in mainThreadPool.working)
			idle = []
			idle.extend(t.name for t in mainThreadPool.waiters)
			
			connectList = {}
			for handler in localProxyServer.theadList:
				try:
					addrList = None
					addr = self.gethostbyaddr(handler.addr)
					if addr in connectList:
						addrList = connectList[addr]
					else:
						connectList[addr] = addrList = []
					addrList.append([handler.httpMessage[1] if (type(handler.httpMessage) == tuple and len(handler.httpMessage) > 2) else handler.httpMessage,
									handler.remoteServer,
									handler.dataCountSend,
									handler.dataCountRecv])
				except:
					printError()
			data = {
				"count":{
						"worker":len(mainThreadPool.working),
						"idle":len(mainThreadPool.waiters)
						},
				"thread":{
# 						"worker":working,
# 						"idle":idle
						"connect":connectList
						}
				}
			self.write(data)
		self.finish()