''' agentManager.py Copyright 2006 Andres Riancho This file is part of w3af, w3af.sourceforge.net . w3af is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. w3af is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with w3af; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ''' import core.controllers.outputManager as om import core.data.kb.knowledgeBase as kb import core.data.parsers.urlParser as urlParser from core.controllers.w3afException import w3afException import socket class agentManager: ''' This class defines a manager for w3af agents. @author: Andres Riancho ( andres.riancho@gmail.com ) ''' def __init__( self ): # Internal variables self._counter = 0 self._requests = [] # User configured variables self._host = '0.0.0.0' self._port = 12345 def start( self ): serversocket = socket.socket( socket.AF_INET, socket.SOCK_STREAM ) serversocket.bind(( self._host , self._port )) serversocket.listen(5) while 1: #accept connections from outside (clientsocket, address) = serversocket.accept() # do SSL #ssl_sock = socket.ssl( clientsocket ) ssl_sock = clientsocket # handle the agent self._handleAgent(ssl_sock) def _handleAgent( self, clientsocket ): ''' This method handles an agent that is connecting to this agentManager. @parameter clientsocket: A socket where the client is connected @return: None ''' ar = self._requests.pop() recv = clientsocket.recv( len('') ) self._counter += 1 xml = ar.toString(self._counter) clientsocket.send( xml ) om.out.information( 'Sending: ' + xml ) recv = '' while True: readChars = clientsocket.recv( 10 ) om.out.information( 'Received: ' + readChars ) if recv.count(''): break om.out.information('End of response found.') om.out.information( 'Received: ' + recv ) def addRequestToQueue( self, request ): ''' The agentManager has a queue, where it stores the requests made by the framework and then sends them to the agents one by one. ''' self._requests.append( request ) class agentRequest: def __init__( self, command, parameterMap ): self._command = command self._parameterMap = parameterMap def toString( self, id ): ''' system 5812 ls ''' res = '\n' res += '\t%s\n' % self._command res += '\t%i\n' % id res += '\t\n' for name, value in self._parameterMap.items(): res += '\t\t%s\n' % (name, value) res += '\t\n' res += '' return res