@ -0,0 +1,3 @@
|
|||||||
|
wappalyzer.js
|
||||||
|
apps.json
|
||||||
|
node_modules/
|
@ -0,0 +1,96 @@
|
|||||||
|
# Wappalyzer
|
||||||
|
|
||||||
|
This is npm module for wappalyzer
|
||||||
|
|
||||||
|
npm install wappalyzer
|
||||||
|
|
||||||
|
|
||||||
|
var wappalyzer = require("wappalyzer");
|
||||||
|
|
||||||
|
|
||||||
|
var options={
|
||||||
|
url : "http://codelanka.github.io/Presentation-Engines",
|
||||||
|
hostname:"codelanka.github.io",
|
||||||
|
debug:false
|
||||||
|
}
|
||||||
|
|
||||||
|
wappalyzer.detectFromUrl(options,function (err,apps,appInfo) {
|
||||||
|
console.log(err,apps,appInfo);
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
####Output
|
||||||
|
|
||||||
|
|
||||||
|
null [ 'AngularJS',
|
||||||
|
'Font Awesome',
|
||||||
|
'Google Font API',
|
||||||
|
'jQuery',
|
||||||
|
'Twitter Bootstrap' ] { AngularJS:
|
||||||
|
{ app: 'AngularJS',
|
||||||
|
confidence:
|
||||||
|
{ 'script //([\\d.]+(\\-?rc[.\\d]*)*)/angular(\\.min)?\\.js/i': 100,
|
||||||
|
'script /angular.*\\.js/i': 100 },
|
||||||
|
confidenceTotal: 100,
|
||||||
|
detected: true,
|
||||||
|
excludes: [],
|
||||||
|
version: '1.3.5',
|
||||||
|
versions: [ '1.3.5' ] },
|
||||||
|
'Font Awesome':
|
||||||
|
{ app: 'Font Awesome',
|
||||||
|
confidence: { 'html /<link[^>]* href=[^>]+font-awesome(?:\\.min)?\\.css/i': 100 },
|
||||||
|
confidenceTotal: 100,
|
||||||
|
detected: true,
|
||||||
|
excludes: [],
|
||||||
|
version: '',
|
||||||
|
versions: [] },
|
||||||
|
'Google Font API':
|
||||||
|
{ app: 'Google Font API',
|
||||||
|
confidence: { 'html /<link[^>]* href=[^>]+fonts\\.(?:googleapis|google)\\.com/i': 100 },
|
||||||
|
confidenceTotal: 100,
|
||||||
|
detected: true,
|
||||||
|
excludes: [],
|
||||||
|
version: '',
|
||||||
|
versions: [] },
|
||||||
|
jQuery:
|
||||||
|
{ app: 'jQuery',
|
||||||
|
confidence: { 'script /jquery.*\\.js/i': 100 },
|
||||||
|
confidenceTotal: 100,
|
||||||
|
detected: true,
|
||||||
|
excludes: [],
|
||||||
|
version: '',
|
||||||
|
versions: [] },
|
||||||
|
'Twitter Bootstrap':
|
||||||
|
{ app: 'Twitter Bootstrap',
|
||||||
|
confidence:
|
||||||
|
{ 'script /(?:twitter\\.github\\.com/bootstrap|bootstrap(?:\\.js|\\.min\\.js))/i': 100,
|
||||||
|
'html /<link.+?href="[^"]+bootstrap(?:\\.min)?\\.css/i': 100 },
|
||||||
|
confidenceTotal: 100,
|
||||||
|
detected: true,
|
||||||
|
excludes: [],
|
||||||
|
version: '',
|
||||||
|
versions: [] } }
|
||||||
|
|
||||||
|
|
||||||
|
Wappalyzer Author - Elbert Alias
|
||||||
|
|
||||||
|
[Wappalyzer](https://wappalyzer.com/) is a
|
||||||
|
[cross-platform](https://github.com/ElbertF/Wappalyzer/wiki/Drivers) utility that uncovers the
|
||||||
|
technologies used on websites. It detects
|
||||||
|
[content management systems](https://wappalyzer.com/categories/cms),
|
||||||
|
[eCommerce platforms](https://wappalyzer.com/categories/ecommerce),
|
||||||
|
[web servers](https://wappalyzer.com/categories/web-servers),
|
||||||
|
[JavaScript frameworks](https://wappalyzer.com/categories/javascript-frameworks),
|
||||||
|
[analytics tools](https://wappalyzer.com/categories/analytics) and
|
||||||
|
[many more](https://wappalyzer.com/applications).
|
||||||
|
|
||||||
|
Refer to the [wiki](https://github.com/ElbertF/Wappalyzer/wiki) for
|
||||||
|
[screenshots](https://github.com/ElbertF/Wappalyzer/wiki/Screenshots), information on how to
|
||||||
|
[contribute](https://github.com/ElbertF/Wappalyzer/wiki/Contributing) and
|
||||||
|
[more](https://github.com/ElbertF/Wappalyzer/wiki/_pages).
|
||||||
|
|
||||||
|
*Licensed under the [GPL](https://github.com/ElbertF/Wappalyzer/blob/master/LICENSE).*
|
||||||
|
|
||||||
|
Donate Bitcoin: 16gb4uGDAjaeRJwKVmKr2EXa8x2fmvT8EQ - *Thanks!*
|
||||||
|
|
||||||
|
![QR Code](https://wappalyzer.com/sites/default/themes/wappalyzer/images/bitcoinqrcode.png)
|
@ -0,0 +1,11 @@
|
|||||||
|
var wappalyzer = require("./index");
|
||||||
|
|
||||||
|
var options={
|
||||||
|
url : "http://codelanka.github.io/Presentation-Engines",
|
||||||
|
hostname:"codelanka.github.io",
|
||||||
|
debug:false
|
||||||
|
}
|
||||||
|
|
||||||
|
wappalyzer.detectFromUrl(options,function (err,apps,appInfo) {
|
||||||
|
console.log(err,apps,appInfo);
|
||||||
|
})
|
@ -0,0 +1,83 @@
|
|||||||
|
var request = require('request');
|
||||||
|
var fs = require("fs");
|
||||||
|
var path =require("path");
|
||||||
|
|
||||||
|
//TODO
|
||||||
|
exports.detectFromHTML = function (options) {};
|
||||||
|
|
||||||
|
exports.detectFromUrl = function (options,cb) {
|
||||||
|
|
||||||
|
var url = options.url;
|
||||||
|
|
||||||
|
if (options.debug ) {
|
||||||
|
console.log("Fetching the page");
|
||||||
|
};
|
||||||
|
|
||||||
|
getHTMLFromUrl(url,function (err,data) {
|
||||||
|
if (err) {
|
||||||
|
cb(err,null)
|
||||||
|
}else{
|
||||||
|
runWrappalyer(options,data, function (err,detected,appInfo) {
|
||||||
|
cb(null,detected,appInfo)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function getHTMLFromUrl (url,cb) {
|
||||||
|
request(url, function(error, response, body) {
|
||||||
|
if (!error && response.statusCode == 200) {
|
||||||
|
var data = {
|
||||||
|
html: body,
|
||||||
|
url: url,
|
||||||
|
headers: response
|
||||||
|
};
|
||||||
|
cb(null,data);
|
||||||
|
}else{
|
||||||
|
cb(error,null)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function getAppsJson(cb) {
|
||||||
|
fs.readFile(path.resolve(__dirname, 'apps.json'), 'utf8', function(err, data) {
|
||||||
|
if (err) throw err;
|
||||||
|
return cb(null, JSON.parse(data))
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function runWrappalyer(options,data,cb) {
|
||||||
|
var debug = options.debug || false;
|
||||||
|
|
||||||
|
var wappalyzer = require("./wappalyzer").wappalyzer;
|
||||||
|
getAppsJson(function(err, apps) {
|
||||||
|
var w = wappalyzer;
|
||||||
|
w.driver = {
|
||||||
|
log: function(args) {
|
||||||
|
if (debug) {
|
||||||
|
console.log(args.message);
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
init: function() {
|
||||||
|
w.categories = apps.categories;
|
||||||
|
w.apps = apps.apps;
|
||||||
|
},
|
||||||
|
displayApps: function() {
|
||||||
|
var app,url = Object.keys(w.detected)[0];
|
||||||
|
var detectedApps = [];
|
||||||
|
|
||||||
|
for (app in w.detected[url]) {
|
||||||
|
detectedApps.push(app);
|
||||||
|
|
||||||
|
if (debug) {
|
||||||
|
console.log(app);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
cb(null,detectedApps,w.detected[url])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
w.init();
|
||||||
|
w.analyze(options.hostname,options.url, data)
|
||||||
|
});
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"name": "wrappalyzer",
|
||||||
|
"version": "2.0.0",
|
||||||
|
"description": "NPM Module that uncovers the technologies used on websites",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "mocha -t 15000"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/ElbertF/Wappalyze"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"wappalyzer"
|
||||||
|
],
|
||||||
|
"author": "Pasindu De Silva",
|
||||||
|
"license": "GPLv3",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/ElbertF/Wappalyze/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/ElbertF/Wappalyze",
|
||||||
|
"directories": {
|
||||||
|
"test": "test"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"request": "^2.51.0"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,27 @@
|
|||||||
|
var assert = require("assert")
|
||||||
|
|
||||||
|
describe('wappalyzer', function(){
|
||||||
|
describe('detectFromUrl', function(){
|
||||||
|
it('should have the expected apps detected', function(done){
|
||||||
|
|
||||||
|
var wappalyzer = require("../index");
|
||||||
|
|
||||||
|
var expect = ['AngularJS','Font Awesome','Google Font API','jQuery','Twitter Bootstrap'];
|
||||||
|
|
||||||
|
var options={
|
||||||
|
url : "http://codelanka.github.io/Presentation-Engines",
|
||||||
|
hostname:"codelanka.github.io",
|
||||||
|
debug:false
|
||||||
|
}
|
||||||
|
|
||||||
|
wappalyzer.detectFromUrl(options,function (err,apps) {
|
||||||
|
assert.equal(expect[0], apps[0]);
|
||||||
|
assert.equal(expect[1], apps[1]);
|
||||||
|
assert.equal(expect[2], apps[2]);
|
||||||
|
assert.equal(expect[3], apps[3]);
|
||||||
|
done();
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 582 B |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 480 B |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 860 B |
After Width: | Height: | Size: 369 B |