def insert_session_data(self, fd, sender, recipient, type, data=None): args = dict(session_id = self.session_id, _time = "from_unixtime(%s)" % fd.current_packet.ts_sec, sender = sender, offset = fd.tell(), recipient = recipient, type = type) CacheManager.urn_insert_to_table(fd.urn, "msn_session", args)
def insert_session_data(self, fd, sender, recipient, type, data=None): args = dict(session_id=self.session_id, _time="from_unixtime(%s)" % fd.current_packet.ts_sec, sender=sender, offset=fd.tell(), recipient=recipient, type=type) CacheManager.urn_insert_to_table(fd.urn, "msn_session", args)
def scan(self, fd, scanners, type, mime, cookie, **args): if "MSN" in type and fd.urn.endswith("forward"): pyflaglog.log(pyflaglog.DEBUG,"Openning %s for MSN" % fd.inode_id) dbfs = FileSystem.DBFS(fd.case) self.forward_fd = fd self.reverse_fd = dbfs.open(urn = "%s/reverse" % os.path.dirname(fd.urn)) ## Make back references to each other self.forward_fd.reverse = self.reverse_fd self.reverse_fd.reverse = self.forward_fd ## Install defaults self.forward_fd.client_id = self.reverse_fd.client_id = '' self.forward_fd.dest_id = self.reverse_fd.dest_id = '' self.session_id = -1 for fd in NetworkScanner.generate_streams_in_time_order( self.forward_fd, self.reverse_fd): try: line = fd.readline() items = line.split() command = items[0] except IndexError: continue ## Try to process the command try: handler = getattr(self, command) except: #print "Command %s not handled" % command continue handler(items, fd, scanners) CacheManager.update_table_from_urn(fd.case, self.forward_fd.urn) CacheManager.update_table_from_urn(fd.case, self.reverse_fd.urn)
def MSG(self, items, fd, scanners): """ Sends message to members of the current session There are two types of messages that may be sent: 1) A message from the client to the message server. This does not contain the nick of the client, but does contain a transaction ID. This message is sent to all users in the current session. 2) A message from the Switchboard server to the client contains the nick of the sender. These two commands are totally different. 1. MSG 1532 U 92 MIME-Version: 1.0 Content-Type: text/x-msmsgscontrol TypingUser: [email protected] Format is: MSG <Transaction ID> <Type of ACK required> <length of message in bytes> Transaction ID is used to correlate server responses to client requests. 2. MSG [email protected] I%20am%20so%20great 102 MIME-Version: 1.0 Content-Type: text/x-msmsgscontrol TypingUser: [email protected] Format is: MSG <Nick> <URL encoded displayname> <length of message in bytes> """ length = int(items[-1]) start = fd.tell() end = start + length if "@" in items[1]: ## Its type 2 (see above) sender_name = "(%s)" % HTML.url_unquote(items[2]) else: ## Its type 1 sender_name = '' sender = fd.client_id ct = '' while 1: line = fd.readline().strip() if not line: break header, value = line.split(":",1) header = header.lower() if header == 'typinguser': fd.client_id = fd.reverse.dest_id = value.strip() elif header == 'content-type': ct = value ## Update the start to be start start of this line start = fd.tell() fd.seek(end - start, 1) ## We only care about text messages here if end > start and 'text/plain' in ct: ## Lets find out the timestamp of this point CacheManager.urn_insert_to_table(fd.urn, "msn_session", dict(session_id = self.session_id, _time = "from_unixtime(%s)" % fd.current_packet.ts_sec, offset = start, length = end - start, sender = fd.client_id, recipient = fd.dest_id, type = 'MESSAGE', ))
def MSG(self, items, fd, scanners): """ Sends message to members of the current session There are two types of messages that may be sent: 1) A message from the client to the message server. This does not contain the nick of the client, but does contain a transaction ID. This message is sent to all users in the current session. 2) A message from the Switchboard server to the client contains the nick of the sender. These two commands are totally different. 1. MSG 1532 U 92 MIME-Version: 1.0 Content-Type: text/x-msmsgscontrol TypingUser: [email protected] Format is: MSG <Transaction ID> <Type of ACK required> <length of message in bytes> Transaction ID is used to correlate server responses to client requests. 2. MSG [email protected] I%20am%20so%20great 102 MIME-Version: 1.0 Content-Type: text/x-msmsgscontrol TypingUser: [email protected] Format is: MSG <Nick> <URL encoded displayname> <length of message in bytes> """ length = int(items[-1]) start = fd.tell() end = start + length if "@" in items[1]: ## Its type 2 (see above) sender_name = "(%s)" % HTML.url_unquote(items[2]) else: ## Its type 1 sender_name = '' sender = fd.client_id ct = '' while 1: line = fd.readline().strip() if not line: break header, value = line.split(":", 1) header = header.lower() if header == 'typinguser': fd.client_id = fd.reverse.dest_id = value.strip() elif header == 'content-type': ct = value ## Update the start to be start start of this line start = fd.tell() fd.seek(end - start, 1) ## We only care about text messages here if end > start and 'text/plain' in ct: ## Lets find out the timestamp of this point CacheManager.urn_insert_to_table( fd.urn, "msn_session", dict( session_id=self.session_id, _time="from_unixtime(%s)" % fd.current_packet.ts_sec, offset=start, length=end - start, sender=fd.client_id, recipient=fd.dest_id, type='MESSAGE', ))