From 9e900eb16e92027cfe990a07c5703a6adbb41a09 Mon Sep 17 00:00:00 2001 From: perchouli Date: Mon, 20 May 2013 15:44:03 +0800 Subject: [PATCH] Add python driver (depend on PyV8) --- drivers/python/wappalyzer.py | 53 ++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100755 drivers/python/wappalyzer.py diff --git a/drivers/python/wappalyzer.py b/drivers/python/wappalyzer.py new file mode 100755 index 000000000..15d048be8 --- /dev/null +++ b/drivers/python/wappalyzer.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import os +import sys +import PyV8 +import urllib +from urlparse import urlparse + +try: + import json +except ImportError: + import simplejson as json + + +class Wappalyzer(object): + + def __init__(self, url): + self.file_dir = os.path.dirname(__file__) + + f = open(os.path.join(self.file_dir, '../../share/apps.json')) + data = json.loads(f.read()) + f.close() + + self.categories = data['categories'] + self.apps = data['apps'] + self.url = url + + def analyze(self): + ctxt = PyV8.JSContext() + ctxt.enter() + + f1 = open(os.path.join(self.file_dir, '../php/js/wappalyzer.js')) + f2 = open(os.path.join(self.file_dir, '../php/js/driver.js')) + ctxt.eval(f1.read()) + ctxt.eval(f2.read()) + f1.close() + f2.close() + + host = urlparse(self.url).hostname + html = urllib.urlopen(self.url).read() + + data = {'host': host, 'url': self.url, 'html': html, 'headers': {}} + apps = json.dumps(self.apps) + categories = json.dumps(self.categories) + return ctxt.eval("w.apps = %s; w.categories = %s; w.driver.data = %s; w.driver.init();" % (apps, categories, json.dumps(data))) + +if __name__ == '__main__': + try: + w = Wappalyzer(sys.argv[1]) + print w.analyze() + except IndexError: + print ('Usage: python %s ' % sys.argv[0])