def _receiveByAvailable(self):
		'''
		Receive as much as possible prior to timeout.
		
		@rtype: string
		@return: received data.
		'''
		self._socket.settimeout(self._timeout)
		
		try:
			ret = self._socket.recv(4096)
			
			if not ret:
				raise PublisherSoftException("Socket is closed")
			
			if Peach.Engine.engine.Engine.debug:
				print "<<<<<<<<<<<<<<<<<"
				print "tcp.Tcp.receive():"
				self.hexPrint(ret)
			
			self.buff += ret
			
		except socket.error, e:
			if str(e).find('The socket operation could not complete without blocking') == -1:
				pass
			
			else:
				raise PublisherSoftException("recv failed: " + str(sys.exc_info()[1]))
Ejemplo n.º 2
0
    def accept(self):
        print("[*] Waiting for incoming connection")
        sys.stdout.flush()
        client, addr = self._listen.accept()

        print("[*] Connected by %s:%s" % (addr[0], str(addr[1])))
        print("[*] Wrapping socket to TLS/SSL")
        try:
            self._socket = tlslite.api.TLSConnection(client)
        except:
            client.close()
            value = sys.exc_info()[1]
            msg = "[!] Wrapping socket failed, reason: %s" % value
            raise PublisherSoftException(msg)

        print("[*] Performing TLS/SSL handshake)")
        try:
            self._socket.handshakeServer(
                certChain=self.certChain,
                privateKey=self.privateKey,
                #reqCert=True,
                nextProtos=[self.version])
        except:
            self.close()
            value = sys.exc_info()[1]
            msg = "[!] Performing TLS/SSL handshake failed, reason: %s" % value
            raise PublisherSoftException(msg)
        print("done!")
	def _receiveBySize(self, size):
		'''
		This is now a buffered receiver.
		
		@rtype: string
		@return: received data.
		'''
		
		# Do we already a have it?
		if size+self.pos < len(self.buff):
			ret = self.buff[self.pos:self.pos+size]
			self.pos += size
			return ret
		
		# Only ask for the diff of what we don't already have
		diffSize = (self.pos+size) - len(self.buff)
		
		try:
			if Peach.Engine.engine.Engine.debug:
				print "Asking for %d, need %d, have %d" % (size, diffSize, len(self.buff)-self.pos)
			
			self._socket.settimeout(self._timeout)
			ret = self._socket.recv(diffSize)
			
			if not ret:
				# Socket was closed
				if Peach.Engine.engine.Engine.debug:
					print "Socket is closed"
				
				raise PublisherSoftException("Socket is closed")
			
			if Peach.Engine.engine.Engine.debug:
				print "<<<<<<<<<<<<<<<<<"
				print "tcp.Tcp.receive():"
				self.hexPrint(ret)
			
			self.buff += ret
			
		except socket.error, e:
			if str(e).find('The socket operation could not complete without blocking') != -1:
				if Peach.Engine.engine.Engine.debug:
					print "timed out waiting for data"
				
				raise Timeout("Timed out waiting for data [%d:%d:%d:%d]" % (len(self.buff), (size+self.pos), size, diffSize))
			
			elif str(e).find('An existing connection was forcibly') != -1:
				if Peach.Engine.engine.Engine.debug:
					print "Socket was closed!"
				
				raise PublisherSoftException("Socket is closed")
			
			else:
				if Peach.Engine.engine.Engine.debug:
					print "recv failed: " + str(sys.exc_info()[1])
				
				raise PublisherSoftException("recv failed: " + str(sys.exc_info()[1]))
Ejemplo n.º 4
0
    def send(self, data):
        """
        Send data via sendall.

        @type	data: string
        @param	data: Data to send
        """

        if Peach.Engine.engine.Engine.debug:
            print(">>>>>>>>>>>>>>>>")
            print("tcp.Tcp.send():")
            printHex(data)

        try:
            self._socket.sendall(data)
        except:
            if Peach.Engine.engine.Engine.debug:
                print("Tcp: Sendall failed: " + str(sys.exc_info()[1]))
            raise PublisherSoftException("sendall failed: " +
                                         str(sys.exc_info()[1]))
	def send(self, data):
		'''
		Send data via sendall.
		
		@type	data: string
		@param	data: Data to send
		'''
		
		if Peach.Engine.engine.Engine.debug:
			print ">>>>>>>>>>>>>>>>"
			print "tcp.Tcp.send():"
			self.hexPrint(data)
			#added by delphi
			hexstr = "\\x".join("{:02x}".format(ord(c)) for c in data)
			print hexstr
			
		
		try:
			self._socket.sendall(data)
		except:
			if Peach.Engine.engine.Engine.debug:
				print "Tcp: Sendall failed: " + str(sys.exc_info()[1])
			raise PublisherSoftException("sendall failed: " + str(sys.exc_info()[1]))