コード例 #1
0
    def run(self):
        conn = self.frmwk.serial_connection
        logger = self.logger
        lower_boundary = self.options['LOWER']
        upper_boundary = self.options['UPPER']
        out_file = open(self.options['FILE'], 'w', 1)
        if not self.frmwk.serial_login():
            logger.warning(
                'meter login failed, some tables may not be accessible')

        number_of_tables = 0
        self.frmwk.print_status('Starting Dump. Writing table data to: ' +
                                self.options.get_option_value('FILE'))
        for tableid in xrange(lower_boundary, (upper_boundary + 1)):
            try:
                data = conn.get_table_data(tableid)
            except C1218ReadTableError as error:
                data = None
                if error.errCode == 10:  # ISSS
                    conn.stop()
                    logger.warning(
                        'received ISSS error, connection stopped, will sleep before retrying'
                    )
                    sleep(0.5)
                    if not self.frmwk.serial_login():
                        logger.warning(
                            'meter login failed, some tables may not be accessible'
                        )
                    try:
                        data = conn.get_table_data(tableid)
                    except C1218ReadTableError as error:
                        data = None
                        if error.errCode == 10:
                            raise error  # tried to re-sync communications but failed, you should reconnect and rerun the module
            if data:
                self.frmwk.print_status(
                    'Found readable table, ID: ' + str(tableid) + ' Name: ' +
                    (C1219_TABLES.get(tableid) or 'UNKNOWN'))
                # format is: table id, table name, table data length, table data
                out_file.write(','.join([
                    str(tableid), (C1219_TABLES.get(tableid) or 'UNKNOWN'),
                    str(len(data)),
                    data.encode('hex')
                ]) + os.linesep)
                number_of_tables += 1

        out_file.close()
        self.frmwk.print_status('Successfully copied ' +
                                str(number_of_tables) + ' tables to disk.')
        return
コード例 #2
0
    def run(self):
        conn = self.frmwk.serial_connection
        logger = self.logger
        lower_boundary = self.options['LOWER']
        upper_boundary = self.options['UPPER']

        number_of_tables = 0
        self.frmwk.print_status('Enumerating tables, please wait...')
        for table_id in range(lower_boundary, (upper_boundary + 1)):
            try:
                conn.get_table_data(table_id)
            except C1218ReadTableError:
                self.frmwk.serial_disconnect()
                logger.warning(
                    'received ISSS error, connection stopped, will sleep before retrying'
                )
                sleep(0.5)
                self.frmwk.serial_connect()
                if not self.frmwk.serial_login():
                    logger.warning(
                        'meter login failed, some tables may not be accessible'
                    )
                conn = self.frmwk.serial_connection
            else:
                self.frmwk.print_status(
                    'Found readable table, ID: ' + str(table_id) + ' Name: ' +
                    (C1219_TABLES.get(table_id) or 'UNKNOWN'))
                number_of_tables += 1
        self.frmwk.print_status("Found {0:,} tables in range {1}-{2}.".format(
            number_of_tables, lower_boundary, upper_boundary))
コード例 #3
0
    def run(self):
        conn = self.frmwk.serial_connection
        logger = self.logger
        lower_boundary = self.options['LOWER']
        upper_boundary = self.options['UPPER']
        if not self.frmwk.serial_login():
            logger.warning('meter login failed')

        self.frmwk.print_status('Enumerating tables, please wait...')
        tables_found = 0
        for tableid in xrange(lower_boundary, (upper_boundary + 1)):
            data = self.get_table_data_ex(conn, tableid, 4)
            if data[0] == '\x00':
                self.frmwk.print_status(
                    'Found readable table, ID: ' + str(tableid) + ' Name: ' +
                    (C1219_TABLES.get(tableid) or 'UNKNOWN'))
                tables_found += 1
            else:
                error_code = ord(data[0])
                error_type = str(
                    C1218_RESPONSE_CODES.get(error_code) or 'UNKNOWN')
                logger.info('received error code: ' + str(error_code) +
                            ' type: ' + error_type)
            while not conn.stop():
                sleep(0.5)
            sleep(0.25)
            while not conn.start():
                sleep(0.5)
            sleep(0.25)
            while not conn.login():
                sleep(0.5)
            sleep(0.25)
        self.frmwk.print_status('Found ' + str(tables_found) + ' table(s).')
        return
コード例 #4
0
	def run(self, frmwk, args):
		lower_boundary = self.options['LOWER']
		upper_boundary = self.options['UPPER']
		logger = frmwk.get_module_logger(self.name)
		if not frmwk.serial_login():
			logger.warning('meter login failed')
		conn = frmwk.serial_connection
		
		frmwk.print_status('Enumerating tables, please wait...')
		tables_found = 0
		for tableid in xrange(lower_boundary, (upper_boundary + 1)):
			data = self.getTableDataEx(conn, tableid, 4)
			if data[0] == '\x00':
				frmwk.print_status('Found readable table, ID: ' + str(tableid) + ' Name: ' + (C1219_TABLES.get(tableid) or 'UNKNOWN'))
				tables_found += 1
			else:
				logger.info('received nak/error code: ' + str(ord(data[0])))
			while not conn.stop():
				sleep(0.5)
			sleep(0.25)
			while not conn.start():
				sleep(0.5)
			sleep(0.25)
			while not conn.login():
				sleep(0.5)
			sleep(0.25)
		frmwk.print_status('Found ' + str(tables_found) + ' table(s).')
		return
コード例 #5
0
	def run(self, frmwk, args):
		lower_boundary = self.options['LOWER']
		upper_boundary = self.options['UPPER']
		out_file = open(self.options['FILE'], 'w', 1)
		logger = frmwk.get_module_logger(self.name)
		if not frmwk.serial_login():
			logger.warning('meter login failed, some tables may not be accessible')
		conn = frmwk.serial_connection
		
		number_of_tables = 0
		frmwk.print_status('Starting Dump. Writing table data to: ' + self.options.getOptionValue('FILE'))
		for tableid in xrange(lower_boundary, (upper_boundary + 1)):
			try:
				data = conn.getTableData(tableid)
			except C1218ReadTableError as error:
				data = None
				if error.errCode == 10:	# ISSS
					conn.stop()
					logger.warning('received ISSS error, connection stopped, will sleep before retrying')
					sleep(0.5)
					if not frmwk.serial_login():
						logger.warning('meter login failed, some tables may not be accessible')
					try:
						data = conn.getTableData(tableid)
					except C1218ReadTableError as error:
						data = None
						if error.errCode == 10:
							raise error	# tried to re-sync communications but failed, you should reconnect and rerun the module
			if data:
				frmwk.print_status('Found readable table, ID: ' + str(tableid) + ' Name: ' + (C1219_TABLES.get(tableid) or 'UNKNOWN'))
				# format is: table id, table name, table data length, table data
				out_file.write(','.join([str(tableid), (C1219_TABLES.get(tableid) or 'UNKNOWN'), str(len(data)), data.encode('hex')]) + os.linesep)
				number_of_tables += 1
		
		out_file.close()
		frmwk.print_status('Successfully copied ' + str(number_of_tables) + ' tables to disk.')
		return
コード例 #6
0
    def run(self):
        conn = self.frmwk.serial_connection
        logger = self.logger
        lower_boundary = self.options['LOWER']
        upper_boundary = self.options['UPPER']
        if not self.frmwk.serial_login():
            logger.warning('meter login failed')

        number_of_tables = 0
        self.frmwk.print_status('Enumerating tables, please wait...')
        for tableid in xrange(lower_boundary, (upper_boundary + 1)):
            try:
                data = conn.get_table_data(tableid)
            except C1218ReadTableError as error:
                data = None
                if error.errCode == 10:  # ISSS
                    conn.stop()
                    logger.warning(
                        'received ISSS error, connection stopped, will sleep before retrying'
                    )
                    sleep(0.5)
                    if not self.frmwk.serial_login():
                        logger.warning(
                            'meter login failed, some tables may not be accessible'
                        )
                    try:
                        data = conn.get_table_data(tableid)
                    except C1218ReadTableError as error:
                        data = None
                        if error.errCode == 10:
                            raise error  # tried to re-sync communications but failed, you should reconnect and rerun the module
            if data:
                self.frmwk.print_status(
                    'Found readable table, ID: ' + str(tableid) + ' Name: ' +
                    (C1219_TABLES.get(tableid) or 'UNKNOWN'))
                number_of_tables += 1
        self.frmwk.print_status('Found ' + str(number_of_tables) +
                                ' table(s).')
        return
コード例 #7
0
ファイル: dump_tables.py プロジェクト: securestate/termineter
	def run(self):
		conn = self.frmwk.serial_connection
		logger = self.logger
		lower_boundary = self.options['LOWER']
		upper_boundary = self.options['UPPER']
		out_file = open(self.options['FILE'], 'w', 1)

		number_of_tables = 0
		self.frmwk.print_status('Starting dump, writing table data to: ' + self.options['FILE'])
		for tableid in range(lower_boundary, (upper_boundary + 1)):
			try:
				data = conn.get_table_data(tableid)
			except C1218ReadTableError as error:
				data = None
				if error.code == 10:  # ISSS
					conn.stop()
					logger.warning('received ISSS error, connection stopped, will sleep before retrying')
					time.sleep(0.5)
					if not self.frmwk.serial_login():
						logger.warning('meter login failed, some tables may not be accessible')
					try:
						data = conn.get_table_data(tableid)
					except C1218ReadTableError as error:
						data = None
						if error.code == 10:
							raise error  # tried to re-sync communications but failed, you should reconnect and rerun the module
			if not data:
				continue
			tablename = C1219_TABLES.get(tableid, 'UNKNOWN')
			tableid = str(tableid)
			self.frmwk.print_status('Found readable table, ID: ' + tableid + ' Name: ' + tablename)
			# format is: table id, table name, table data length, table data
			out_file.write(','.join([tableid, tablename, str(len(data)), binascii.b2a_hex(data).decode('utf-8')]) + os.linesep)
			number_of_tables += 1

		out_file.close()
		self.frmwk.print_status('Successfully copied ' + str(number_of_tables) + ' tables to disk.')
コード例 #8
0
ファイル: enum_tables.py プロジェクト: securestate/termineter
	def run(self):
		conn = self.frmwk.serial_connection
		logger = self.logger
		lower_boundary = self.options['LOWER']
		upper_boundary = self.options['UPPER']

		number_of_tables = 0
		self.frmwk.print_status('Enumerating tables, please wait...')
		for table_id in range(lower_boundary, (upper_boundary + 1)):
			try:
				conn.get_table_data(table_id)
			except C1218ReadTableError:
				self.frmwk.serial_disconnect()
				logger.warning('received ISSS error, connection stopped, will sleep before retrying')
				sleep(0.5)
				self.frmwk.serial_connect()
				if not self.frmwk.serial_login():
					logger.warning('meter login failed, some tables may not be accessible')
				conn = self.frmwk.serial_connection
			else:
				self.frmwk.print_status('Found readable table, ID: ' + str(table_id) + ' Name: ' + (C1219_TABLES.get(table_id) or 'UNKNOWN'))
				number_of_tables += 1
		self.frmwk.print_status("Found {0:,} tables in range {1}-{2}.".format(number_of_tables, lower_boundary, upper_boundary))
コード例 #9
0
	def run(self):
		conn = self.frmwk.serial_connection
		logger = self.logger
		lower_boundary = self.options['LOWER']
		upper_boundary = self.options['UPPER']
		if not self.frmwk.serial_login():
			logger.warning('meter login failed')

		number_of_tables = 0
		self.frmwk.print_status('Enumerating tables, please wait...')
		for tableid in xrange(lower_boundary, (upper_boundary + 1)):
			try:
				data = conn.get_table_data(tableid)
			except C1218ReadTableError as error:
				data = None
				if error.errCode == 10: # ISSS
					conn.stop()
					logger.warning('received ISSS error, connection stopped, will sleep before retrying')
					sleep(0.5)
					if not self.frmwk.serial_login():
						logger.warning('meter login failed, some tables may not be accessible')
					try:
						data = conn.get_table_data(tableid)
					except C1218ReadTableError as error:
						data = None
						if error.errCode == 10:
							raise error # tried to re-sync communications but failed, you should reconnect and rerun the module
			if data:
				self.frmwk.print_status('Found readable table, ID: ' + str(tableid) + ' Name: ' + (C1219_TABLES.get(tableid) or 'UNKNOWN'))
				number_of_tables += 1
		self.frmwk.print_status('Found ' + str(number_of_tables) + ' table(s).')
		return
コード例 #10
0
ファイル: enum_tables.py プロジェクト: Esauromano/termineter
	def run(self):
		conn = self.frmwk.serial_connection
		logger = self.logger
		lower_boundary = self.options['LOWER']
		upper_boundary = self.options['UPPER']
		if not self.frmwk.serial_login():
			logger.warning('meter login failed')
		
		self.frmwk.print_status('Enumerating tables, please wait...')
		tables_found = 0
		for tableid in xrange(lower_boundary, (upper_boundary + 1)):
			data = self.get_table_data_ex(conn, tableid, 4)
			if data[0] == '\x00':
				self.frmwk.print_status('Found readable table, ID: ' + str(tableid) + ' Name: ' + (C1219_TABLES.get(tableid) or 'UNKNOWN'))
				tables_found += 1
			else:
				error_code = ord(data[0])
				error_type = str(C1218_RESPONSE_CODES.get(error_code) or 'UNKNOWN')
				logger.info('received error code: ' + str(error_code) + ' type: ' + error_type)
			while not conn.stop():
				sleep(0.5)
			sleep(0.25)
			while not conn.start():
				sleep(0.5)
			sleep(0.25)
			while not conn.login():
				sleep(0.5)
			sleep(0.25)
		self.frmwk.print_status('Found ' + str(tables_found) + ' table(s).')
		return