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]))
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]))
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]))