def __init__(self, options): self.width = None self.printer = None self.results = [] # the storage for 'string' and 'regex' matched fingerprints # since these don't need extra processing they are added directly # to the final scores self.scores = defaultdict(lambda: defaultdict(lambda: Counter())) # ^ Category ^ Name ^ Version # md5 fingerprints are based on content that might not hav been changed # across different versions of the cms. The score of a match is based on # the number of 'hits' for that URL. The finale score for a cms version will be: # 1 / number_of_hits # self.md5_matches = defaultdict(lambda: defaultdict(lambda: Counter())) # ^ Url ^ cms ^ versions self.platform_observations = defaultdict(lambda: defaultdict(set)) self.sitemap = Sitemap() self.site_info = { 'ip': [], # changed from a string to a list: see issue #19 'title': '', 'cookies': set(), 'subdomains': set(), }