Manually merged @SebastianLopienski's apps.json changes, added support for new apps.json syntax

main
Elbert Alias 12 years ago
parent e79c9075cd
commit f171989a9b

@ -28,7 +28,10 @@ var wappalyzer = (function() {
* Parse apps.json patterns
*/
var parse = function(patterns) {
var parsed = [];
var
attrs,
parsed = []
;
// Convert single patterns to an array
if ( typeof patterns === 'string' ) {
@ -36,9 +39,22 @@ var wappalyzer = (function() {
}
patterns.map(function(pattern) {
parsed.push({
regex: new RegExp(pattern.replace('/', '\\\/'), 'i') // Escape slashes in regular expression
});
attrs = {};
pattern.split('\\;').map(function(attr, i) {
if ( i ) {
// Key value pairs
attr = attr.split(':');
if ( attr.length === 2 ) {
attrs[attr[0]] = attr[1];
}
} else {
attrs.regex = new RegExp(attr.replace('/', '\\\/'), 'i'); // Escape slashes in regular expression
}
});
parsed.push(attrs);
});
return parsed;

@ -31,7 +31,8 @@
"29": "search-engines",
"30": "web-mail",
"31": "cdn",
"32": "marketing-automation"
"32": "marketing-automation",
"33": "web-server-extension"
},
"apps": {
"1C-Bitrix": {
@ -73,7 +74,7 @@
},
"Adobe GoLive": {
"cats": [ 20 ],
"meta": { "generator": "Adobe GoLive" }
"meta": { "generator": "Adobe GoLive(\\s([\\d\\.]+))?\\;version:\\2" }
},
"Advanced Web Stats": {
"cats": [ 10 ],
@ -84,6 +85,10 @@
"cats": [ 12 ],
"env": "^AUI$"
},
"Amaya": {
"cats": [ 20 ],
"meta": { "generator": "Amaya( V?([\\d\\.]+[a-z]))?\\;version:\\2" }
},
"Ametys": {
"cats": [ 1 ],
"meta": { "generator": "(Ametys|Anyware Technologies)" },
@ -112,7 +117,7 @@
},
"Apache": {
"cats": [ 22 ],
"headers": { "Server": "(Apache($|[^-])|HTTPD)" }
"headers": { "Server": "(Apache($|/([\\d\\.]+)|[^/-])|HTTPD)\\;version:\\3" }
},
"Apache JSPWiki": {
"cats": [ 8 ],
@ -144,13 +149,17 @@
},
"Atlassian Confluence": {
"cats": [ 8 ],
"html": "Powered by <a href=.+atlassian\\.com/software/confluence",
"html": "Powered by <a href=[^>]+atlassian\\.com/software/confluence([^>]+>Atlassian Confluence</a> ([\\d\\.]+))?\\;version:\\2",
"headers": { "X-Confluence-Request-Time": ".*" },
"meta": { "confluence-request-time": ".*" },
"implies": [ "Java" ]
},
"Atlassian Jira": {
"cats": [ 13 ],
"env": "^jira$",
"html": "Powered by <a href=.+atlassian\\.com/software/jira",
"script": "/jira/s/",
"url": "/secure/Dashboard.jspa",
"html": "Powered by\\s+<a href=[^>]+atlassian\\.com/(software/jira|jira-bug-tracking/)[^>]+>Atlassian\\s+JIRA([^v]*v(ersion: )?(\\d+\\.\\d+(\\.\\d+)?))?\\;version:\\4",
"implies": [ "Java" ]
},
"AWStats": {
@ -297,6 +306,11 @@
"meta": { "generator": "CMS Made Simple" },
"implies": [ "PHP" ]
},
"CMSimple": {
"cats": [ 1 ],
"meta": { "generator": "CMSimple( [\\d\\.]+)?\\;version:\\1" },
"implies": [ "PHP" ]
},
"CO2Stats": {
"cats": [ 10 ],
"html": "src=[^>]+co2stats\\.com/propres\\.php"
@ -484,11 +498,12 @@
"meta": { "generator": "Dokeos" },
"html": "Portal <a[^>]+>Dokeos|@import \\\"[^\\\"]+dokeos_blue",
"headers": { "X-Powered-By": "Dokeos" },
"implies": [ "PHP", "xajax", "jQuery", "CKEditor" ]
"implies": [ "PHP", "Xajax", "jQuery", "CKEditor" ]
},
"DokuWiki": {
"cats": [ 8 ],
"meta": { "generator": "DokuWiki" },
"meta": { "generator": "DokuWiki( Release [\\-\\d]+)?\\;version:\\1" },
"headers": { "Set-Cookie": "DokuWiki=" },
"implies": [ "PHP" ]
},
"DotNetNuke": {
@ -505,13 +520,13 @@
},
"DreamWeaver": {
"cats": [ 20 ],
"html": "(<!--[^>]*(InstanceBeginEditable|Dreamweaver[^>]+target|DWLayoutDefaultTable)|function MM_preloadImages\\(\\) {)"
"html": "(<!--[^>]*(InstanceBeginEditable|Dreamweaver([^>]+)target|DWLayoutDefaultTable)|function MM_preloadImages\\(\\) {)\\;version:\\3"
},
"Drupal": {
"cats": [ 1 ],
"script": "drupal\\.js",
"html": "Drupal(\\.extend)?.+settings|<(link|style)[^>]+sites/(default|all)/(themes|modules)/",
"headers": { "X-Drupal-Cache": ".*", "X-Generator": "Drupal", "Expires": "19 Nov 1978" },
"headers": { "X-Drupal-Cache": ".*", "X-Generator": "Drupal(\\s([\\d\\.]+))?\\;version:\\2", "Expires": "19 Nov 1978" },
"env": "^Drupal$",
"implies": [ "PHP" ]
},
@ -605,7 +620,7 @@
},
"FrontPage": {
"cats": [ 20 ],
"meta": { "generator": "Microsoft FrontPage" },
"meta": { "generator": "Microsoft FrontPage(\\s([\\d\\.]+))?\\;version:\\2" },
"html": "<html[^>]+urn:schemas-microsoft-com:office:office"
},
"FWP": {
@ -663,7 +678,7 @@
},
"Google Maps": {
"cats": [ 5 ],
"script": "(maps\\.google\\.com/maps\\?file=api|maps\\.google\\.com/maps/api/staticmap)"
"script": "(maps\\.google\\.com/maps\\?file=api(&v=([\\d\\.]+))?|maps\\.google\\.com/maps/api/staticmap)\\;version:API v\\3"
},
"Google Sites": {
"cats": [ 1 ],
@ -739,7 +754,7 @@
},
"IIS": {
"cats": [ 22 ],
"headers": { "Server": "IIS" },
"headers": { "Server": "IIS\\/?([\\d\\.]+)?\\;version:\\1" },
"implies": [ "Windows Server" ]
},
"ImpressCMS": {
@ -777,7 +792,12 @@
},
"iWeb": {
"cats": [ 20 ],
"meta": { "generator": "^iWeb" }
"meta": { "generator": "^iWeb( [\\d\\.]+)?\\;version:\\1" }
},
"JAlbum": {
"cats": [ 7 ],
"meta": { "generator": "JAlbum( [\\d\\.]+)?\\;version:\\1" },
"implies": [ "Java" ]
},
"Jalios": {
"cats": [ 1 ],
@ -792,6 +812,21 @@
"script": "jit.*\\.js",
"env": "^\\$jit$"
},
"JavaServer Faces": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "JSF(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"JavaServer Pages": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "JSP(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"Java Servlet": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "Servlet(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"Jirafe": {
"cats": [ 10, 32 ],
"script": "/jirafe\\.js",
@ -828,12 +863,13 @@
},
"jQuery": {
"cats": [ 12 ],
"script": "jquery.*\\.js",
"script": [ "jquery(\\-|\\.)([\\d\\.]*\\d)[^/]*\\.js\\;version:\\2", "([\\d\\.]+)/jquery(\\.min)?\\.js\\;version:\\1", "jquery.*\\.js" ],
"env": "^jQuery$"
},
"jQuery Mobile": {
"cats": [ 26 ],
"script": "jquery\\.mobile.*\\.js"
"script": "jquery\\.mobile.*\\.js",
"implies": [ "jQuery" ]
},
"jQuery Sparklines": {
"cats": [ 25 ],
@ -875,6 +911,10 @@
"cats": [ 1 ],
"meta": { "generator": "Kentico CMS" }
},
"KineticJS": {
"cats": [ 25 ],
"script": "kinetic(-v?([\\d\\.]+))?\\.js\\;version:\\2"
},
"KISSmetrics": {
"cats": [ 10 ],
"env": "^KM_COOKIE_DOMAIN$"
@ -978,13 +1018,13 @@
"Microsoft ASP.NET": {
"cats": [ 18 ],
"html": "<input[^>]+name=\\\"__VIEWSTATE",
"headers": { "X-Powered-By": "ASP\\.NET", "X-AspNet-Version": ".+" },
"headers": { "X-Powered-By": "ASP\\.NET", "X-AspNet-Version": "(.+)\\;version:\\1" },
"implies": [ "IIS", "Windows Server" ]
},
"Microsoft SharePoint": {
"cats": [ 1 ],
"meta": { "generator": "Microsoft SharePoint" },
"headers": { "MicrosoftSharePointTeamServices": ".*", "X-SharePointHealthScore": ".*", "SPRequestGuid": ".*", "SharePointHealthScore": ".*" }
"headers": { "MicrosoftSharePointTeamServices": "(.*)\\;version:\\1", "X-SharePointHealthScore": ".*", "SPRequestGuid": ".*", "SharePointHealthScore": ".*" }
},
"MiniBB": {
"cats": [ 2 ],
@ -1007,7 +1047,7 @@
},
"Modernizr": {
"cats": [ 12 ],
"script": "modernizr.*\\.js",
"script": "modernizr(-([\\d\\.]*[\\d]))?.*\\.js\\;version:\\2",
"env": "^Modernizr$"
},
"MODx": {
@ -1016,17 +1056,47 @@
"env": "^MODX_MEDIA_PATH$",
"headers": { "X-Powered-By": "^MODx", "Set-Cookie": "SN4[a-f\\d]{12}|utmcct=/applications/modx" },
"implies": [ "PHP" ]
},
},
"mod_fastcgi": {
"cats": [ 33 ],
"headers": { "Server": "mod_fastcgi(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Apache" ]
},
"mod_python": {
"cats": [ 33 ],
"headers": { "Server": "mod_python(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Python", "Apache" ]
},
"mod_rack": {
"cats": [ 33 ],
"headers": { "Server": "mod_rack(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_rack(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Ruby", "Apache" ]
},
"mod_rails": {
"cats": [ 33 ],
"headers": { "Server": "mod_rails(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_rails(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Ruby on Rails", "Ruby", "Apache" ]
},
"mod_ssl": {
"cats": [ 33 ],
"headers": { "Server": "mod_ssl(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Apache" ]
},
"mod_wsgi": {
"cats": [ 33 ],
"headers": { "Server": "mod_wsgi(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_wsgi(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Python", "Apache" ]
},
"MoinMoin": {
"cats": [ 8 ],
"script": "moin.+/common/js/common\\.js",
"script": "moin(_static(\\d)(\\d)(\\d)|.+)/common/js/common\\.js\\;version:\\2.\\3.\\4",
"env": "^show_switch2gui$",
"implies": [ "Python" ]
},
"Mojolicious": {
"cats": [ 18 ],
"headers": { "x-powered-by": "mojolicious" },
"implies": [ "PERL" ]
"implies": [ "Perl" ]
},
"Mollom": {
"cats": [ 16 ],
@ -1126,6 +1196,12 @@
"cats": [ 1 ],
"html": "<meta[^>]+openEngine"
},
"OpenGrok": {
"cats": [ 19 ],
"headers": { "Set-Cookie": "OpenGrok" },
"meta": { "generator": "OpenGrok( v?([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"OpenGSE": {
"cats": [ 22 ],
"headers": { "Server": "GSE" },
@ -1140,6 +1216,10 @@
"cats": [ 1 ],
"headers": { "X-Powered-By": "OpenNemas" }
},
"OpenSSL": {
"cats": [ 33 ],
"headers": { "Server": "OpenSSL(/([\\d\\.]+[a-z]?))?\\;version:\\2" }
},
"OpenText Web Solutions": {
"cats": [ 1 ],
"html": "<!--[^>]+published by Open Text Web Solutions",
@ -1149,6 +1229,10 @@
"cats": [ 10 ],
"env": "^optimizely$"
},
"Oracle Application Server": {
"cats": [ 22 ],
"headers": { "Server": "Oracle(-| )Application(-| )Server((-| )(\\d+[a-z]?))?\\;version:\\5" }
},
"Oracle Recommendations On Demand": {
"cats": [ 10 ],
"script": "atgsvcs.+atgsvcs\\.js"
@ -1156,7 +1240,7 @@
"osCommerce": {
"cats": [ 6 ],
"html": "(<a[^>]*(\\?|&)osCsid|Powered by (<[^]+>)?osCommerce</a>|<[^]+class=\\\"[^>]*infoBoxHeading)",
"header": { "Set-Cookie": "osCsid=|utmcct=/applications/oscommerce" }
"headers": { "Set-Cookie": "osCsid=|utmcct=/applications/oscommerce" }
},
"osCSS": {
"cats": [ 6 ],
@ -1195,7 +1279,7 @@
},
"PHP": {
"cats": [ 27 ],
"headers": { "Server": "php", "X-Powered-By": "php", "Set-Cookie": "PHPSESSID" },
"headers": { "Server": "php/?([\\d\\.]+)?\\;version:\\1", "X-Powered-By": "php/?([\\d\\.]+)?\\;version:\\1", "Set-Cookie": "PHPSESSID" },
"url": "\\.php$"
},
"phpAlbum": {
@ -1302,9 +1386,9 @@
},
"Prototype": {
"cats": [ 12 ],
"script": "(prototype|protoaculous)\\.js",
"script": "(prototype|protoaculous)(-([\\d\\.]*[\\d]))?.*\\.js\\;version:\\3",
"env": "^Prototype$"
},
},
"Protovis": {
"cats": [ 25 ],
"script": "protovis.*\\.js",
@ -1316,7 +1400,8 @@
"implies": [ "PHP" ]
},
"Python": {
"cats": [ 27 ]
"cats": [ 27 ],
"headers": { "Server": "(^|\\s)Python(/([\\d\\.]+))?\\;version:\\3" }
},
"Quantcast": {
"cats": [ 10 ],
@ -1339,8 +1424,8 @@
},
"RBS Change": {
"cats": [ 1, 6 ],
"html": "<html[^>]*\\s+xmlns:change=",
"meta": { "generator": "^RBS Change" },
"html": "<html[^>]+xmlns:change=",
"meta": { "generator": "RBS Change" },
"implies": [ "PHP" ]
},
"RCMS": {
@ -1355,7 +1440,7 @@
},
"Red Hat": {
"cats": [ 28 ],
"headers": { "Server": "(Red Hat|rhel\\d+)", "X-Powered-By": "Red Hat" }
"headers": { "Server": "(.*rhel(\\d+)|Red Hat)\\;version:\\2", "X-Powered-By": "Red Hat" }
},
"Reddit": {
"cats": [ 2 ],
@ -1405,6 +1490,12 @@
"cats": [ 1 ],
"meta": { "generator": "Serendipity", "Powered-By": "Serendipity" }
},
"Sarka-SPIP": {
"cats": [ 1 ],
"meta": { "generator": "(^|\\s)Sarka-SPIP(\\s([\\d\\.]+(\\s\\[\\d+\\])?))?\\;version:\\3" },
"headers": { "X-Spip-Cache": ".*" },
"implies": [ "SPIP" ]
},
"script.aculo.us": {
"cats": [ 12 ],
"script": "(scriptaculous|protoaculous)\\.js",
@ -1427,12 +1518,6 @@
"script": "w\\.sharethis\\.com/",
"env": "^SHARETHIS$"
},
"ShinyStat": {
"cats": [ 10 ],
"env": "^SSsdk$",
"html": "<img[^>]*\\s+src=['\"]?https?://www\\.shinystat\\.com/cgi-bin/shinystat\\.cgi\\?[^'\"\\s>]*['\"\\s/>]",
"script": "^https?://codice(business|ssl|pro|isp)?\\.shinystat\\.com/cgi-bin/getcod\\.cgi"
},
"Shopalize": {
"cats": [ 5, 10 ],
"env": "^Shopalize$"
@ -1515,7 +1600,7 @@
},
"SPIP": {
"cats": [ 1 ],
"meta": { "generator": "SPIP" },
"meta": { "generator": "(^|\\s)SPIP(\\s([\\d\\.]+(\\s\\[\\d+\\])?))?\\;version:\\3" },
"headers": { "X-Spip-Cache": ".*" }
},
"SQL Buddy": {
@ -1529,7 +1614,8 @@
"Squiz Matrix": {
"cats": [ 1 ],
"meta": { "generator": "Squiz Matrix" },
"html": " Running (MySource|Squiz) Matrix", "X-Powered-By": "Squiz Matrix",
"html": " Running (MySource|Squiz) Matrix",
"headers": { "X-Powered-By": "Squiz Matrix" },
"implies": [ "PHP" ]
},
"StatCounter": {
@ -1545,6 +1631,18 @@
"script": "cdn\\.sublimevideo\\.net/js/[a-z\\d]+\\.js",
"env": "^sublimevideo$"
},
"Supersized": {
"cats": [ 7, 25 ],
"script": "supersized(\\.([\\d\\.]*[\\d]))?.*\\.js\\;version:\\2"
},
"SUSE": {
"cats": [ 28 ],
"headers": { "Server": "SUSE(/?\\s?-?([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "SUSE(/?\\s?-?([\\d\\.]+))?\\;version:\\2" }
},
"Scientific Linux": {
"cats": [ 28 ],
"headers": { "Server": "Scientific Linux", "X-Powered-By": "Scientific Linux" }
},
"SWFObject": {
"cats": [ 19 ],
"script": "swfobject.*\\.js",
@ -1798,7 +1896,7 @@
},
"WordPress": {
"cats": [ 1, 11 ],
"meta": { "generator": "WordPress" },
"meta": { "generator": "WordPress( [\\d\\.]+)?\\;version:\\1" },
"html": "<link rel=\\\"stylesheet\\\" [^>]+wp-content",
"env": "^wp_username$",
"implies": [ "PHP" ]

@ -31,7 +31,8 @@
"29": "search-engines",
"30": "web-mail",
"31": "cdn",
"32": "marketing-automation"
"32": "marketing-automation",
"33": "web-server-extension"
},
"apps": {
"1C-Bitrix": {
@ -73,7 +74,7 @@
},
"Adobe GoLive": {
"cats": [ 20 ],
"meta": { "generator": "Adobe GoLive" }
"meta": { "generator": "Adobe GoLive(\\s([\\d\\.]+))?\\;version:\\2" }
},
"Advanced Web Stats": {
"cats": [ 10 ],
@ -84,6 +85,10 @@
"cats": [ 12 ],
"env": "^AUI$"
},
"Amaya": {
"cats": [ 20 ],
"meta": { "generator": "Amaya( V?([\\d\\.]+[a-z]))?\\;version:\\2" }
},
"Ametys": {
"cats": [ 1 ],
"meta": { "generator": "(Ametys|Anyware Technologies)" },
@ -112,7 +117,7 @@
},
"Apache": {
"cats": [ 22 ],
"headers": { "Server": "(Apache($|[^-])|HTTPD)" }
"headers": { "Server": "(Apache($|/([\\d\\.]+)|[^/-])|HTTPD)\\;version:\\3" }
},
"Apache JSPWiki": {
"cats": [ 8 ],
@ -144,13 +149,17 @@
},
"Atlassian Confluence": {
"cats": [ 8 ],
"html": "Powered by <a href=.+atlassian\\.com/software/confluence",
"html": "Powered by <a href=[^>]+atlassian\\.com/software/confluence([^>]+>Atlassian Confluence</a> ([\\d\\.]+))?\\;version:\\2",
"headers": { "X-Confluence-Request-Time": ".*" },
"meta": { "confluence-request-time": ".*" },
"implies": [ "Java" ]
},
"Atlassian Jira": {
"cats": [ 13 ],
"env": "^jira$",
"html": "Powered by <a href=.+atlassian\\.com/software/jira",
"script": "/jira/s/",
"url": "/secure/Dashboard.jspa",
"html": "Powered by\\s+<a href=[^>]+atlassian\\.com/(software/jira|jira-bug-tracking/)[^>]+>Atlassian\\s+JIRA([^v]*v(ersion: )?(\\d+\\.\\d+(\\.\\d+)?))?\\;version:\\4",
"implies": [ "Java" ]
},
"AWStats": {
@ -297,6 +306,11 @@
"meta": { "generator": "CMS Made Simple" },
"implies": [ "PHP" ]
},
"CMSimple": {
"cats": [ 1 ],
"meta": { "generator": "CMSimple( [\\d\\.]+)?\\;version:\\1" },
"implies": [ "PHP" ]
},
"CO2Stats": {
"cats": [ 10 ],
"html": "src=[^>]+co2stats\\.com/propres\\.php"
@ -484,11 +498,12 @@
"meta": { "generator": "Dokeos" },
"html": "Portal <a[^>]+>Dokeos|@import \\\"[^\\\"]+dokeos_blue",
"headers": { "X-Powered-By": "Dokeos" },
"implies": [ "PHP", "xajax", "jQuery", "CKEditor" ]
"implies": [ "PHP", "Xajax", "jQuery", "CKEditor" ]
},
"DokuWiki": {
"cats": [ 8 ],
"meta": { "generator": "DokuWiki" },
"meta": { "generator": "DokuWiki( Release [\\-\\d]+)?\\;version:\\1" },
"headers": { "Set-Cookie": "DokuWiki=" },
"implies": [ "PHP" ]
},
"DotNetNuke": {
@ -505,13 +520,13 @@
},
"DreamWeaver": {
"cats": [ 20 ],
"html": "(<!--[^>]*(InstanceBeginEditable|Dreamweaver[^>]+target|DWLayoutDefaultTable)|function MM_preloadImages\\(\\) {)"
"html": "(<!--[^>]*(InstanceBeginEditable|Dreamweaver([^>]+)target|DWLayoutDefaultTable)|function MM_preloadImages\\(\\) {)\\;version:\\3"
},
"Drupal": {
"cats": [ 1 ],
"script": "drupal\\.js",
"html": "Drupal(\\.extend)?.+settings|<(link|style)[^>]+sites/(default|all)/(themes|modules)/",
"headers": { "X-Drupal-Cache": ".*", "X-Generator": "Drupal", "Expires": "19 Nov 1978" },
"headers": { "X-Drupal-Cache": ".*", "X-Generator": "Drupal(\\s([\\d\\.]+))?\\;version:\\2", "Expires": "19 Nov 1978" },
"env": "^Drupal$",
"implies": [ "PHP" ]
},
@ -605,7 +620,7 @@
},
"FrontPage": {
"cats": [ 20 ],
"meta": { "generator": "Microsoft FrontPage" },
"meta": { "generator": "Microsoft FrontPage(\\s([\\d\\.]+))?\\;version:\\2" },
"html": "<html[^>]+urn:schemas-microsoft-com:office:office"
},
"FWP": {
@ -663,7 +678,7 @@
},
"Google Maps": {
"cats": [ 5 ],
"script": "(maps\\.google\\.com/maps\\?file=api|maps\\.google\\.com/maps/api/staticmap)"
"script": "(maps\\.google\\.com/maps\\?file=api(&v=([\\d\\.]+))?|maps\\.google\\.com/maps/api/staticmap)\\;version:API v\\3"
},
"Google Sites": {
"cats": [ 1 ],
@ -739,7 +754,7 @@
},
"IIS": {
"cats": [ 22 ],
"headers": { "Server": "IIS" },
"headers": { "Server": "IIS\\/?([\\d\\.]+)?\\;version:\\1" },
"implies": [ "Windows Server" ]
},
"ImpressCMS": {
@ -777,7 +792,12 @@
},
"iWeb": {
"cats": [ 20 ],
"meta": { "generator": "^iWeb" }
"meta": { "generator": "^iWeb( [\\d\\.]+)?\\;version:\\1" }
},
"JAlbum": {
"cats": [ 7 ],
"meta": { "generator": "JAlbum( [\\d\\.]+)?\\;version:\\1" },
"implies": [ "Java" ]
},
"Jalios": {
"cats": [ 1 ],
@ -792,6 +812,21 @@
"script": "jit.*\\.js",
"env": "^\\$jit$"
},
"JavaServer Faces": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "JSF(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"JavaServer Pages": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "JSP(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"Java Servlet": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "Servlet(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"Jirafe": {
"cats": [ 10, 32 ],
"script": "/jirafe\\.js",
@ -828,12 +863,13 @@
},
"jQuery": {
"cats": [ 12 ],
"script": "jquery.*\\.js",
"script": [ "jquery(\\-|\\.)([\\d\\.]*\\d)[^/]*\\.js\\;version:\\2", "([\\d\\.]+)/jquery(\\.min)?\\.js\\;version:\\1", "jquery.*\\.js" ],
"env": "^jQuery$"
},
"jQuery Mobile": {
"cats": [ 26 ],
"script": "jquery\\.mobile.*\\.js"
"script": "jquery\\.mobile.*\\.js",
"implies": [ "jQuery" ]
},
"jQuery Sparklines": {
"cats": [ 25 ],
@ -875,6 +911,10 @@
"cats": [ 1 ],
"meta": { "generator": "Kentico CMS" }
},
"KineticJS": {
"cats": [ 25 ],
"script": "kinetic(-v?([\\d\\.]+))?\\.js\\;version:\\2"
},
"KISSmetrics": {
"cats": [ 10 ],
"env": "^KM_COOKIE_DOMAIN$"
@ -978,13 +1018,13 @@
"Microsoft ASP.NET": {
"cats": [ 18 ],
"html": "<input[^>]+name=\\\"__VIEWSTATE",
"headers": { "X-Powered-By": "ASP\\.NET", "X-AspNet-Version": ".+" },
"headers": { "X-Powered-By": "ASP\\.NET", "X-AspNet-Version": "(.+)\\;version:\\1" },
"implies": [ "IIS", "Windows Server" ]
},
"Microsoft SharePoint": {
"cats": [ 1 ],
"meta": { "generator": "Microsoft SharePoint" },
"headers": { "MicrosoftSharePointTeamServices": ".*", "X-SharePointHealthScore": ".*", "SPRequestGuid": ".*", "SharePointHealthScore": ".*" }
"headers": { "MicrosoftSharePointTeamServices": "(.*)\\;version:\\1", "X-SharePointHealthScore": ".*", "SPRequestGuid": ".*", "SharePointHealthScore": ".*" }
},
"MiniBB": {
"cats": [ 2 ],
@ -1007,7 +1047,7 @@
},
"Modernizr": {
"cats": [ 12 ],
"script": "modernizr.*\\.js",
"script": "modernizr(-([\\d\\.]*[\\d]))?.*\\.js\\;version:\\2",
"env": "^Modernizr$"
},
"MODx": {
@ -1016,17 +1056,47 @@
"env": "^MODX_MEDIA_PATH$",
"headers": { "X-Powered-By": "^MODx", "Set-Cookie": "SN4[a-f\\d]{12}|utmcct=/applications/modx" },
"implies": [ "PHP" ]
},
},
"mod_fastcgi": {
"cats": [ 33 ],
"headers": { "Server": "mod_fastcgi(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Apache" ]
},
"mod_python": {
"cats": [ 33 ],
"headers": { "Server": "mod_python(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Python", "Apache" ]
},
"mod_rack": {
"cats": [ 33 ],
"headers": { "Server": "mod_rack(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_rack(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Ruby", "Apache" ]
},
"mod_rails": {
"cats": [ 33 ],
"headers": { "Server": "mod_rails(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_rails(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Ruby on Rails", "Ruby", "Apache" ]
},
"mod_ssl": {
"cats": [ 33 ],
"headers": { "Server": "mod_ssl(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Apache" ]
},
"mod_wsgi": {
"cats": [ 33 ],
"headers": { "Server": "mod_wsgi(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_wsgi(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Python", "Apache" ]
},
"MoinMoin": {
"cats": [ 8 ],
"script": "moin.+/common/js/common\\.js",
"script": "moin(_static(\\d)(\\d)(\\d)|.+)/common/js/common\\.js\\;version:\\2.\\3.\\4",
"env": "^show_switch2gui$",
"implies": [ "Python" ]
},
"Mojolicious": {
"cats": [ 18 ],
"headers": { "x-powered-by": "mojolicious" },
"implies": [ "PERL" ]
"implies": [ "Perl" ]
},
"Mollom": {
"cats": [ 16 ],
@ -1126,6 +1196,12 @@
"cats": [ 1 ],
"html": "<meta[^>]+openEngine"
},
"OpenGrok": {
"cats": [ 19 ],
"headers": { "Set-Cookie": "OpenGrok" },
"meta": { "generator": "OpenGrok( v?([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"OpenGSE": {
"cats": [ 22 ],
"headers": { "Server": "GSE" },
@ -1140,6 +1216,10 @@
"cats": [ 1 ],
"headers": { "X-Powered-By": "OpenNemas" }
},
"OpenSSL": {
"cats": [ 33 ],
"headers": { "Server": "OpenSSL(/([\\d\\.]+[a-z]?))?\\;version:\\2" }
},
"OpenText Web Solutions": {
"cats": [ 1 ],
"html": "<!--[^>]+published by Open Text Web Solutions",
@ -1149,6 +1229,10 @@
"cats": [ 10 ],
"env": "^optimizely$"
},
"Oracle Application Server": {
"cats": [ 22 ],
"headers": { "Server": "Oracle(-| )Application(-| )Server((-| )(\\d+[a-z]?))?\\;version:\\5" }
},
"Oracle Recommendations On Demand": {
"cats": [ 10 ],
"script": "atgsvcs.+atgsvcs\\.js"
@ -1156,7 +1240,7 @@
"osCommerce": {
"cats": [ 6 ],
"html": "(<a[^>]*(\\?|&)osCsid|Powered by (<[^]+>)?osCommerce</a>|<[^]+class=\\\"[^>]*infoBoxHeading)",
"header": { "Set-Cookie": "osCsid=|utmcct=/applications/oscommerce" }
"headers": { "Set-Cookie": "osCsid=|utmcct=/applications/oscommerce" }
},
"osCSS": {
"cats": [ 6 ],
@ -1195,7 +1279,7 @@
},
"PHP": {
"cats": [ 27 ],
"headers": { "Server": "php", "X-Powered-By": "php", "Set-Cookie": "PHPSESSID" },
"headers": { "Server": "php/?([\\d\\.]+)?\\;version:\\1", "X-Powered-By": "php/?([\\d\\.]+)?\\;version:\\1", "Set-Cookie": "PHPSESSID" },
"url": "\\.php$"
},
"phpAlbum": {
@ -1302,9 +1386,9 @@
},
"Prototype": {
"cats": [ 12 ],
"script": "(prototype|protoaculous)\\.js",
"script": "(prototype|protoaculous)(-([\\d\\.]*[\\d]))?.*\\.js\\;version:\\3",
"env": "^Prototype$"
},
},
"Protovis": {
"cats": [ 25 ],
"script": "protovis.*\\.js",
@ -1316,7 +1400,8 @@
"implies": [ "PHP" ]
},
"Python": {
"cats": [ 27 ]
"cats": [ 27 ],
"headers": { "Server": "(^|\\s)Python(/([\\d\\.]+))?\\;version:\\3" }
},
"Quantcast": {
"cats": [ 10 ],
@ -1339,8 +1424,8 @@
},
"RBS Change": {
"cats": [ 1, 6 ],
"html": "<html[^>]*\\s+xmlns:change=",
"meta": { "generator": "^RBS Change" },
"html": "<html[^>]+xmlns:change=",
"meta": { "generator": "RBS Change" },
"implies": [ "PHP" ]
},
"RCMS": {
@ -1355,7 +1440,7 @@
},
"Red Hat": {
"cats": [ 28 ],
"headers": { "Server": "(Red Hat|rhel\\d+)", "X-Powered-By": "Red Hat" }
"headers": { "Server": "(.*rhel(\\d+)|Red Hat)\\;version:\\2", "X-Powered-By": "Red Hat" }
},
"Reddit": {
"cats": [ 2 ],
@ -1405,6 +1490,12 @@
"cats": [ 1 ],
"meta": { "generator": "Serendipity", "Powered-By": "Serendipity" }
},
"Sarka-SPIP": {
"cats": [ 1 ],
"meta": { "generator": "(^|\\s)Sarka-SPIP(\\s([\\d\\.]+(\\s\\[\\d+\\])?))?\\;version:\\3" },
"headers": { "X-Spip-Cache": ".*" },
"implies": [ "SPIP" ]
},
"script.aculo.us": {
"cats": [ 12 ],
"script": "(scriptaculous|protoaculous)\\.js",
@ -1427,12 +1518,6 @@
"script": "w\\.sharethis\\.com/",
"env": "^SHARETHIS$"
},
"ShinyStat": {
"cats": [ 10 ],
"env": "^SSsdk$",
"html": "<img[^>]*\\s+src=['\"]?https?://www\\.shinystat\\.com/cgi-bin/shinystat\\.cgi\\?[^'\"\\s>]*['\"\\s/>]",
"script": "^https?://codice(business|ssl|pro|isp)?\\.shinystat\\.com/cgi-bin/getcod\\.cgi"
},
"Shopalize": {
"cats": [ 5, 10 ],
"env": "^Shopalize$"
@ -1515,7 +1600,7 @@
},
"SPIP": {
"cats": [ 1 ],
"meta": { "generator": "SPIP" },
"meta": { "generator": "(^|\\s)SPIP(\\s([\\d\\.]+(\\s\\[\\d+\\])?))?\\;version:\\3" },
"headers": { "X-Spip-Cache": ".*" }
},
"SQL Buddy": {
@ -1529,7 +1614,8 @@
"Squiz Matrix": {
"cats": [ 1 ],
"meta": { "generator": "Squiz Matrix" },
"html": " Running (MySource|Squiz) Matrix", "X-Powered-By": "Squiz Matrix",
"html": " Running (MySource|Squiz) Matrix",
"headers": { "X-Powered-By": "Squiz Matrix" },
"implies": [ "PHP" ]
},
"StatCounter": {
@ -1545,6 +1631,18 @@
"script": "cdn\\.sublimevideo\\.net/js/[a-z\\d]+\\.js",
"env": "^sublimevideo$"
},
"Supersized": {
"cats": [ 7, 25 ],
"script": "supersized(\\.([\\d\\.]*[\\d]))?.*\\.js\\;version:\\2"
},
"SUSE": {
"cats": [ 28 ],
"headers": { "Server": "SUSE(/?\\s?-?([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "SUSE(/?\\s?-?([\\d\\.]+))?\\;version:\\2" }
},
"Scientific Linux": {
"cats": [ 28 ],
"headers": { "Server": "Scientific Linux", "X-Powered-By": "Scientific Linux" }
},
"SWFObject": {
"cats": [ 19 ],
"script": "swfobject.*\\.js",
@ -1798,7 +1896,7 @@
},
"WordPress": {
"cats": [ 1, 11 ],
"meta": { "generator": "WordPress" },
"meta": { "generator": "WordPress( [\\d\\.]+)?\\;version:\\1" },
"html": "<link rel=\\\"stylesheet\\\" [^>]+wp-content",
"env": "^wp_username$",
"implies": [ "PHP" ]

@ -28,7 +28,10 @@ var wappalyzer = (function() {
* Parse apps.json patterns
*/
var parse = function(patterns) {
var parsed = [];
var
attrs,
parsed = []
;
// Convert single patterns to an array
if ( typeof patterns === 'string' ) {
@ -36,9 +39,22 @@ var wappalyzer = (function() {
}
patterns.map(function(pattern) {
parsed.push({
regex: new RegExp(pattern.replace('/', '\\\/'), 'i') // Escape slashes in regular expression
});
attrs = {};
pattern.split('\\;').map(function(attr, i) {
if ( i ) {
// Key value pairs
attr = attr.split(':');
if ( attr.length === 2 ) {
attrs[attr[0]] = attr[1];
}
} else {
attrs.regex = new RegExp(attr.replace('/', '\\\/'), 'i'); // Escape slashes in regular expression
}
});
parsed.push(attrs);
});
return parsed;

@ -31,7 +31,8 @@
"29": "search-engines",
"30": "web-mail",
"31": "cdn",
"32": "marketing-automation"
"32": "marketing-automation",
"33": "web-server-extension"
},
"apps": {
"1C-Bitrix": {
@ -73,7 +74,7 @@
},
"Adobe GoLive": {
"cats": [ 20 ],
"meta": { "generator": "Adobe GoLive" }
"meta": { "generator": "Adobe GoLive(\\s([\\d\\.]+))?\\;version:\\2" }
},
"Advanced Web Stats": {
"cats": [ 10 ],
@ -84,6 +85,10 @@
"cats": [ 12 ],
"env": "^AUI$"
},
"Amaya": {
"cats": [ 20 ],
"meta": { "generator": "Amaya( V?([\\d\\.]+[a-z]))?\\;version:\\2" }
},
"Ametys": {
"cats": [ 1 ],
"meta": { "generator": "(Ametys|Anyware Technologies)" },
@ -112,7 +117,7 @@
},
"Apache": {
"cats": [ 22 ],
"headers": { "Server": "(Apache($|[^-])|HTTPD)" }
"headers": { "Server": "(Apache($|/([\\d\\.]+)|[^/-])|HTTPD)\\;version:\\3" }
},
"Apache JSPWiki": {
"cats": [ 8 ],
@ -144,13 +149,17 @@
},
"Atlassian Confluence": {
"cats": [ 8 ],
"html": "Powered by <a href=.+atlassian\\.com/software/confluence",
"html": "Powered by <a href=[^>]+atlassian\\.com/software/confluence([^>]+>Atlassian Confluence</a> ([\\d\\.]+))?\\;version:\\2",
"headers": { "X-Confluence-Request-Time": ".*" },
"meta": { "confluence-request-time": ".*" },
"implies": [ "Java" ]
},
"Atlassian Jira": {
"cats": [ 13 ],
"env": "^jira$",
"html": "Powered by <a href=.+atlassian\\.com/software/jira",
"script": "/jira/s/",
"url": "/secure/Dashboard.jspa",
"html": "Powered by\\s+<a href=[^>]+atlassian\\.com/(software/jira|jira-bug-tracking/)[^>]+>Atlassian\\s+JIRA([^v]*v(ersion: )?(\\d+\\.\\d+(\\.\\d+)?))?\\;version:\\4",
"implies": [ "Java" ]
},
"AWStats": {
@ -297,6 +306,11 @@
"meta": { "generator": "CMS Made Simple" },
"implies": [ "PHP" ]
},
"CMSimple": {
"cats": [ 1 ],
"meta": { "generator": "CMSimple( [\\d\\.]+)?\\;version:\\1" },
"implies": [ "PHP" ]
},
"CO2Stats": {
"cats": [ 10 ],
"html": "src=[^>]+co2stats\\.com/propres\\.php"
@ -484,11 +498,12 @@
"meta": { "generator": "Dokeos" },
"html": "Portal <a[^>]+>Dokeos|@import \\\"[^\\\"]+dokeos_blue",
"headers": { "X-Powered-By": "Dokeos" },
"implies": [ "PHP", "xajax", "jQuery", "CKEditor" ]
"implies": [ "PHP", "Xajax", "jQuery", "CKEditor" ]
},
"DokuWiki": {
"cats": [ 8 ],
"meta": { "generator": "DokuWiki" },
"meta": { "generator": "DokuWiki( Release [\\-\\d]+)?\\;version:\\1" },
"headers": { "Set-Cookie": "DokuWiki=" },
"implies": [ "PHP" ]
},
"DotNetNuke": {
@ -505,13 +520,13 @@
},
"DreamWeaver": {
"cats": [ 20 ],
"html": "(<!--[^>]*(InstanceBeginEditable|Dreamweaver[^>]+target|DWLayoutDefaultTable)|function MM_preloadImages\\(\\) {)"
"html": "(<!--[^>]*(InstanceBeginEditable|Dreamweaver([^>]+)target|DWLayoutDefaultTable)|function MM_preloadImages\\(\\) {)\\;version:\\3"
},
"Drupal": {
"cats": [ 1 ],
"script": "drupal\\.js",
"html": "Drupal(\\.extend)?.+settings|<(link|style)[^>]+sites/(default|all)/(themes|modules)/",
"headers": { "X-Drupal-Cache": ".*", "X-Generator": "Drupal", "Expires": "19 Nov 1978" },
"headers": { "X-Drupal-Cache": ".*", "X-Generator": "Drupal(\\s([\\d\\.]+))?\\;version:\\2", "Expires": "19 Nov 1978" },
"env": "^Drupal$",
"implies": [ "PHP" ]
},
@ -605,7 +620,7 @@
},
"FrontPage": {
"cats": [ 20 ],
"meta": { "generator": "Microsoft FrontPage" },
"meta": { "generator": "Microsoft FrontPage(\\s([\\d\\.]+))?\\;version:\\2" },
"html": "<html[^>]+urn:schemas-microsoft-com:office:office"
},
"FWP": {
@ -663,7 +678,7 @@
},
"Google Maps": {
"cats": [ 5 ],
"script": "(maps\\.google\\.com/maps\\?file=api|maps\\.google\\.com/maps/api/staticmap)"
"script": "(maps\\.google\\.com/maps\\?file=api(&v=([\\d\\.]+))?|maps\\.google\\.com/maps/api/staticmap)\\;version:API v\\3"
},
"Google Sites": {
"cats": [ 1 ],
@ -739,7 +754,7 @@
},
"IIS": {
"cats": [ 22 ],
"headers": { "Server": "IIS" },
"headers": { "Server": "IIS\\/?([\\d\\.]+)?\\;version:\\1" },
"implies": [ "Windows Server" ]
},
"ImpressCMS": {
@ -777,7 +792,12 @@
},
"iWeb": {
"cats": [ 20 ],
"meta": { "generator": "^iWeb" }
"meta": { "generator": "^iWeb( [\\d\\.]+)?\\;version:\\1" }
},
"JAlbum": {
"cats": [ 7 ],
"meta": { "generator": "JAlbum( [\\d\\.]+)?\\;version:\\1" },
"implies": [ "Java" ]
},
"Jalios": {
"cats": [ 1 ],
@ -792,6 +812,21 @@
"script": "jit.*\\.js",
"env": "^\\$jit$"
},
"JavaServer Faces": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "JSF(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"JavaServer Pages": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "JSP(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"Java Servlet": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "Servlet(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"Jirafe": {
"cats": [ 10, 32 ],
"script": "/jirafe\\.js",
@ -828,12 +863,13 @@
},
"jQuery": {
"cats": [ 12 ],
"script": "jquery.*\\.js",
"script": [ "jquery(\\-|\\.)([\\d\\.]*\\d)[^/]*\\.js\\;version:\\2", "([\\d\\.]+)/jquery(\\.min)?\\.js\\;version:\\1", "jquery.*\\.js" ],
"env": "^jQuery$"
},
"jQuery Mobile": {
"cats": [ 26 ],
"script": "jquery\\.mobile.*\\.js"
"script": "jquery\\.mobile.*\\.js",
"implies": [ "jQuery" ]
},
"jQuery Sparklines": {
"cats": [ 25 ],
@ -875,6 +911,10 @@
"cats": [ 1 ],
"meta": { "generator": "Kentico CMS" }
},
"KineticJS": {
"cats": [ 25 ],
"script": "kinetic(-v?([\\d\\.]+))?\\.js\\;version:\\2"
},
"KISSmetrics": {
"cats": [ 10 ],
"env": "^KM_COOKIE_DOMAIN$"
@ -978,13 +1018,13 @@
"Microsoft ASP.NET": {
"cats": [ 18 ],
"html": "<input[^>]+name=\\\"__VIEWSTATE",
"headers": { "X-Powered-By": "ASP\\.NET", "X-AspNet-Version": ".+" },
"headers": { "X-Powered-By": "ASP\\.NET", "X-AspNet-Version": "(.+)\\;version:\\1" },
"implies": [ "IIS", "Windows Server" ]
},
"Microsoft SharePoint": {
"cats": [ 1 ],
"meta": { "generator": "Microsoft SharePoint" },
"headers": { "MicrosoftSharePointTeamServices": ".*", "X-SharePointHealthScore": ".*", "SPRequestGuid": ".*", "SharePointHealthScore": ".*" }
"headers": { "MicrosoftSharePointTeamServices": "(.*)\\;version:\\1", "X-SharePointHealthScore": ".*", "SPRequestGuid": ".*", "SharePointHealthScore": ".*" }
},
"MiniBB": {
"cats": [ 2 ],
@ -1007,7 +1047,7 @@
},
"Modernizr": {
"cats": [ 12 ],
"script": "modernizr.*\\.js",
"script": "modernizr(-([\\d\\.]*[\\d]))?.*\\.js\\;version:\\2",
"env": "^Modernizr$"
},
"MODx": {
@ -1016,17 +1056,47 @@
"env": "^MODX_MEDIA_PATH$",
"headers": { "X-Powered-By": "^MODx", "Set-Cookie": "SN4[a-f\\d]{12}|utmcct=/applications/modx" },
"implies": [ "PHP" ]
},
},
"mod_fastcgi": {
"cats": [ 33 ],
"headers": { "Server": "mod_fastcgi(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Apache" ]
},
"mod_python": {
"cats": [ 33 ],
"headers": { "Server": "mod_python(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Python", "Apache" ]
},
"mod_rack": {
"cats": [ 33 ],
"headers": { "Server": "mod_rack(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_rack(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Ruby", "Apache" ]
},
"mod_rails": {
"cats": [ 33 ],
"headers": { "Server": "mod_rails(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_rails(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Ruby on Rails", "Ruby", "Apache" ]
},
"mod_ssl": {
"cats": [ 33 ],
"headers": { "Server": "mod_ssl(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Apache" ]
},
"mod_wsgi": {
"cats": [ 33 ],
"headers": { "Server": "mod_wsgi(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_wsgi(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Python", "Apache" ]
},
"MoinMoin": {
"cats": [ 8 ],
"script": "moin.+/common/js/common\\.js",
"script": "moin(_static(\\d)(\\d)(\\d)|.+)/common/js/common\\.js\\;version:\\2.\\3.\\4",
"env": "^show_switch2gui$",
"implies": [ "Python" ]
},
"Mojolicious": {
"cats": [ 18 ],
"headers": { "x-powered-by": "mojolicious" },
"implies": [ "PERL" ]
"implies": [ "Perl" ]
},
"Mollom": {
"cats": [ 16 ],
@ -1126,6 +1196,12 @@
"cats": [ 1 ],
"html": "<meta[^>]+openEngine"
},
"OpenGrok": {
"cats": [ 19 ],
"headers": { "Set-Cookie": "OpenGrok" },
"meta": { "generator": "OpenGrok( v?([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"OpenGSE": {
"cats": [ 22 ],
"headers": { "Server": "GSE" },
@ -1140,6 +1216,10 @@
"cats": [ 1 ],
"headers": { "X-Powered-By": "OpenNemas" }
},
"OpenSSL": {
"cats": [ 33 ],
"headers": { "Server": "OpenSSL(/([\\d\\.]+[a-z]?))?\\;version:\\2" }
},
"OpenText Web Solutions": {
"cats": [ 1 ],
"html": "<!--[^>]+published by Open Text Web Solutions",
@ -1149,6 +1229,10 @@
"cats": [ 10 ],
"env": "^optimizely$"
},
"Oracle Application Server": {
"cats": [ 22 ],
"headers": { "Server": "Oracle(-| )Application(-| )Server((-| )(\\d+[a-z]?))?\\;version:\\5" }
},
"Oracle Recommendations On Demand": {
"cats": [ 10 ],
"script": "atgsvcs.+atgsvcs\\.js"
@ -1156,7 +1240,7 @@
"osCommerce": {
"cats": [ 6 ],
"html": "(<a[^>]*(\\?|&)osCsid|Powered by (<[^]+>)?osCommerce</a>|<[^]+class=\\\"[^>]*infoBoxHeading)",
"header": { "Set-Cookie": "osCsid=|utmcct=/applications/oscommerce" }
"headers": { "Set-Cookie": "osCsid=|utmcct=/applications/oscommerce" }
},
"osCSS": {
"cats": [ 6 ],
@ -1195,7 +1279,7 @@
},
"PHP": {
"cats": [ 27 ],
"headers": { "Server": "php", "X-Powered-By": "php", "Set-Cookie": "PHPSESSID" },
"headers": { "Server": "php/?([\\d\\.]+)?\\;version:\\1", "X-Powered-By": "php/?([\\d\\.]+)?\\;version:\\1", "Set-Cookie": "PHPSESSID" },
"url": "\\.php$"
},
"phpAlbum": {
@ -1302,9 +1386,9 @@
},
"Prototype": {
"cats": [ 12 ],
"script": "(prototype|protoaculous)\\.js",
"script": "(prototype|protoaculous)(-([\\d\\.]*[\\d]))?.*\\.js\\;version:\\3",
"env": "^Prototype$"
},
},
"Protovis": {
"cats": [ 25 ],
"script": "protovis.*\\.js",
@ -1316,7 +1400,8 @@
"implies": [ "PHP" ]
},
"Python": {
"cats": [ 27 ]
"cats": [ 27 ],
"headers": { "Server": "(^|\\s)Python(/([\\d\\.]+))?\\;version:\\3" }
},
"Quantcast": {
"cats": [ 10 ],
@ -1339,8 +1424,8 @@
},
"RBS Change": {
"cats": [ 1, 6 ],
"html": "<html[^>]*\\s+xmlns:change=",
"meta": { "generator": "^RBS Change" },
"html": "<html[^>]+xmlns:change=",
"meta": { "generator": "RBS Change" },
"implies": [ "PHP" ]
},
"RCMS": {
@ -1355,7 +1440,7 @@
},
"Red Hat": {
"cats": [ 28 ],
"headers": { "Server": "(Red Hat|rhel\\d+)", "X-Powered-By": "Red Hat" }
"headers": { "Server": "(.*rhel(\\d+)|Red Hat)\\;version:\\2", "X-Powered-By": "Red Hat" }
},
"Reddit": {
"cats": [ 2 ],
@ -1405,6 +1490,12 @@
"cats": [ 1 ],
"meta": { "generator": "Serendipity", "Powered-By": "Serendipity" }
},
"Sarka-SPIP": {
"cats": [ 1 ],
"meta": { "generator": "(^|\\s)Sarka-SPIP(\\s([\\d\\.]+(\\s\\[\\d+\\])?))?\\;version:\\3" },
"headers": { "X-Spip-Cache": ".*" },
"implies": [ "SPIP" ]
},
"script.aculo.us": {
"cats": [ 12 ],
"script": "(scriptaculous|protoaculous)\\.js",
@ -1427,12 +1518,6 @@
"script": "w\\.sharethis\\.com/",
"env": "^SHARETHIS$"
},
"ShinyStat": {
"cats": [ 10 ],
"env": "^SSsdk$",
"html": "<img[^>]*\\s+src=['\"]?https?://www\\.shinystat\\.com/cgi-bin/shinystat\\.cgi\\?[^'\"\\s>]*['\"\\s/>]",
"script": "^https?://codice(business|ssl|pro|isp)?\\.shinystat\\.com/cgi-bin/getcod\\.cgi"
},
"Shopalize": {
"cats": [ 5, 10 ],
"env": "^Shopalize$"
@ -1515,7 +1600,7 @@
},
"SPIP": {
"cats": [ 1 ],
"meta": { "generator": "SPIP" },
"meta": { "generator": "(^|\\s)SPIP(\\s([\\d\\.]+(\\s\\[\\d+\\])?))?\\;version:\\3" },
"headers": { "X-Spip-Cache": ".*" }
},
"SQL Buddy": {
@ -1529,7 +1614,8 @@
"Squiz Matrix": {
"cats": [ 1 ],
"meta": { "generator": "Squiz Matrix" },
"html": " Running (MySource|Squiz) Matrix", "X-Powered-By": "Squiz Matrix",
"html": " Running (MySource|Squiz) Matrix",
"headers": { "X-Powered-By": "Squiz Matrix" },
"implies": [ "PHP" ]
},
"StatCounter": {
@ -1545,6 +1631,18 @@
"script": "cdn\\.sublimevideo\\.net/js/[a-z\\d]+\\.js",
"env": "^sublimevideo$"
},
"Supersized": {
"cats": [ 7, 25 ],
"script": "supersized(\\.([\\d\\.]*[\\d]))?.*\\.js\\;version:\\2"
},
"SUSE": {
"cats": [ 28 ],
"headers": { "Server": "SUSE(/?\\s?-?([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "SUSE(/?\\s?-?([\\d\\.]+))?\\;version:\\2" }
},
"Scientific Linux": {
"cats": [ 28 ],
"headers": { "Server": "Scientific Linux", "X-Powered-By": "Scientific Linux" }
},
"SWFObject": {
"cats": [ 19 ],
"script": "swfobject.*\\.js",
@ -1798,7 +1896,7 @@
},
"WordPress": {
"cats": [ 1, 11 ],
"meta": { "generator": "WordPress" },
"meta": { "generator": "WordPress( [\\d\\.]+)?\\;version:\\1" },
"html": "<link rel=\\\"stylesheet\\\" [^>]+wp-content",
"env": "^wp_username$",
"implies": [ "PHP" ]

@ -28,7 +28,10 @@ var wappalyzer = (function() {
* Parse apps.json patterns
*/
var parse = function(patterns) {
var parsed = [];
var
attrs,
parsed = []
;
// Convert single patterns to an array
if ( typeof patterns === 'string' ) {
@ -36,9 +39,22 @@ var wappalyzer = (function() {
}
patterns.map(function(pattern) {
parsed.push({
regex: new RegExp(pattern.replace('/', '\\\/'), 'i') // Escape slashes in regular expression
});
attrs = {};
pattern.split('\\;').map(function(attr, i) {
if ( i ) {
// Key value pairs
attr = attr.split(':');
if ( attr.length === 2 ) {
attrs[attr[0]] = attr[1];
}
} else {
attrs.regex = new RegExp(attr.replace('/', '\\\/'), 'i'); // Escape slashes in regular expression
}
});
parsed.push(attrs);
});
return parsed;

@ -31,7 +31,8 @@
"29": "search-engines",
"30": "web-mail",
"31": "cdn",
"32": "marketing-automation"
"32": "marketing-automation",
"33": "web-server-extension"
},
"apps": {
"1C-Bitrix": {
@ -73,7 +74,7 @@
},
"Adobe GoLive": {
"cats": [ 20 ],
"meta": { "generator": "Adobe GoLive" }
"meta": { "generator": "Adobe GoLive(\\s([\\d\\.]+))?\\;version:\\2" }
},
"Advanced Web Stats": {
"cats": [ 10 ],
@ -84,6 +85,10 @@
"cats": [ 12 ],
"env": "^AUI$"
},
"Amaya": {
"cats": [ 20 ],
"meta": { "generator": "Amaya( V?([\\d\\.]+[a-z]))?\\;version:\\2" }
},
"Ametys": {
"cats": [ 1 ],
"meta": { "generator": "(Ametys|Anyware Technologies)" },
@ -112,7 +117,7 @@
},
"Apache": {
"cats": [ 22 ],
"headers": { "Server": "(Apache($|[^-])|HTTPD)" }
"headers": { "Server": "(Apache($|/([\\d\\.]+)|[^/-])|HTTPD)\\;version:\\3" }
},
"Apache JSPWiki": {
"cats": [ 8 ],
@ -144,13 +149,17 @@
},
"Atlassian Confluence": {
"cats": [ 8 ],
"html": "Powered by <a href=.+atlassian\\.com/software/confluence",
"html": "Powered by <a href=[^>]+atlassian\\.com/software/confluence([^>]+>Atlassian Confluence</a> ([\\d\\.]+))?\\;version:\\2",
"headers": { "X-Confluence-Request-Time": ".*" },
"meta": { "confluence-request-time": ".*" },
"implies": [ "Java" ]
},
"Atlassian Jira": {
"cats": [ 13 ],
"env": "^jira$",
"html": "Powered by <a href=.+atlassian\\.com/software/jira",
"script": "/jira/s/",
"url": "/secure/Dashboard.jspa",
"html": "Powered by\\s+<a href=[^>]+atlassian\\.com/(software/jira|jira-bug-tracking/)[^>]+>Atlassian\\s+JIRA([^v]*v(ersion: )?(\\d+\\.\\d+(\\.\\d+)?))?\\;version:\\4",
"implies": [ "Java" ]
},
"AWStats": {
@ -297,6 +306,11 @@
"meta": { "generator": "CMS Made Simple" },
"implies": [ "PHP" ]
},
"CMSimple": {
"cats": [ 1 ],
"meta": { "generator": "CMSimple( [\\d\\.]+)?\\;version:\\1" },
"implies": [ "PHP" ]
},
"CO2Stats": {
"cats": [ 10 ],
"html": "src=[^>]+co2stats\\.com/propres\\.php"
@ -484,11 +498,12 @@
"meta": { "generator": "Dokeos" },
"html": "Portal <a[^>]+>Dokeos|@import \\\"[^\\\"]+dokeos_blue",
"headers": { "X-Powered-By": "Dokeos" },
"implies": [ "PHP", "xajax", "jQuery", "CKEditor" ]
"implies": [ "PHP", "Xajax", "jQuery", "CKEditor" ]
},
"DokuWiki": {
"cats": [ 8 ],
"meta": { "generator": "DokuWiki" },
"meta": { "generator": "DokuWiki( Release [\\-\\d]+)?\\;version:\\1" },
"headers": { "Set-Cookie": "DokuWiki=" },
"implies": [ "PHP" ]
},
"DotNetNuke": {
@ -505,13 +520,13 @@
},
"DreamWeaver": {
"cats": [ 20 ],
"html": "(<!--[^>]*(InstanceBeginEditable|Dreamweaver[^>]+target|DWLayoutDefaultTable)|function MM_preloadImages\\(\\) {)"
"html": "(<!--[^>]*(InstanceBeginEditable|Dreamweaver([^>]+)target|DWLayoutDefaultTable)|function MM_preloadImages\\(\\) {)\\;version:\\3"
},
"Drupal": {
"cats": [ 1 ],
"script": "drupal\\.js",
"html": "Drupal(\\.extend)?.+settings|<(link|style)[^>]+sites/(default|all)/(themes|modules)/",
"headers": { "X-Drupal-Cache": ".*", "X-Generator": "Drupal", "Expires": "19 Nov 1978" },
"headers": { "X-Drupal-Cache": ".*", "X-Generator": "Drupal(\\s([\\d\\.]+))?\\;version:\\2", "Expires": "19 Nov 1978" },
"env": "^Drupal$",
"implies": [ "PHP" ]
},
@ -605,7 +620,7 @@
},
"FrontPage": {
"cats": [ 20 ],
"meta": { "generator": "Microsoft FrontPage" },
"meta": { "generator": "Microsoft FrontPage(\\s([\\d\\.]+))?\\;version:\\2" },
"html": "<html[^>]+urn:schemas-microsoft-com:office:office"
},
"FWP": {
@ -663,7 +678,7 @@
},
"Google Maps": {
"cats": [ 5 ],
"script": "(maps\\.google\\.com/maps\\?file=api|maps\\.google\\.com/maps/api/staticmap)"
"script": "(maps\\.google\\.com/maps\\?file=api(&v=([\\d\\.]+))?|maps\\.google\\.com/maps/api/staticmap)\\;version:API v\\3"
},
"Google Sites": {
"cats": [ 1 ],
@ -739,7 +754,7 @@
},
"IIS": {
"cats": [ 22 ],
"headers": { "Server": "IIS" },
"headers": { "Server": "IIS\\/?([\\d\\.]+)?\\;version:\\1" },
"implies": [ "Windows Server" ]
},
"ImpressCMS": {
@ -777,7 +792,12 @@
},
"iWeb": {
"cats": [ 20 ],
"meta": { "generator": "^iWeb" }
"meta": { "generator": "^iWeb( [\\d\\.]+)?\\;version:\\1" }
},
"JAlbum": {
"cats": [ 7 ],
"meta": { "generator": "JAlbum( [\\d\\.]+)?\\;version:\\1" },
"implies": [ "Java" ]
},
"Jalios": {
"cats": [ 1 ],
@ -792,6 +812,21 @@
"script": "jit.*\\.js",
"env": "^\\$jit$"
},
"JavaServer Faces": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "JSF(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"JavaServer Pages": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "JSP(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"Java Servlet": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "Servlet(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"Jirafe": {
"cats": [ 10, 32 ],
"script": "/jirafe\\.js",
@ -828,12 +863,13 @@
},
"jQuery": {
"cats": [ 12 ],
"script": "jquery.*\\.js",
"script": [ "jquery(\\-|\\.)([\\d\\.]*\\d)[^/]*\\.js\\;version:\\2", "([\\d\\.]+)/jquery(\\.min)?\\.js\\;version:\\1", "jquery.*\\.js" ],
"env": "^jQuery$"
},
"jQuery Mobile": {
"cats": [ 26 ],
"script": "jquery\\.mobile.*\\.js"
"script": "jquery\\.mobile.*\\.js",
"implies": [ "jQuery" ]
},
"jQuery Sparklines": {
"cats": [ 25 ],
@ -875,6 +911,10 @@
"cats": [ 1 ],
"meta": { "generator": "Kentico CMS" }
},
"KineticJS": {
"cats": [ 25 ],
"script": "kinetic(-v?([\\d\\.]+))?\\.js\\;version:\\2"
},
"KISSmetrics": {
"cats": [ 10 ],
"env": "^KM_COOKIE_DOMAIN$"
@ -978,13 +1018,13 @@
"Microsoft ASP.NET": {
"cats": [ 18 ],
"html": "<input[^>]+name=\\\"__VIEWSTATE",
"headers": { "X-Powered-By": "ASP\\.NET", "X-AspNet-Version": ".+" },
"headers": { "X-Powered-By": "ASP\\.NET", "X-AspNet-Version": "(.+)\\;version:\\1" },
"implies": [ "IIS", "Windows Server" ]
},
"Microsoft SharePoint": {
"cats": [ 1 ],
"meta": { "generator": "Microsoft SharePoint" },
"headers": { "MicrosoftSharePointTeamServices": ".*", "X-SharePointHealthScore": ".*", "SPRequestGuid": ".*", "SharePointHealthScore": ".*" }
"headers": { "MicrosoftSharePointTeamServices": "(.*)\\;version:\\1", "X-SharePointHealthScore": ".*", "SPRequestGuid": ".*", "SharePointHealthScore": ".*" }
},
"MiniBB": {
"cats": [ 2 ],
@ -1007,7 +1047,7 @@
},
"Modernizr": {
"cats": [ 12 ],
"script": "modernizr.*\\.js",
"script": "modernizr(-([\\d\\.]*[\\d]))?.*\\.js\\;version:\\2",
"env": "^Modernizr$"
},
"MODx": {
@ -1016,17 +1056,47 @@
"env": "^MODX_MEDIA_PATH$",
"headers": { "X-Powered-By": "^MODx", "Set-Cookie": "SN4[a-f\\d]{12}|utmcct=/applications/modx" },
"implies": [ "PHP" ]
},
},
"mod_fastcgi": {
"cats": [ 33 ],
"headers": { "Server": "mod_fastcgi(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Apache" ]
},
"mod_python": {
"cats": [ 33 ],
"headers": { "Server": "mod_python(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Python", "Apache" ]
},
"mod_rack": {
"cats": [ 33 ],
"headers": { "Server": "mod_rack(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_rack(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Ruby", "Apache" ]
},
"mod_rails": {
"cats": [ 33 ],
"headers": { "Server": "mod_rails(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_rails(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Ruby on Rails", "Ruby", "Apache" ]
},
"mod_ssl": {
"cats": [ 33 ],
"headers": { "Server": "mod_ssl(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Apache" ]
},
"mod_wsgi": {
"cats": [ 33 ],
"headers": { "Server": "mod_wsgi(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_wsgi(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Python", "Apache" ]
},
"MoinMoin": {
"cats": [ 8 ],
"script": "moin.+/common/js/common\\.js",
"script": "moin(_static(\\d)(\\d)(\\d)|.+)/common/js/common\\.js\\;version:\\2.\\3.\\4",
"env": "^show_switch2gui$",
"implies": [ "Python" ]
},
"Mojolicious": {
"cats": [ 18 ],
"headers": { "x-powered-by": "mojolicious" },
"implies": [ "PERL" ]
"implies": [ "Perl" ]
},
"Mollom": {
"cats": [ 16 ],
@ -1126,6 +1196,12 @@
"cats": [ 1 ],
"html": "<meta[^>]+openEngine"
},
"OpenGrok": {
"cats": [ 19 ],
"headers": { "Set-Cookie": "OpenGrok" },
"meta": { "generator": "OpenGrok( v?([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"OpenGSE": {
"cats": [ 22 ],
"headers": { "Server": "GSE" },
@ -1140,6 +1216,10 @@
"cats": [ 1 ],
"headers": { "X-Powered-By": "OpenNemas" }
},
"OpenSSL": {
"cats": [ 33 ],
"headers": { "Server": "OpenSSL(/([\\d\\.]+[a-z]?))?\\;version:\\2" }
},
"OpenText Web Solutions": {
"cats": [ 1 ],
"html": "<!--[^>]+published by Open Text Web Solutions",
@ -1149,6 +1229,10 @@
"cats": [ 10 ],
"env": "^optimizely$"
},
"Oracle Application Server": {
"cats": [ 22 ],
"headers": { "Server": "Oracle(-| )Application(-| )Server((-| )(\\d+[a-z]?))?\\;version:\\5" }
},
"Oracle Recommendations On Demand": {
"cats": [ 10 ],
"script": "atgsvcs.+atgsvcs\\.js"
@ -1156,7 +1240,7 @@
"osCommerce": {
"cats": [ 6 ],
"html": "(<a[^>]*(\\?|&)osCsid|Powered by (<[^]+>)?osCommerce</a>|<[^]+class=\\\"[^>]*infoBoxHeading)",
"header": { "Set-Cookie": "osCsid=|utmcct=/applications/oscommerce" }
"headers": { "Set-Cookie": "osCsid=|utmcct=/applications/oscommerce" }
},
"osCSS": {
"cats": [ 6 ],
@ -1195,7 +1279,7 @@
},
"PHP": {
"cats": [ 27 ],
"headers": { "Server": "php", "X-Powered-By": "php", "Set-Cookie": "PHPSESSID" },
"headers": { "Server": "php/?([\\d\\.]+)?\\;version:\\1", "X-Powered-By": "php/?([\\d\\.]+)?\\;version:\\1", "Set-Cookie": "PHPSESSID" },
"url": "\\.php$"
},
"phpAlbum": {
@ -1302,9 +1386,9 @@
},
"Prototype": {
"cats": [ 12 ],
"script": "(prototype|protoaculous)\\.js",
"script": "(prototype|protoaculous)(-([\\d\\.]*[\\d]))?.*\\.js\\;version:\\3",
"env": "^Prototype$"
},
},
"Protovis": {
"cats": [ 25 ],
"script": "protovis.*\\.js",
@ -1316,7 +1400,8 @@
"implies": [ "PHP" ]
},
"Python": {
"cats": [ 27 ]
"cats": [ 27 ],
"headers": { "Server": "(^|\\s)Python(/([\\d\\.]+))?\\;version:\\3" }
},
"Quantcast": {
"cats": [ 10 ],
@ -1339,8 +1424,8 @@
},
"RBS Change": {
"cats": [ 1, 6 ],
"html": "<html[^>]*\\s+xmlns:change=",
"meta": { "generator": "^RBS Change" },
"html": "<html[^>]+xmlns:change=",
"meta": { "generator": "RBS Change" },
"implies": [ "PHP" ]
},
"RCMS": {
@ -1355,7 +1440,7 @@
},
"Red Hat": {
"cats": [ 28 ],
"headers": { "Server": "(Red Hat|rhel\\d+)", "X-Powered-By": "Red Hat" }
"headers": { "Server": "(.*rhel(\\d+)|Red Hat)\\;version:\\2", "X-Powered-By": "Red Hat" }
},
"Reddit": {
"cats": [ 2 ],
@ -1405,6 +1490,12 @@
"cats": [ 1 ],
"meta": { "generator": "Serendipity", "Powered-By": "Serendipity" }
},
"Sarka-SPIP": {
"cats": [ 1 ],
"meta": { "generator": "(^|\\s)Sarka-SPIP(\\s([\\d\\.]+(\\s\\[\\d+\\])?))?\\;version:\\3" },
"headers": { "X-Spip-Cache": ".*" },
"implies": [ "SPIP" ]
},
"script.aculo.us": {
"cats": [ 12 ],
"script": "(scriptaculous|protoaculous)\\.js",
@ -1427,12 +1518,6 @@
"script": "w\\.sharethis\\.com/",
"env": "^SHARETHIS$"
},
"ShinyStat": {
"cats": [ 10 ],
"env": "^SSsdk$",
"html": "<img[^>]*\\s+src=['\"]?https?://www\\.shinystat\\.com/cgi-bin/shinystat\\.cgi\\?[^'\"\\s>]*['\"\\s/>]",
"script": "^https?://codice(business|ssl|pro|isp)?\\.shinystat\\.com/cgi-bin/getcod\\.cgi"
},
"Shopalize": {
"cats": [ 5, 10 ],
"env": "^Shopalize$"
@ -1515,7 +1600,7 @@
},
"SPIP": {
"cats": [ 1 ],
"meta": { "generator": "SPIP" },
"meta": { "generator": "(^|\\s)SPIP(\\s([\\d\\.]+(\\s\\[\\d+\\])?))?\\;version:\\3" },
"headers": { "X-Spip-Cache": ".*" }
},
"SQL Buddy": {
@ -1529,7 +1614,8 @@
"Squiz Matrix": {
"cats": [ 1 ],
"meta": { "generator": "Squiz Matrix" },
"html": " Running (MySource|Squiz) Matrix", "X-Powered-By": "Squiz Matrix",
"html": " Running (MySource|Squiz) Matrix",
"headers": { "X-Powered-By": "Squiz Matrix" },
"implies": [ "PHP" ]
},
"StatCounter": {
@ -1545,6 +1631,18 @@
"script": "cdn\\.sublimevideo\\.net/js/[a-z\\d]+\\.js",
"env": "^sublimevideo$"
},
"Supersized": {
"cats": [ 7, 25 ],
"script": "supersized(\\.([\\d\\.]*[\\d]))?.*\\.js\\;version:\\2"
},
"SUSE": {
"cats": [ 28 ],
"headers": { "Server": "SUSE(/?\\s?-?([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "SUSE(/?\\s?-?([\\d\\.]+))?\\;version:\\2" }
},
"Scientific Linux": {
"cats": [ 28 ],
"headers": { "Server": "Scientific Linux", "X-Powered-By": "Scientific Linux" }
},
"SWFObject": {
"cats": [ 19 ],
"script": "swfobject.*\\.js",
@ -1798,7 +1896,7 @@
},
"WordPress": {
"cats": [ 1, 11 ],
"meta": { "generator": "WordPress" },
"meta": { "generator": "WordPress( [\\d\\.]+)?\\;version:\\1" },
"html": "<link rel=\\\"stylesheet\\\" [^>]+wp-content",
"env": "^wp_username$",
"implies": [ "PHP" ]

@ -28,7 +28,10 @@ var wappalyzer = (function() {
* Parse apps.json patterns
*/
var parse = function(patterns) {
var parsed = [];
var
attrs,
parsed = []
;
// Convert single patterns to an array
if ( typeof patterns === 'string' ) {
@ -36,9 +39,22 @@ var wappalyzer = (function() {
}
patterns.map(function(pattern) {
parsed.push({
regex: new RegExp(pattern.replace('/', '\\\/'), 'i') // Escape slashes in regular expression
});
attrs = {};
pattern.split('\\;').map(function(attr, i) {
if ( i ) {
// Key value pairs
attr = attr.split(':');
if ( attr.length === 2 ) {
attrs[attr[0]] = attr[1];
}
} else {
attrs.regex = new RegExp(attr.replace('/', '\\\/'), 'i'); // Escape slashes in regular expression
}
});
parsed.push(attrs);
});
return parsed;

@ -31,7 +31,8 @@
"29": "search-engines",
"30": "web-mail",
"31": "cdn",
"32": "marketing-automation"
"32": "marketing-automation",
"33": "web-server-extension"
},
"apps": {
"1C-Bitrix": {
@ -73,7 +74,7 @@
},
"Adobe GoLive": {
"cats": [ 20 ],
"meta": { "generator": "Adobe GoLive" }
"meta": { "generator": "Adobe GoLive(\\s([\\d\\.]+))?\\;version:\\2" }
},
"Advanced Web Stats": {
"cats": [ 10 ],
@ -84,6 +85,10 @@
"cats": [ 12 ],
"env": "^AUI$"
},
"Amaya": {
"cats": [ 20 ],
"meta": { "generator": "Amaya( V?([\\d\\.]+[a-z]))?\\;version:\\2" }
},
"Ametys": {
"cats": [ 1 ],
"meta": { "generator": "(Ametys|Anyware Technologies)" },
@ -112,7 +117,7 @@
},
"Apache": {
"cats": [ 22 ],
"headers": { "Server": "(Apache($|[^-])|HTTPD)" }
"headers": { "Server": "(Apache($|/([\\d\\.]+)|[^/-])|HTTPD)\\;version:\\3" }
},
"Apache JSPWiki": {
"cats": [ 8 ],
@ -144,13 +149,17 @@
},
"Atlassian Confluence": {
"cats": [ 8 ],
"html": "Powered by <a href=.+atlassian\\.com/software/confluence",
"html": "Powered by <a href=[^>]+atlassian\\.com/software/confluence([^>]+>Atlassian Confluence</a> ([\\d\\.]+))?\\;version:\\2",
"headers": { "X-Confluence-Request-Time": ".*" },
"meta": { "confluence-request-time": ".*" },
"implies": [ "Java" ]
},
"Atlassian Jira": {
"cats": [ 13 ],
"env": "^jira$",
"html": "Powered by <a href=.+atlassian\\.com/software/jira",
"script": "/jira/s/",
"url": "/secure/Dashboard.jspa",
"html": "Powered by\\s+<a href=[^>]+atlassian\\.com/(software/jira|jira-bug-tracking/)[^>]+>Atlassian\\s+JIRA([^v]*v(ersion: )?(\\d+\\.\\d+(\\.\\d+)?))?\\;version:\\4",
"implies": [ "Java" ]
},
"AWStats": {
@ -297,6 +306,11 @@
"meta": { "generator": "CMS Made Simple" },
"implies": [ "PHP" ]
},
"CMSimple": {
"cats": [ 1 ],
"meta": { "generator": "CMSimple( [\\d\\.]+)?\\;version:\\1" },
"implies": [ "PHP" ]
},
"CO2Stats": {
"cats": [ 10 ],
"html": "src=[^>]+co2stats\\.com/propres\\.php"
@ -484,11 +498,12 @@
"meta": { "generator": "Dokeos" },
"html": "Portal <a[^>]+>Dokeos|@import \\\"[^\\\"]+dokeos_blue",
"headers": { "X-Powered-By": "Dokeos" },
"implies": [ "PHP", "xajax", "jQuery", "CKEditor" ]
"implies": [ "PHP", "Xajax", "jQuery", "CKEditor" ]
},
"DokuWiki": {
"cats": [ 8 ],
"meta": { "generator": "DokuWiki" },
"meta": { "generator": "DokuWiki( Release [\\-\\d]+)?\\;version:\\1" },
"headers": { "Set-Cookie": "DokuWiki=" },
"implies": [ "PHP" ]
},
"DotNetNuke": {
@ -505,13 +520,13 @@
},
"DreamWeaver": {
"cats": [ 20 ],
"html": "(<!--[^>]*(InstanceBeginEditable|Dreamweaver[^>]+target|DWLayoutDefaultTable)|function MM_preloadImages\\(\\) {)"
"html": "(<!--[^>]*(InstanceBeginEditable|Dreamweaver([^>]+)target|DWLayoutDefaultTable)|function MM_preloadImages\\(\\) {)\\;version:\\3"
},
"Drupal": {
"cats": [ 1 ],
"script": "drupal\\.js",
"html": "Drupal(\\.extend)?.+settings|<(link|style)[^>]+sites/(default|all)/(themes|modules)/",
"headers": { "X-Drupal-Cache": ".*", "X-Generator": "Drupal", "Expires": "19 Nov 1978" },
"headers": { "X-Drupal-Cache": ".*", "X-Generator": "Drupal(\\s([\\d\\.]+))?\\;version:\\2", "Expires": "19 Nov 1978" },
"env": "^Drupal$",
"implies": [ "PHP" ]
},
@ -605,7 +620,7 @@
},
"FrontPage": {
"cats": [ 20 ],
"meta": { "generator": "Microsoft FrontPage" },
"meta": { "generator": "Microsoft FrontPage(\\s([\\d\\.]+))?\\;version:\\2" },
"html": "<html[^>]+urn:schemas-microsoft-com:office:office"
},
"FWP": {
@ -663,7 +678,7 @@
},
"Google Maps": {
"cats": [ 5 ],
"script": "(maps\\.google\\.com/maps\\?file=api|maps\\.google\\.com/maps/api/staticmap)"
"script": "(maps\\.google\\.com/maps\\?file=api(&v=([\\d\\.]+))?|maps\\.google\\.com/maps/api/staticmap)\\;version:API v\\3"
},
"Google Sites": {
"cats": [ 1 ],
@ -739,7 +754,7 @@
},
"IIS": {
"cats": [ 22 ],
"headers": { "Server": "IIS" },
"headers": { "Server": "IIS\\/?([\\d\\.]+)?\\;version:\\1" },
"implies": [ "Windows Server" ]
},
"ImpressCMS": {
@ -777,7 +792,12 @@
},
"iWeb": {
"cats": [ 20 ],
"meta": { "generator": "^iWeb" }
"meta": { "generator": "^iWeb( [\\d\\.]+)?\\;version:\\1" }
},
"JAlbum": {
"cats": [ 7 ],
"meta": { "generator": "JAlbum( [\\d\\.]+)?\\;version:\\1" },
"implies": [ "Java" ]
},
"Jalios": {
"cats": [ 1 ],
@ -792,6 +812,21 @@
"script": "jit.*\\.js",
"env": "^\\$jit$"
},
"JavaServer Faces": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "JSF(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"JavaServer Pages": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "JSP(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"Java Servlet": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "Servlet(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"Jirafe": {
"cats": [ 10, 32 ],
"script": "/jirafe\\.js",
@ -828,12 +863,13 @@
},
"jQuery": {
"cats": [ 12 ],
"script": "jquery.*\\.js",
"script": [ "jquery(\\-|\\.)([\\d\\.]*\\d)[^/]*\\.js\\;version:\\2", "([\\d\\.]+)/jquery(\\.min)?\\.js\\;version:\\1", "jquery.*\\.js" ],
"env": "^jQuery$"
},
"jQuery Mobile": {
"cats": [ 26 ],
"script": "jquery\\.mobile.*\\.js"
"script": "jquery\\.mobile.*\\.js",
"implies": [ "jQuery" ]
},
"jQuery Sparklines": {
"cats": [ 25 ],
@ -875,6 +911,10 @@
"cats": [ 1 ],
"meta": { "generator": "Kentico CMS" }
},
"KineticJS": {
"cats": [ 25 ],
"script": "kinetic(-v?([\\d\\.]+))?\\.js\\;version:\\2"
},
"KISSmetrics": {
"cats": [ 10 ],
"env": "^KM_COOKIE_DOMAIN$"
@ -978,13 +1018,13 @@
"Microsoft ASP.NET": {
"cats": [ 18 ],
"html": "<input[^>]+name=\\\"__VIEWSTATE",
"headers": { "X-Powered-By": "ASP\\.NET", "X-AspNet-Version": ".+" },
"headers": { "X-Powered-By": "ASP\\.NET", "X-AspNet-Version": "(.+)\\;version:\\1" },
"implies": [ "IIS", "Windows Server" ]
},
"Microsoft SharePoint": {
"cats": [ 1 ],
"meta": { "generator": "Microsoft SharePoint" },
"headers": { "MicrosoftSharePointTeamServices": ".*", "X-SharePointHealthScore": ".*", "SPRequestGuid": ".*", "SharePointHealthScore": ".*" }
"headers": { "MicrosoftSharePointTeamServices": "(.*)\\;version:\\1", "X-SharePointHealthScore": ".*", "SPRequestGuid": ".*", "SharePointHealthScore": ".*" }
},
"MiniBB": {
"cats": [ 2 ],
@ -1007,7 +1047,7 @@
},
"Modernizr": {
"cats": [ 12 ],
"script": "modernizr.*\\.js",
"script": "modernizr(-([\\d\\.]*[\\d]))?.*\\.js\\;version:\\2",
"env": "^Modernizr$"
},
"MODx": {
@ -1016,17 +1056,47 @@
"env": "^MODX_MEDIA_PATH$",
"headers": { "X-Powered-By": "^MODx", "Set-Cookie": "SN4[a-f\\d]{12}|utmcct=/applications/modx" },
"implies": [ "PHP" ]
},
},
"mod_fastcgi": {
"cats": [ 33 ],
"headers": { "Server": "mod_fastcgi(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Apache" ]
},
"mod_python": {
"cats": [ 33 ],
"headers": { "Server": "mod_python(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Python", "Apache" ]
},
"mod_rack": {
"cats": [ 33 ],
"headers": { "Server": "mod_rack(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_rack(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Ruby", "Apache" ]
},
"mod_rails": {
"cats": [ 33 ],
"headers": { "Server": "mod_rails(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_rails(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Ruby on Rails", "Ruby", "Apache" ]
},
"mod_ssl": {
"cats": [ 33 ],
"headers": { "Server": "mod_ssl(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Apache" ]
},
"mod_wsgi": {
"cats": [ 33 ],
"headers": { "Server": "mod_wsgi(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_wsgi(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Python", "Apache" ]
},
"MoinMoin": {
"cats": [ 8 ],
"script": "moin.+/common/js/common\\.js",
"script": "moin(_static(\\d)(\\d)(\\d)|.+)/common/js/common\\.js\\;version:\\2.\\3.\\4",
"env": "^show_switch2gui$",
"implies": [ "Python" ]
},
"Mojolicious": {
"cats": [ 18 ],
"headers": { "x-powered-by": "mojolicious" },
"implies": [ "PERL" ]
"implies": [ "Perl" ]
},
"Mollom": {
"cats": [ 16 ],
@ -1126,6 +1196,12 @@
"cats": [ 1 ],
"html": "<meta[^>]+openEngine"
},
"OpenGrok": {
"cats": [ 19 ],
"headers": { "Set-Cookie": "OpenGrok" },
"meta": { "generator": "OpenGrok( v?([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"OpenGSE": {
"cats": [ 22 ],
"headers": { "Server": "GSE" },
@ -1140,6 +1216,10 @@
"cats": [ 1 ],
"headers": { "X-Powered-By": "OpenNemas" }
},
"OpenSSL": {
"cats": [ 33 ],
"headers": { "Server": "OpenSSL(/([\\d\\.]+[a-z]?))?\\;version:\\2" }
},
"OpenText Web Solutions": {
"cats": [ 1 ],
"html": "<!--[^>]+published by Open Text Web Solutions",
@ -1149,6 +1229,10 @@
"cats": [ 10 ],
"env": "^optimizely$"
},
"Oracle Application Server": {
"cats": [ 22 ],
"headers": { "Server": "Oracle(-| )Application(-| )Server((-| )(\\d+[a-z]?))?\\;version:\\5" }
},
"Oracle Recommendations On Demand": {
"cats": [ 10 ],
"script": "atgsvcs.+atgsvcs\\.js"
@ -1156,7 +1240,7 @@
"osCommerce": {
"cats": [ 6 ],
"html": "(<a[^>]*(\\?|&)osCsid|Powered by (<[^]+>)?osCommerce</a>|<[^]+class=\\\"[^>]*infoBoxHeading)",
"header": { "Set-Cookie": "osCsid=|utmcct=/applications/oscommerce" }
"headers": { "Set-Cookie": "osCsid=|utmcct=/applications/oscommerce" }
},
"osCSS": {
"cats": [ 6 ],
@ -1195,7 +1279,7 @@
},
"PHP": {
"cats": [ 27 ],
"headers": { "Server": "php", "X-Powered-By": "php", "Set-Cookie": "PHPSESSID" },
"headers": { "Server": "php/?([\\d\\.]+)?\\;version:\\1", "X-Powered-By": "php/?([\\d\\.]+)?\\;version:\\1", "Set-Cookie": "PHPSESSID" },
"url": "\\.php$"
},
"phpAlbum": {
@ -1302,9 +1386,9 @@
},
"Prototype": {
"cats": [ 12 ],
"script": "(prototype|protoaculous)\\.js",
"script": "(prototype|protoaculous)(-([\\d\\.]*[\\d]))?.*\\.js\\;version:\\3",
"env": "^Prototype$"
},
},
"Protovis": {
"cats": [ 25 ],
"script": "protovis.*\\.js",
@ -1316,7 +1400,8 @@
"implies": [ "PHP" ]
},
"Python": {
"cats": [ 27 ]
"cats": [ 27 ],
"headers": { "Server": "(^|\\s)Python(/([\\d\\.]+))?\\;version:\\3" }
},
"Quantcast": {
"cats": [ 10 ],
@ -1339,8 +1424,8 @@
},
"RBS Change": {
"cats": [ 1, 6 ],
"html": "<html[^>]*\\s+xmlns:change=",
"meta": { "generator": "^RBS Change" },
"html": "<html[^>]+xmlns:change=",
"meta": { "generator": "RBS Change" },
"implies": [ "PHP" ]
},
"RCMS": {
@ -1355,7 +1440,7 @@
},
"Red Hat": {
"cats": [ 28 ],
"headers": { "Server": "(Red Hat|rhel\\d+)", "X-Powered-By": "Red Hat" }
"headers": { "Server": "(.*rhel(\\d+)|Red Hat)\\;version:\\2", "X-Powered-By": "Red Hat" }
},
"Reddit": {
"cats": [ 2 ],
@ -1405,6 +1490,12 @@
"cats": [ 1 ],
"meta": { "generator": "Serendipity", "Powered-By": "Serendipity" }
},
"Sarka-SPIP": {
"cats": [ 1 ],
"meta": { "generator": "(^|\\s)Sarka-SPIP(\\s([\\d\\.]+(\\s\\[\\d+\\])?))?\\;version:\\3" },
"headers": { "X-Spip-Cache": ".*" },
"implies": [ "SPIP" ]
},
"script.aculo.us": {
"cats": [ 12 ],
"script": "(scriptaculous|protoaculous)\\.js",
@ -1427,12 +1518,6 @@
"script": "w\\.sharethis\\.com/",
"env": "^SHARETHIS$"
},
"ShinyStat": {
"cats": [ 10 ],
"env": "^SSsdk$",
"html": "<img[^>]*\\s+src=['\"]?https?://www\\.shinystat\\.com/cgi-bin/shinystat\\.cgi\\?[^'\"\\s>]*['\"\\s/>]",
"script": "^https?://codice(business|ssl|pro|isp)?\\.shinystat\\.com/cgi-bin/getcod\\.cgi"
},
"Shopalize": {
"cats": [ 5, 10 ],
"env": "^Shopalize$"
@ -1515,7 +1600,7 @@
},
"SPIP": {
"cats": [ 1 ],
"meta": { "generator": "SPIP" },
"meta": { "generator": "(^|\\s)SPIP(\\s([\\d\\.]+(\\s\\[\\d+\\])?))?\\;version:\\3" },
"headers": { "X-Spip-Cache": ".*" }
},
"SQL Buddy": {
@ -1529,7 +1614,8 @@
"Squiz Matrix": {
"cats": [ 1 ],
"meta": { "generator": "Squiz Matrix" },
"html": " Running (MySource|Squiz) Matrix", "X-Powered-By": "Squiz Matrix",
"html": " Running (MySource|Squiz) Matrix",
"headers": { "X-Powered-By": "Squiz Matrix" },
"implies": [ "PHP" ]
},
"StatCounter": {
@ -1545,6 +1631,18 @@
"script": "cdn\\.sublimevideo\\.net/js/[a-z\\d]+\\.js",
"env": "^sublimevideo$"
},
"Supersized": {
"cats": [ 7, 25 ],
"script": "supersized(\\.([\\d\\.]*[\\d]))?.*\\.js\\;version:\\2"
},
"SUSE": {
"cats": [ 28 ],
"headers": { "Server": "SUSE(/?\\s?-?([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "SUSE(/?\\s?-?([\\d\\.]+))?\\;version:\\2" }
},
"Scientific Linux": {
"cats": [ 28 ],
"headers": { "Server": "Scientific Linux", "X-Powered-By": "Scientific Linux" }
},
"SWFObject": {
"cats": [ 19 ],
"script": "swfobject.*\\.js",
@ -1798,7 +1896,7 @@
},
"WordPress": {
"cats": [ 1, 11 ],
"meta": { "generator": "WordPress" },
"meta": { "generator": "WordPress( [\\d\\.]+)?\\;version:\\1" },
"html": "<link rel=\\\"stylesheet\\\" [^>]+wp-content",
"env": "^wp_username$",
"implies": [ "PHP" ]

@ -28,7 +28,10 @@ var wappalyzer = (function() {
* Parse apps.json patterns
*/
var parse = function(patterns) {
var parsed = [];
var
attrs,
parsed = []
;
// Convert single patterns to an array
if ( typeof patterns === 'string' ) {
@ -36,9 +39,22 @@ var wappalyzer = (function() {
}
patterns.map(function(pattern) {
parsed.push({
regex: new RegExp(pattern.replace('/', '\\\/'), 'i') // Escape slashes in regular expression
});
attrs = {};
pattern.split('\\;').map(function(attr, i) {
if ( i ) {
// Key value pairs
attr = attr.split(':');
if ( attr.length === 2 ) {
attrs[attr[0]] = attr[1];
}
} else {
attrs.regex = new RegExp(attr.replace('/', '\\\/'), 'i'); // Escape slashes in regular expression
}
});
parsed.push(attrs);
});
return parsed;

@ -31,7 +31,8 @@
"29": "search-engines",
"30": "web-mail",
"31": "cdn",
"32": "marketing-automation"
"32": "marketing-automation",
"33": "web-server-extension"
},
"apps": {
"1C-Bitrix": {
@ -73,7 +74,7 @@
},
"Adobe GoLive": {
"cats": [ 20 ],
"meta": { "generator": "Adobe GoLive" }
"meta": { "generator": "Adobe GoLive(\\s([\\d\\.]+))?\\;version:\\2" }
},
"Advanced Web Stats": {
"cats": [ 10 ],
@ -84,6 +85,10 @@
"cats": [ 12 ],
"env": "^AUI$"
},
"Amaya": {
"cats": [ 20 ],
"meta": { "generator": "Amaya( V?([\\d\\.]+[a-z]))?\\;version:\\2" }
},
"Ametys": {
"cats": [ 1 ],
"meta": { "generator": "(Ametys|Anyware Technologies)" },
@ -112,7 +117,7 @@
},
"Apache": {
"cats": [ 22 ],
"headers": { "Server": "(Apache($|[^-])|HTTPD)" }
"headers": { "Server": "(Apache($|/([\\d\\.]+)|[^/-])|HTTPD)\\;version:\\3" }
},
"Apache JSPWiki": {
"cats": [ 8 ],
@ -144,13 +149,17 @@
},
"Atlassian Confluence": {
"cats": [ 8 ],
"html": "Powered by <a href=.+atlassian\\.com/software/confluence",
"html": "Powered by <a href=[^>]+atlassian\\.com/software/confluence([^>]+>Atlassian Confluence</a> ([\\d\\.]+))?\\;version:\\2",
"headers": { "X-Confluence-Request-Time": ".*" },
"meta": { "confluence-request-time": ".*" },
"implies": [ "Java" ]
},
"Atlassian Jira": {
"cats": [ 13 ],
"env": "^jira$",
"html": "Powered by <a href=.+atlassian\\.com/software/jira",
"script": "/jira/s/",
"url": "/secure/Dashboard.jspa",
"html": "Powered by\\s+<a href=[^>]+atlassian\\.com/(software/jira|jira-bug-tracking/)[^>]+>Atlassian\\s+JIRA([^v]*v(ersion: )?(\\d+\\.\\d+(\\.\\d+)?))?\\;version:\\4",
"implies": [ "Java" ]
},
"AWStats": {
@ -297,6 +306,11 @@
"meta": { "generator": "CMS Made Simple" },
"implies": [ "PHP" ]
},
"CMSimple": {
"cats": [ 1 ],
"meta": { "generator": "CMSimple( [\\d\\.]+)?\\;version:\\1" },
"implies": [ "PHP" ]
},
"CO2Stats": {
"cats": [ 10 ],
"html": "src=[^>]+co2stats\\.com/propres\\.php"
@ -484,11 +498,12 @@
"meta": { "generator": "Dokeos" },
"html": "Portal <a[^>]+>Dokeos|@import \\\"[^\\\"]+dokeos_blue",
"headers": { "X-Powered-By": "Dokeos" },
"implies": [ "PHP", "xajax", "jQuery", "CKEditor" ]
"implies": [ "PHP", "Xajax", "jQuery", "CKEditor" ]
},
"DokuWiki": {
"cats": [ 8 ],
"meta": { "generator": "DokuWiki" },
"meta": { "generator": "DokuWiki( Release [\\-\\d]+)?\\;version:\\1" },
"headers": { "Set-Cookie": "DokuWiki=" },
"implies": [ "PHP" ]
},
"DotNetNuke": {
@ -505,13 +520,13 @@
},
"DreamWeaver": {
"cats": [ 20 ],
"html": "(<!--[^>]*(InstanceBeginEditable|Dreamweaver[^>]+target|DWLayoutDefaultTable)|function MM_preloadImages\\(\\) {)"
"html": "(<!--[^>]*(InstanceBeginEditable|Dreamweaver([^>]+)target|DWLayoutDefaultTable)|function MM_preloadImages\\(\\) {)\\;version:\\3"
},
"Drupal": {
"cats": [ 1 ],
"script": "drupal\\.js",
"html": "Drupal(\\.extend)?.+settings|<(link|style)[^>]+sites/(default|all)/(themes|modules)/",
"headers": { "X-Drupal-Cache": ".*", "X-Generator": "Drupal", "Expires": "19 Nov 1978" },
"headers": { "X-Drupal-Cache": ".*", "X-Generator": "Drupal(\\s([\\d\\.]+))?\\;version:\\2", "Expires": "19 Nov 1978" },
"env": "^Drupal$",
"implies": [ "PHP" ]
},
@ -605,7 +620,7 @@
},
"FrontPage": {
"cats": [ 20 ],
"meta": { "generator": "Microsoft FrontPage" },
"meta": { "generator": "Microsoft FrontPage(\\s([\\d\\.]+))?\\;version:\\2" },
"html": "<html[^>]+urn:schemas-microsoft-com:office:office"
},
"FWP": {
@ -663,7 +678,7 @@
},
"Google Maps": {
"cats": [ 5 ],
"script": "(maps\\.google\\.com/maps\\?file=api|maps\\.google\\.com/maps/api/staticmap)"
"script": "(maps\\.google\\.com/maps\\?file=api(&v=([\\d\\.]+))?|maps\\.google\\.com/maps/api/staticmap)\\;version:API v\\3"
},
"Google Sites": {
"cats": [ 1 ],
@ -739,7 +754,7 @@
},
"IIS": {
"cats": [ 22 ],
"headers": { "Server": "IIS" },
"headers": { "Server": "IIS\\/?([\\d\\.]+)?\\;version:\\1" },
"implies": [ "Windows Server" ]
},
"ImpressCMS": {
@ -777,7 +792,12 @@
},
"iWeb": {
"cats": [ 20 ],
"meta": { "generator": "^iWeb" }
"meta": { "generator": "^iWeb( [\\d\\.]+)?\\;version:\\1" }
},
"JAlbum": {
"cats": [ 7 ],
"meta": { "generator": "JAlbum( [\\d\\.]+)?\\;version:\\1" },
"implies": [ "Java" ]
},
"Jalios": {
"cats": [ 1 ],
@ -792,6 +812,21 @@
"script": "jit.*\\.js",
"env": "^\\$jit$"
},
"JavaServer Faces": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "JSF(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"JavaServer Pages": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "JSP(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"Java Servlet": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "Servlet(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"Jirafe": {
"cats": [ 10, 32 ],
"script": "/jirafe\\.js",
@ -828,12 +863,13 @@
},
"jQuery": {
"cats": [ 12 ],
"script": "jquery.*\\.js",
"script": [ "jquery(\\-|\\.)([\\d\\.]*\\d)[^/]*\\.js\\;version:\\2", "([\\d\\.]+)/jquery(\\.min)?\\.js\\;version:\\1", "jquery.*\\.js" ],
"env": "^jQuery$"
},
"jQuery Mobile": {
"cats": [ 26 ],
"script": "jquery\\.mobile.*\\.js"
"script": "jquery\\.mobile.*\\.js",
"implies": [ "jQuery" ]
},
"jQuery Sparklines": {
"cats": [ 25 ],
@ -875,6 +911,10 @@
"cats": [ 1 ],
"meta": { "generator": "Kentico CMS" }
},
"KineticJS": {
"cats": [ 25 ],
"script": "kinetic(-v?([\\d\\.]+))?\\.js\\;version:\\2"
},
"KISSmetrics": {
"cats": [ 10 ],
"env": "^KM_COOKIE_DOMAIN$"
@ -978,13 +1018,13 @@
"Microsoft ASP.NET": {
"cats": [ 18 ],
"html": "<input[^>]+name=\\\"__VIEWSTATE",
"headers": { "X-Powered-By": "ASP\\.NET", "X-AspNet-Version": ".+" },
"headers": { "X-Powered-By": "ASP\\.NET", "X-AspNet-Version": "(.+)\\;version:\\1" },
"implies": [ "IIS", "Windows Server" ]
},
"Microsoft SharePoint": {
"cats": [ 1 ],
"meta": { "generator": "Microsoft SharePoint" },
"headers": { "MicrosoftSharePointTeamServices": ".*", "X-SharePointHealthScore": ".*", "SPRequestGuid": ".*", "SharePointHealthScore": ".*" }
"headers": { "MicrosoftSharePointTeamServices": "(.*)\\;version:\\1", "X-SharePointHealthScore": ".*", "SPRequestGuid": ".*", "SharePointHealthScore": ".*" }
},
"MiniBB": {
"cats": [ 2 ],
@ -1007,7 +1047,7 @@
},
"Modernizr": {
"cats": [ 12 ],
"script": "modernizr.*\\.js",
"script": "modernizr(-([\\d\\.]*[\\d]))?.*\\.js\\;version:\\2",
"env": "^Modernizr$"
},
"MODx": {
@ -1016,17 +1056,47 @@
"env": "^MODX_MEDIA_PATH$",
"headers": { "X-Powered-By": "^MODx", "Set-Cookie": "SN4[a-f\\d]{12}|utmcct=/applications/modx" },
"implies": [ "PHP" ]
},
},
"mod_fastcgi": {
"cats": [ 33 ],
"headers": { "Server": "mod_fastcgi(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Apache" ]
},
"mod_python": {
"cats": [ 33 ],
"headers": { "Server": "mod_python(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Python", "Apache" ]
},
"mod_rack": {
"cats": [ 33 ],
"headers": { "Server": "mod_rack(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_rack(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Ruby", "Apache" ]
},
"mod_rails": {
"cats": [ 33 ],
"headers": { "Server": "mod_rails(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_rails(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Ruby on Rails", "Ruby", "Apache" ]
},
"mod_ssl": {
"cats": [ 33 ],
"headers": { "Server": "mod_ssl(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Apache" ]
},
"mod_wsgi": {
"cats": [ 33 ],
"headers": { "Server": "mod_wsgi(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_wsgi(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Python", "Apache" ]
},
"MoinMoin": {
"cats": [ 8 ],
"script": "moin.+/common/js/common\\.js",
"script": "moin(_static(\\d)(\\d)(\\d)|.+)/common/js/common\\.js\\;version:\\2.\\3.\\4",
"env": "^show_switch2gui$",
"implies": [ "Python" ]
},
"Mojolicious": {
"cats": [ 18 ],
"headers": { "x-powered-by": "mojolicious" },
"implies": [ "PERL" ]
"implies": [ "Perl" ]
},
"Mollom": {
"cats": [ 16 ],
@ -1126,6 +1196,12 @@
"cats": [ 1 ],
"html": "<meta[^>]+openEngine"
},
"OpenGrok": {
"cats": [ 19 ],
"headers": { "Set-Cookie": "OpenGrok" },
"meta": { "generator": "OpenGrok( v?([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"OpenGSE": {
"cats": [ 22 ],
"headers": { "Server": "GSE" },
@ -1140,6 +1216,10 @@
"cats": [ 1 ],
"headers": { "X-Powered-By": "OpenNemas" }
},
"OpenSSL": {
"cats": [ 33 ],
"headers": { "Server": "OpenSSL(/([\\d\\.]+[a-z]?))?\\;version:\\2" }
},
"OpenText Web Solutions": {
"cats": [ 1 ],
"html": "<!--[^>]+published by Open Text Web Solutions",
@ -1149,6 +1229,10 @@
"cats": [ 10 ],
"env": "^optimizely$"
},
"Oracle Application Server": {
"cats": [ 22 ],
"headers": { "Server": "Oracle(-| )Application(-| )Server((-| )(\\d+[a-z]?))?\\;version:\\5" }
},
"Oracle Recommendations On Demand": {
"cats": [ 10 ],
"script": "atgsvcs.+atgsvcs\\.js"
@ -1156,7 +1240,7 @@
"osCommerce": {
"cats": [ 6 ],
"html": "(<a[^>]*(\\?|&)osCsid|Powered by (<[^]+>)?osCommerce</a>|<[^]+class=\\\"[^>]*infoBoxHeading)",
"header": { "Set-Cookie": "osCsid=|utmcct=/applications/oscommerce" }
"headers": { "Set-Cookie": "osCsid=|utmcct=/applications/oscommerce" }
},
"osCSS": {
"cats": [ 6 ],
@ -1195,7 +1279,7 @@
},
"PHP": {
"cats": [ 27 ],
"headers": { "Server": "php", "X-Powered-By": "php", "Set-Cookie": "PHPSESSID" },
"headers": { "Server": "php/?([\\d\\.]+)?\\;version:\\1", "X-Powered-By": "php/?([\\d\\.]+)?\\;version:\\1", "Set-Cookie": "PHPSESSID" },
"url": "\\.php$"
},
"phpAlbum": {
@ -1302,9 +1386,9 @@
},
"Prototype": {
"cats": [ 12 ],
"script": "(prototype|protoaculous)\\.js",
"script": "(prototype|protoaculous)(-([\\d\\.]*[\\d]))?.*\\.js\\;version:\\3",
"env": "^Prototype$"
},
},
"Protovis": {
"cats": [ 25 ],
"script": "protovis.*\\.js",
@ -1316,7 +1400,8 @@
"implies": [ "PHP" ]
},
"Python": {
"cats": [ 27 ]
"cats": [ 27 ],
"headers": { "Server": "(^|\\s)Python(/([\\d\\.]+))?\\;version:\\3" }
},
"Quantcast": {
"cats": [ 10 ],
@ -1339,8 +1424,8 @@
},
"RBS Change": {
"cats": [ 1, 6 ],
"html": "<html[^>]*\\s+xmlns:change=",
"meta": { "generator": "^RBS Change" },
"html": "<html[^>]+xmlns:change=",
"meta": { "generator": "RBS Change" },
"implies": [ "PHP" ]
},
"RCMS": {
@ -1355,7 +1440,7 @@
},
"Red Hat": {
"cats": [ 28 ],
"headers": { "Server": "(Red Hat|rhel\\d+)", "X-Powered-By": "Red Hat" }
"headers": { "Server": "(.*rhel(\\d+)|Red Hat)\\;version:\\2", "X-Powered-By": "Red Hat" }
},
"Reddit": {
"cats": [ 2 ],
@ -1405,6 +1490,12 @@
"cats": [ 1 ],
"meta": { "generator": "Serendipity", "Powered-By": "Serendipity" }
},
"Sarka-SPIP": {
"cats": [ 1 ],
"meta": { "generator": "(^|\\s)Sarka-SPIP(\\s([\\d\\.]+(\\s\\[\\d+\\])?))?\\;version:\\3" },
"headers": { "X-Spip-Cache": ".*" },
"implies": [ "SPIP" ]
},
"script.aculo.us": {
"cats": [ 12 ],
"script": "(scriptaculous|protoaculous)\\.js",
@ -1427,12 +1518,6 @@
"script": "w\\.sharethis\\.com/",
"env": "^SHARETHIS$"
},
"ShinyStat": {
"cats": [ 10 ],
"env": "^SSsdk$",
"html": "<img[^>]*\\s+src=['\"]?https?://www\\.shinystat\\.com/cgi-bin/shinystat\\.cgi\\?[^'\"\\s>]*['\"\\s/>]",
"script": "^https?://codice(business|ssl|pro|isp)?\\.shinystat\\.com/cgi-bin/getcod\\.cgi"
},
"Shopalize": {
"cats": [ 5, 10 ],
"env": "^Shopalize$"
@ -1515,7 +1600,7 @@
},
"SPIP": {
"cats": [ 1 ],
"meta": { "generator": "SPIP" },
"meta": { "generator": "(^|\\s)SPIP(\\s([\\d\\.]+(\\s\\[\\d+\\])?))?\\;version:\\3" },
"headers": { "X-Spip-Cache": ".*" }
},
"SQL Buddy": {
@ -1529,7 +1614,8 @@
"Squiz Matrix": {
"cats": [ 1 ],
"meta": { "generator": "Squiz Matrix" },
"html": " Running (MySource|Squiz) Matrix", "X-Powered-By": "Squiz Matrix",
"html": " Running (MySource|Squiz) Matrix",
"headers": { "X-Powered-By": "Squiz Matrix" },
"implies": [ "PHP" ]
},
"StatCounter": {
@ -1545,6 +1631,18 @@
"script": "cdn\\.sublimevideo\\.net/js/[a-z\\d]+\\.js",
"env": "^sublimevideo$"
},
"Supersized": {
"cats": [ 7, 25 ],
"script": "supersized(\\.([\\d\\.]*[\\d]))?.*\\.js\\;version:\\2"
},
"SUSE": {
"cats": [ 28 ],
"headers": { "Server": "SUSE(/?\\s?-?([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "SUSE(/?\\s?-?([\\d\\.]+))?\\;version:\\2" }
},
"Scientific Linux": {
"cats": [ 28 ],
"headers": { "Server": "Scientific Linux", "X-Powered-By": "Scientific Linux" }
},
"SWFObject": {
"cats": [ 19 ],
"script": "swfobject.*\\.js",
@ -1798,7 +1896,7 @@
},
"WordPress": {
"cats": [ 1, 11 ],
"meta": { "generator": "WordPress" },
"meta": { "generator": "WordPress( [\\d\\.]+)?\\;version:\\1" },
"html": "<link rel=\\\"stylesheet\\\" [^>]+wp-content",
"env": "^wp_username$",
"implies": [ "PHP" ]

@ -28,7 +28,10 @@ var wappalyzer = (function() {
* Parse apps.json patterns
*/
var parse = function(patterns) {
var parsed = [];
var
attrs,
parsed = []
;
// Convert single patterns to an array
if ( typeof patterns === 'string' ) {
@ -36,9 +39,22 @@ var wappalyzer = (function() {
}
patterns.map(function(pattern) {
parsed.push({
regex: new RegExp(pattern.replace('/', '\\\/'), 'i') // Escape slashes in regular expression
});
attrs = {};
pattern.split('\\;').map(function(attr, i) {
if ( i ) {
// Key value pairs
attr = attr.split(':');
if ( attr.length === 2 ) {
attrs[attr[0]] = attr[1];
}
} else {
attrs.regex = new RegExp(attr.replace('/', '\\\/'), 'i'); // Escape slashes in regular expression
}
});
parsed.push(attrs);
});
return parsed;

@ -31,7 +31,8 @@
"29": "search-engines",
"30": "web-mail",
"31": "cdn",
"32": "marketing-automation"
"32": "marketing-automation",
"33": "web-server-extension"
},
"apps": {
"1C-Bitrix": {
@ -73,7 +74,7 @@
},
"Adobe GoLive": {
"cats": [ 20 ],
"meta": { "generator": "Adobe GoLive" }
"meta": { "generator": "Adobe GoLive(\\s([\\d\\.]+))?\\;version:\\2" }
},
"Advanced Web Stats": {
"cats": [ 10 ],
@ -84,6 +85,10 @@
"cats": [ 12 ],
"env": "^AUI$"
},
"Amaya": {
"cats": [ 20 ],
"meta": { "generator": "Amaya( V?([\\d\\.]+[a-z]))?\\;version:\\2" }
},
"Ametys": {
"cats": [ 1 ],
"meta": { "generator": "(Ametys|Anyware Technologies)" },
@ -112,7 +117,7 @@
},
"Apache": {
"cats": [ 22 ],
"headers": { "Server": "(Apache($|[^-])|HTTPD)" }
"headers": { "Server": "(Apache($|/([\\d\\.]+)|[^/-])|HTTPD)\\;version:\\3" }
},
"Apache JSPWiki": {
"cats": [ 8 ],
@ -144,13 +149,17 @@
},
"Atlassian Confluence": {
"cats": [ 8 ],
"html": "Powered by <a href=.+atlassian\\.com/software/confluence",
"html": "Powered by <a href=[^>]+atlassian\\.com/software/confluence([^>]+>Atlassian Confluence</a> ([\\d\\.]+))?\\;version:\\2",
"headers": { "X-Confluence-Request-Time": ".*" },
"meta": { "confluence-request-time": ".*" },
"implies": [ "Java" ]
},
"Atlassian Jira": {
"cats": [ 13 ],
"env": "^jira$",
"html": "Powered by <a href=.+atlassian\\.com/software/jira",
"script": "/jira/s/",
"url": "/secure/Dashboard.jspa",
"html": "Powered by\\s+<a href=[^>]+atlassian\\.com/(software/jira|jira-bug-tracking/)[^>]+>Atlassian\\s+JIRA([^v]*v(ersion: )?(\\d+\\.\\d+(\\.\\d+)?))?\\;version:\\4",
"implies": [ "Java" ]
},
"AWStats": {
@ -297,6 +306,11 @@
"meta": { "generator": "CMS Made Simple" },
"implies": [ "PHP" ]
},
"CMSimple": {
"cats": [ 1 ],
"meta": { "generator": "CMSimple( [\\d\\.]+)?\\;version:\\1" },
"implies": [ "PHP" ]
},
"CO2Stats": {
"cats": [ 10 ],
"html": "src=[^>]+co2stats\\.com/propres\\.php"
@ -331,7 +345,6 @@
"Contao": {
"cats": [ 1 ],
"html": "(<!--.+powered by (TYPOlight|Contao)-->|<link[^>]+(typolight|contao)\\.css)",
"meta": { "generator": "Contao" },
"implies": [ "PHP" ]
},
"Contenido": {
@ -489,7 +502,8 @@
},
"DokuWiki": {
"cats": [ 8 ],
"meta": { "generator": "DokuWiki" },
"meta": { "generator": "DokuWiki( Release [\\-\\d]+)?\\;version:\\1" },
"headers": { "Set-Cookie": "DokuWiki=" },
"implies": [ "PHP" ]
},
"DotNetNuke": {
@ -506,13 +520,13 @@
},
"DreamWeaver": {
"cats": [ 20 ],
"html": "(<!--[^>]*(InstanceBeginEditable|Dreamweaver[^>]+target|DWLayoutDefaultTable)|function MM_preloadImages\\(\\) {)"
"html": "(<!--[^>]*(InstanceBeginEditable|Dreamweaver([^>]+)target|DWLayoutDefaultTable)|function MM_preloadImages\\(\\) {)\\;version:\\3"
},
"Drupal": {
"cats": [ 1 ],
"script": "drupal\\.js",
"html": "Drupal(\\.extend)?.+settings|<(link|style)[^>]+sites/(default|all)/(themes|modules)/",
"headers": { "X-Drupal-Cache": ".*", "X-Generator": "Drupal", "Expires": "19 Nov 1978" },
"headers": { "X-Drupal-Cache": ".*", "X-Generator": "Drupal(\\s([\\d\\.]+))?\\;version:\\2", "Expires": "19 Nov 1978" },
"env": "^Drupal$",
"implies": [ "PHP" ]
},
@ -606,7 +620,7 @@
},
"FrontPage": {
"cats": [ 20 ],
"meta": { "generator": "Microsoft FrontPage" },
"meta": { "generator": "Microsoft FrontPage(\\s([\\d\\.]+))?\\;version:\\2" },
"html": "<html[^>]+urn:schemas-microsoft-com:office:office"
},
"FWP": {
@ -664,7 +678,7 @@
},
"Google Maps": {
"cats": [ 5 ],
"script": "(maps\\.google\\.com/maps\\?file=api|maps\\.google\\.com/maps/api/staticmap)"
"script": "(maps\\.google\\.com/maps\\?file=api(&v=([\\d\\.]+))?|maps\\.google\\.com/maps/api/staticmap)\\;version:API v\\3"
},
"Google Sites": {
"cats": [ 1 ],
@ -740,7 +754,7 @@
},
"IIS": {
"cats": [ 22 ],
"headers": { "Server": "IIS" },
"headers": { "Server": "IIS\\/?([\\d\\.]+)?\\;version:\\1" },
"implies": [ "Windows Server" ]
},
"ImpressCMS": {
@ -778,7 +792,12 @@
},
"iWeb": {
"cats": [ 20 ],
"meta": { "generator": "^iWeb" }
"meta": { "generator": "^iWeb( [\\d\\.]+)?\\;version:\\1" }
},
"JAlbum": {
"cats": [ 7 ],
"meta": { "generator": "JAlbum( [\\d\\.]+)?\\;version:\\1" },
"implies": [ "Java" ]
},
"Jalios": {
"cats": [ 1 ],
@ -793,6 +812,21 @@
"script": "jit.*\\.js",
"env": "^\\$jit$"
},
"JavaServer Faces": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "JSF(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"JavaServer Pages": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "JSP(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"Java Servlet": {
"cats": [ 18 ],
"headers": { "X-Powered-By": "Servlet(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"Jirafe": {
"cats": [ 10, 32 ],
"script": "/jirafe\\.js",
@ -829,12 +863,13 @@
},
"jQuery": {
"cats": [ 12 ],
"script": "jquery.*\\.js",
"script": [ "jquery(\\-|\\.)([\\d\\.]*\\d)[^/]*\\.js\\;version:\\2", "([\\d\\.]+)/jquery(\\.min)?\\.js\\;version:\\1", "jquery.*\\.js" ],
"env": "^jQuery$"
},
"jQuery Mobile": {
"cats": [ 26 ],
"script": "jquery\\.mobile.*\\.js"
"script": "jquery\\.mobile.*\\.js",
"implies": [ "jQuery" ]
},
"jQuery Sparklines": {
"cats": [ 25 ],
@ -876,6 +911,10 @@
"cats": [ 1 ],
"meta": { "generator": "Kentico CMS" }
},
"KineticJS": {
"cats": [ 25 ],
"script": "kinetic(-v?([\\d\\.]+))?\\.js\\;version:\\2"
},
"KISSmetrics": {
"cats": [ 10 ],
"env": "^KM_COOKIE_DOMAIN$"
@ -979,13 +1018,13 @@
"Microsoft ASP.NET": {
"cats": [ 18 ],
"html": "<input[^>]+name=\\\"__VIEWSTATE",
"headers": { "X-Powered-By": "ASP\\.NET", "X-AspNet-Version": ".+" },
"headers": { "X-Powered-By": "ASP\\.NET", "X-AspNet-Version": "(.+)\\;version:\\1" },
"implies": [ "IIS", "Windows Server" ]
},
"Microsoft SharePoint": {
"cats": [ 1 ],
"meta": { "generator": "Microsoft SharePoint" },
"headers": { "MicrosoftSharePointTeamServices": ".*", "X-SharePointHealthScore": ".*", "SPRequestGuid": ".*", "SharePointHealthScore": ".*" }
"headers": { "MicrosoftSharePointTeamServices": "(.*)\\;version:\\1", "X-SharePointHealthScore": ".*", "SPRequestGuid": ".*", "SharePointHealthScore": ".*" }
},
"MiniBB": {
"cats": [ 2 ],
@ -1008,7 +1047,7 @@
},
"Modernizr": {
"cats": [ 12 ],
"script": "modernizr.*\\.js",
"script": "modernizr(-([\\d\\.]*[\\d]))?.*\\.js\\;version:\\2",
"env": "^Modernizr$"
},
"MODx": {
@ -1017,10 +1056,40 @@
"env": "^MODX_MEDIA_PATH$",
"headers": { "X-Powered-By": "^MODx", "Set-Cookie": "SN4[a-f\\d]{12}|utmcct=/applications/modx" },
"implies": [ "PHP" ]
},
},
"mod_fastcgi": {
"cats": [ 33 ],
"headers": { "Server": "mod_fastcgi(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Apache" ]
},
"mod_python": {
"cats": [ 33 ],
"headers": { "Server": "mod_python(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Python", "Apache" ]
},
"mod_rack": {
"cats": [ 33 ],
"headers": { "Server": "mod_rack(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_rack(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Ruby", "Apache" ]
},
"mod_rails": {
"cats": [ 33 ],
"headers": { "Server": "mod_rails(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_rails(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Ruby on Rails", "Ruby", "Apache" ]
},
"mod_ssl": {
"cats": [ 33 ],
"headers": { "Server": "mod_ssl(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Apache" ]
},
"mod_wsgi": {
"cats": [ 33 ],
"headers": { "Server": "mod_wsgi(/([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "mod_wsgi(/([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Python", "Apache" ]
},
"MoinMoin": {
"cats": [ 8 ],
"script": "moin.+/common/js/common\\.js",
"script": "moin(_static(\\d)(\\d)(\\d)|.+)/common/js/common\\.js\\;version:\\2.\\3.\\4",
"env": "^show_switch2gui$",
"implies": [ "Python" ]
},
@ -1127,6 +1196,12 @@
"cats": [ 1 ],
"html": "<meta[^>]+openEngine"
},
"OpenGrok": {
"cats": [ 19 ],
"headers": { "Set-Cookie": "OpenGrok" },
"meta": { "generator": "OpenGrok( v?([\\d\\.]+))?\\;version:\\2" },
"implies": [ "Java" ]
},
"OpenGSE": {
"cats": [ 22 ],
"headers": { "Server": "GSE" },
@ -1141,6 +1216,10 @@
"cats": [ 1 ],
"headers": { "X-Powered-By": "OpenNemas" }
},
"OpenSSL": {
"cats": [ 33 ],
"headers": { "Server": "OpenSSL(/([\\d\\.]+[a-z]?))?\\;version:\\2" }
},
"OpenText Web Solutions": {
"cats": [ 1 ],
"html": "<!--[^>]+published by Open Text Web Solutions",
@ -1150,6 +1229,10 @@
"cats": [ 10 ],
"env": "^optimizely$"
},
"Oracle Application Server": {
"cats": [ 22 ],
"headers": { "Server": "Oracle(-| )Application(-| )Server((-| )(\\d+[a-z]?))?\\;version:\\5" }
},
"Oracle Recommendations On Demand": {
"cats": [ 10 ],
"script": "atgsvcs.+atgsvcs\\.js"
@ -1196,7 +1279,7 @@
},
"PHP": {
"cats": [ 27 ],
"headers": { "Server": "php", "X-Powered-By": "php", "Set-Cookie": "PHPSESSID" },
"headers": { "Server": "php/?([\\d\\.]+)?\\;version:\\1", "X-Powered-By": "php/?([\\d\\.]+)?\\;version:\\1", "Set-Cookie": "PHPSESSID" },
"url": "\\.php$"
},
"phpAlbum": {
@ -1303,9 +1386,9 @@
},
"Prototype": {
"cats": [ 12 ],
"script": "(prototype|protoaculous)\\.js",
"script": "(prototype|protoaculous)(-([\\d\\.]*[\\d]))?.*\\.js\\;version:\\3",
"env": "^Prototype$"
},
},
"Protovis": {
"cats": [ 25 ],
"script": "protovis.*\\.js",
@ -1317,7 +1400,8 @@
"implies": [ "PHP" ]
},
"Python": {
"cats": [ 27 ]
"cats": [ 27 ],
"headers": { "Server": "(^|\\s)Python(/([\\d\\.]+))?\\;version:\\3" }
},
"Quantcast": {
"cats": [ 10 ],
@ -1340,8 +1424,8 @@
},
"RBS Change": {
"cats": [ 1, 6 ],
"html": "<html[^>]*\\s+xmlns:change=",
"meta": { "generator": "^RBS Change" },
"html": "<html[^>]+xmlns:change=",
"meta": { "generator": "RBS Change" },
"implies": [ "PHP" ]
},
"RCMS": {
@ -1356,7 +1440,7 @@
},
"Red Hat": {
"cats": [ 28 ],
"headers": { "Server": "(Red Hat|rhel\\d+)", "X-Powered-By": "Red Hat" }
"headers": { "Server": "(.*rhel(\\d+)|Red Hat)\\;version:\\2", "X-Powered-By": "Red Hat" }
},
"Reddit": {
"cats": [ 2 ],
@ -1406,6 +1490,12 @@
"cats": [ 1 ],
"meta": { "generator": "Serendipity", "Powered-By": "Serendipity" }
},
"Sarka-SPIP": {
"cats": [ 1 ],
"meta": { "generator": "(^|\\s)Sarka-SPIP(\\s([\\d\\.]+(\\s\\[\\d+\\])?))?\\;version:\\3" },
"headers": { "X-Spip-Cache": ".*" },
"implies": [ "SPIP" ]
},
"script.aculo.us": {
"cats": [ 12 ],
"script": "(scriptaculous|protoaculous)\\.js",
@ -1428,12 +1518,6 @@
"script": "w\\.sharethis\\.com/",
"env": "^SHARETHIS$"
},
"ShinyStat": {
"cats": [ 10 ],
"env": "^SSsdk$",
"html": "<img[^>]*\\s+src=['\"]?https?://www\\.shinystat\\.com/cgi-bin/shinystat\\.cgi\\?[^'\"\\s>]*['\"\\s/>]",
"script": "^https?://codice(business|ssl|pro|isp)?\\.shinystat\\.com/cgi-bin/getcod\\.cgi"
},
"Shopalize": {
"cats": [ 5, 10 ],
"env": "^Shopalize$"
@ -1516,7 +1600,7 @@
},
"SPIP": {
"cats": [ 1 ],
"meta": { "generator": "SPIP" },
"meta": { "generator": "(^|\\s)SPIP(\\s([\\d\\.]+(\\s\\[\\d+\\])?))?\\;version:\\3" },
"headers": { "X-Spip-Cache": ".*" }
},
"SQL Buddy": {
@ -1547,6 +1631,18 @@
"script": "cdn\\.sublimevideo\\.net/js/[a-z\\d]+\\.js",
"env": "^sublimevideo$"
},
"Supersized": {
"cats": [ 7, 25 ],
"script": "supersized(\\.([\\d\\.]*[\\d]))?.*\\.js\\;version:\\2"
},
"SUSE": {
"cats": [ 28 ],
"headers": { "Server": "SUSE(/?\\s?-?([\\d\\.]+))?\\;version:\\2", "X-Powered-By": "SUSE(/?\\s?-?([\\d\\.]+))?\\;version:\\2" }
},
"Scientific Linux": {
"cats": [ 28 ],
"headers": { "Server": "Scientific Linux", "X-Powered-By": "Scientific Linux" }
},
"SWFObject": {
"cats": [ 19 ],
"script": "swfobject.*\\.js",
@ -1800,7 +1896,7 @@
},
"WordPress": {
"cats": [ 1, 11 ],
"meta": { "generator": "WordPress" },
"meta": { "generator": "WordPress( [\\d\\.]+)?\\;version:\\1" },
"html": "<link rel=\\\"stylesheet\\\" [^>]+wp-content",
"env": "^wp_username$",
"implies": [ "PHP" ]

@ -28,7 +28,10 @@ var wappalyzer = (function() {
* Parse apps.json patterns
*/
var parse = function(patterns) {
var parsed = [];
var
attrs,
parsed = []
;
// Convert single patterns to an array
if ( typeof patterns === 'string' ) {
@ -36,9 +39,22 @@ var wappalyzer = (function() {
}
patterns.map(function(pattern) {
parsed.push({
regex: new RegExp(pattern.replace('/', '\\\/'), 'i') // Escape slashes in regular expression
});
attrs = {};
pattern.split('\\;').map(function(attr, i) {
if ( i ) {
// Key value pairs
attr = attr.split(':');
if ( attr.length === 2 ) {
attrs[attr[0]] = attr[1];
}
} else {
attrs.regex = new RegExp(attr.replace('/', '\\\/'), 'i'); // Escape slashes in regular expression
}
});
parsed.push(attrs);
});
return parsed;

Loading…
Cancel
Save