diff options
Diffstat (limited to 'dist/Honeypot.activity/mathparse_honeypot.py')
-rw-r--r-- | dist/Honeypot.activity/mathparse_honeypot.py | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/dist/Honeypot.activity/mathparse_honeypot.py b/dist/Honeypot.activity/mathparse_honeypot.py new file mode 100644 index 0000000..f8d5f2c --- /dev/null +++ b/dist/Honeypot.activity/mathparse_honeypot.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python +# +# Copyright (C) 2010, Johannes Ponader +# +# This program 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; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging +_logger = logging.getLogger('mathparse') +_logger.setLevel(logging.DEBUG) + +import sys, random, time, re, ast, parser + + +class mathparse_honeypot: + + def __init__(self, runaslib=True): + + # Seed the random number generator + random.seed(time.time()) + + def parse(self, drop): + question = drop[0] + answer = drop[1] + + # look for "[1-10]" etc. + regexp = r"\[(\d+)-(\d+)]" + _logger.debug('begin parse: ' + str(question)) + question = re.split(regexp, question) + _logger.debug('split q1: ' + str(question)) + # "\1" stands for random_value[0] + random_values = [] + for i in range(1, len(question), 3): + _logger.debug(len(question)) + rand_val = str(random.randint(int(question[i]), int(question[i+1])+1)) + random_values.append(rand_val) + question[i] = rand_val + question[i+1] = "" + _logger.debug('q1[' + str(i) + ']: ' + str(question)) + # make it one string again + question = u"".join(question) + _logger.debug('join q1: ' + str(question)) + + # look for markers like "\1" + regexp = r"\\(\d+)" + question = re.split(regexp, question) + _logger.debug('split q2: ' + str(question)) + for i in range(1, len(question), 2): + #no error/range checking so far + question[i] = random_values[int(question[i])-1] + _logger.debug('q2[' + str(i) + ']: ' + str(question)) + question = u"".join(question) + _logger.debug('join q2: ' + str(question)) + + # look for expressions to evaluate: "{...}" + regexp = r"\{(.*)}" + question = re.split(regexp, question) + _logger.debug('split q3: ' + str(question)) + for i in range(1, len(question), 2): + # Sicherheitsluecke! + # vgl. http://effbot.org/zone/librarybook-core-eval.htm + question[i] = str(eval(question[i])) + _logger.debug('q3[' + str(i) + ']: ' + str(question)) + question = u"".join(question) + _logger.debug('join q3: ' + str(question)) + + regexp = r"\\(\d+)" + answer = re.split(regexp, answer) + _logger.debug('split a1: ' + str(question)) + for i in range(1, len(answer), 2): + answer[i] = random_values[int(answer[i])-1] + _logger.debug('a1[' + str(i) + ']: ' + str(question)) + answer = u"".join(answer) + _logger.debug('join a1: ' + str(question)) + + regexp = r"\{(.*)}" + answer = re.split(regexp, answer) + _logger.debug('split a2: ' + str(question)) + for i in range(1, len(answer), 2): + answer[i] = str(eval(answer[i])) + # answer[i] = str(ast.literal_eval(ast.parse(answer[i]))) + _logger.debug('a2[' + str(i) + ']: ' + str(question)) + answer = u"".join(answer) + _logger.debug('join a2: ' + str(question)) + + return [question,answer] + + +if __name__ == '__main__': + mathparse_honeypot(False) + +
\ No newline at end of file |