Module: WappalyzerRb

Defined in:
lib/wappalyzer_rb.rb,
lib/wappalyzer_rb/apps.rb,
lib/wappalyzer_rb/version.rb

Defined Under Namespace

Classes: Detector

Constant Summary collapse

CATEGORIES =
[
  nil,
  'cms',
  'message-boards',
  'database-managers',
  'documentation-tools',
  'widgets',
  'web-shops',
  'photo-galleries',
  'wikis',
  'hosting-panels',
  'analytics',
  'blogs',
  'javascript-frameworks',
  'issue-trackers',
  'video-players',
  'comment-systems',
  'captchas',
  'font-scripts',
  'web-frameworks',
  'miscellaneous',
  'editors',
  'lms',
  'web-servers',
  'cache-tools',
  'rich-text editors',
  'javascript-graphics',
  'mobile-frameworks',
  'programming-languages',
  'operating-systems',
  'search-engines'
]
APPS =
{
  '1und1' =>                            { cats: [  6 ], url: /\/shop\/catalog\/browse\?sessid\=/ },
  '1C-Bitrix' =>                        { cats: [  1 ], html: /<link[^>]+components\/bitrix/i, script: /1c\-bitrix/i },
  '2z Project' =>                       { cats: [  1 ], meta: { 'generator' => /2z project/i } },
  'AddThis' =>                          { cats: [  5 ], script: /addthis\.com\/js/, env: /^addthis$/ },
  'Adobe GoLive' =>                     { cats: [ 20 ], meta: { 'generator' => /Adobe GoLive/i } },
  'Advanced Web Stats' =>               { cats: [ 10 ], html: /aws.src = [^<]+caphyon\-analytics/i },
  'Ametys' =>                           { cats: [  1 ], meta: { 'generator' => /(Ametys|Anyware Technologies)/i }, script: /STools.js/ },
  'Amiro.CMS' =>                        { cats: [  1 ], meta: { 'generator' => /Amiro/i } },
  'AOLserver' =>                        { cats: [ 22 ], headers: { 'Server' => /AOLserver/i } },
  'Apache' =>                           { cats: [ 22 ], headers: { 'Server' => /(Apache($|[^-])|HTTPD)/i } },
  'Apache Tomcat' =>                    { cats: [ 22 ], headers: { 'Server' => /Apache-Coyote/i } },
  'Apache Traffic Server' =>            { cats: [ 22 ], headers: { 'Server' => /YTS/i } },
  'Arc Forum' =>                        { cats: [  2 ], html: /ping\.src = node\.href;/ },
  'ATG Web Commerce' =>                 { cats: [  6 ], headers: { 'X-ATG-Version' => /ATG/i }, html: /<[^>]+_DARGS/ },
  'Atlassian Confluence' =>             { cats: [  8 ], html: /Powered by <a href=.http:\/\/www\.atlassian\.com\/software\/confluence/i },
  'Atlassian Jira' =>                   { cats: [ 13 ], env: /^jira$/i, html: /Powered by <a href=.http:\/\/www\.atlassian\.com\/software\/jira/i, implies: [ 'Java' ] },
  'Alloy' =>                            { cats: [ 12 ], env: /^AUI$/ },
  'AWStats' =>                          { cats: [ 10 ], meta: { 'generator' => /AWStats/i } },
  'Banshee' =>                          { cats: [  1, 18 ], html: /Built upon the <a href=("|')[^>]+banshee-php\.org/i },
  'Backbone.js' =>                      { cats: [ 12 ], script: /backbone.*\.js/, env: /^Backbone$/ },
  'BIGACE' =>                           { cats: [  1 ], meta: { 'generator' => /BIGACE/ }, html: /Powered by <a href=("|')[^>]+BIGACE|<!--\s+Site is running BIGACE/i },
  'BigDump' =>                          { cats: [  3 ], html: /<!-- <h1>BigDump: Staggered MySQL Dump Importer/ },
  'Bigware' =>                          { cats: [  6 ], html: /bigware/i },
  'blip.tv' =>                          { cats: [ 14 ], html: /<(param|embed)[^>]+blip\.tv\/play/i },
  'Blogger' =>                          { cats: [ 11 ], meta: { 'generator' => /blogger/i }, url: /^(www.)?.+\.blogspot\.com/i },
  'Bugzilla' =>                         { cats: [ 13 ], html: /<[^>]+(id|title|name)=("|')bugzilla/i },
  'Burning Board' =>                    { cats: [  2 ], html: /<a href=('|")[^>]+woltlab\.com.+Burning Board/i },
  'Business Catalyst' =>                { cats: [  1 ], script: /CatalystScripts/, html: /<!-- BC_OBNW -->/ },
  'CakePHP' =>                          { cats: [ 18 ], headers: { 'set-cookie' => /cakephp=/ }, meta: { 'application-name' => /CakePHP/ } },
  'Cargo' =>                            { cats: [  1 ], script: /\/cargo\./i, html: /<link [^>]+Cargo feed/ },
  'CentOS' =>                           { cats: [ 28 ], headers: { 'Server' => /CentOS/i, 'X-Powered-By' => /CentOS/i } },
  'Chameleon' =>                        { cats: [  1 ], meta: { 'generator' => /chameleon\-cms/i } },
  'chartbeat' =>                        { cats: [ 10 ], html: /function loadChartbeat\(\) {/i },
  'Chamilo' =>                          { cats: [ 21 ], meta: { 'generator' => /Chamilo/i }, headers: { 'X-Powered-By' => /Chamilo/ } },
  'Cherokee' =>                         { cats: [ 22 ], headers: { 'Server' => /Cherokee/i } },
  'CKEditor' =>                         { cats: [ 24 ], env: /^CKEDITOR$/ },
  'ClickHeat' =>                        { cats: [ 10 ], script: /clickheat.*\.js/i, env: /^clickHeatBrowser$/ },
  'ClickTale' =>                        { cats: [ 10 ], html: /if\(typeof ClickTale(Tag)*==("|')function("|')\)/, env: /^ClickTale/i },
  'Clicky' =>                           { cats: [ 10 ], script: /static\.getclicky\.com/, env: /^clicky$/ },
  'CMS Made Simple' =>                  { cats: [  1 ], meta: { 'generator' => /CMS Made Simple/i } },
  'CO2Stats' =>                         { cats: [ 10 ], html: /src=("|')http:\/\/www\.co2stats\.com\/propres\.php/ },
  'CodeIgniter' =>                      { cats: [ 18 ], headers: { 'Set-Cookie' => /(exp_last_activity|exp_tracker|ci_session)/ }, implies: [ 'PHP' ] },
  'Commerce Server' =>                  { cats: [  6 ], headers: { 'COMMERCE-SERVER-SOFTWARE' => /.+/ } },
  'comScore' =>                         { cats: [ 10 ], html: /<i{1}frame[^>]* (id=("|')comscore("|')|scr=[^>]+comscore)/, env: /^_?COMSCORE$/i },
  'Concrete5' =>                        { cats: [  1 ], meta: { 'generator' => /concrete5/i } },
  'Contao' =>                           { cats: [  1, 6 ], html: /(<!--\s+This website is powered by (TYPOlight|Contao)|<link[^>]+(typolight|contao).css)/i, implies: [ 'PHP' ] },
  'Contens' =>                          { cats: [  1 ], meta: { 'generator' => /contens/i } },
  'ConversionLab' =>                    { cats: [ 10 ], script: /conversionlab\.trackset\.com\/track\/tsend\.js/ },
  'Coppermine' =>                       { cats: [  7 ], html: /<!--Coppermine Photo Gallery/i, implies: [ 'PHP' ] },
  'Cosmoshop' =>                        { cats: [  6 ], script: /cosmoshop_functions\.js/ },
  'Cotonti' =>                          { cats: [  1 ], meta: { 'generator' => /Cotonti/i } },
  'CouchDB' =>                          { cats: [ 22 ], headers: { 'Server' => /CouchDB/i } },
  'cPanel' =>                           { cats: [  9 ], html: /<!-- cPanel/i },
  'Crazy Egg' =>                        { cats: [ 10 ], script: /cetrk\.com\/pages\/scripts\/[0-9]+\/[0-9]+\.js/ },
  'CS Cart' =>                          { cats: [  6 ], html: /&nbsp;Powered by (<a href=.http:\/\/www\.cs\-cart\.com|CS\-Cart)/i },
  'CubeCart' =>                         { cats: [  6 ], html: /(Powered by <a href=.http:\/\/www\.cubecart\.com|<p[^>]+>Powered by CubeCart)/i },
  'cufon' =>                            { cats: [ 17 ], script: /cufon\-yui\.js/, env: /^Cufon$/ },
  'd3' =>                               { cats: [ 25 ], script: /d3(\.min)?\.js/ },
  'Dancer' =>                           { cats: [ 18 ], headers: { 'X-Powered-By' => /Perl Dancer/, 'Server' => /Perl Dancer/ }, implies: [ 'Perl' ] },
  'Danneo CMS' =>                       { cats: [  1 ], meta: { 'generator' => /Danneo/i } },
  'DataLife Engine' =>                  { cats: [  1 ], meta: { 'generator' => /DataLife Engine/i } },
  'David Webbox' =>                     { cats: [ 22 ], headers: { 'Server' => /David-WebBox/i } },
  'Debian' =>                           { cats: [ 28 ], headers: { 'Server' => /Debian/i, 'X-Powered-By' => /(Debian|dotdeb|etch|lenny|squeeze|wheezy)/i } },
  'DedeCMS' =>                          { cats: [  1 ], env: /^Dede/, script: /dedeajax/ },
  'Demandware' =>                       { cats: [  6 ], html: /<[^>]+demandware.edgesuite/, env: /^dwAnalytics/ },
  'DHTMLX' =>                           { cats: [ 12 ], script: /dhtmlxcommon\.js/ },
  'DirectAdmin' =>                      { cats: [  9 ], html: /<a[^>]+>DirectAdmin<\/a> Web Control Panel/i },
  'Disqus' =>                           { cats: [ 15 ], script: /disqus_url/, html: /<div[^>]+id=("|')disqus_thread("|')/, env: /^DISQUS/i },
  'Django' =>                           { cats: [ 18 ] },
  'Django CMS' =>                       { cats: [  1 ], script: /media\/cms\/js\/csrf\.js/, headers: { 'Set-Cookie' => /django/ }, implies: [ 'Django' ] },
  'dojo' =>                             { cats: [ 12 ], script: /dojo(\.xd)?\.js/, env: /^dojo$/ },
  'Dokeos' =>                           { cats: [ 21 ], meta: { 'generator' => /Dokeos/i }, html: /Portal <a[^>]+>Dokeos|@import "[^"]+dokeos_blue/i, headers: { 'X-Powered-By' => /Dokeos/ } },
  'DokuWiki' =>                         { cats: [  8 ], meta: { 'generator' => /DokuWiki/i } },
  'DotNetNuke' =>                       { cats: [  1 ], meta: { 'generator' => /DotNetNuke/i }, html: /(<!\-\- by DotNetNuke Corporation|<link[^>]+\/portals\/_default\/[^>]+\.css)/i, env: /^(DDN|DotNetNuke)/i },
  'DreamWeaver' =>                      { cats: [ 20 ], html: /(<!\-\-[^>]*(InstanceBeginEditable|Dreamweaver[^>]+target|DWLayoutDefaultTable)|function MM_preloadImages\(\) {)/ },
  'Drupal' =>                           { cats: [  1 ], script: /drupal\.js/, html: /(jQuery\.extend\(Drupal\.settings, \{|Drupal\.extend\(\{ settings: \{|<link[^>]+sites\/(default|all)\/themes\/|<style[^>]+sites\/(default|all)\/(themes|modules)\/)/i, headers: { 'X-Drupal-Cache' => /.*/, 'X-Generator' => /Drupal/, 'Expires' => /19 Nov 1978/ }, env: /^Drupal$/, implies: [ 'PHP' ] },
  'Drupal Commerce' =>                  { cats: [  6 ], html: /id="block[_-]commerce[_-]cart[_-]cart|class="commerce[_-]product[_-]field/i, implies: [ 'PHP' ] },
  'Dynamicweb' =>                       { cats: [  1 ], meta: { 'generator' => /Dynamicweb/i } },
  'e107' =>                             { cats: [  1 ], script: /e107\.js/ },
  'Ecodoo' =>                           { cats: [  6 ], script: /addons\/lytebox\/lytebox\.js/ },
  'Exhibit' =>                          { cats: [ 25 ], script: /exhibit.*\.js/, env: /^Exhibit$/ },
  'ExtJS' =>                            { cats: [ 12 ], script: /ext\-base\.js/, env: /^Ext$/ },
  'ExpressionEngine' =>                 { cats: [  1 ], headers: { 'Set-Cookie' => /(exp_last_activity|exp_tracker)/ } },
  'eZ Publish' =>                       { cats: [  1 ], meta: { 'generator' => /eZ Publish/i } },
  'FAST Search for SharePoint' =>       { cats: [ 29 ], url: /Pages\/SearchResults\.aspx\?k\=/, implies: [ 'Microsoft ASP.NET' ] },
  'FAST ESP' =>                         { cats: [ 29 ], html: /fastsearch|searchProfile\=|searchCategory\=/i, url: /esppublished|searchProfile\=|searchCategory\=/i },
  'Fact Finder' =>                      { cats: [ 29 ], html: /\/images\/fact-finder\.gif|ViewParametricSearch|factfinder|Suggest\.ff/i, url: /ViewParametricSearch|factfinder|ffsuggest/i },
  'FlexCMP' =>                          { cats: [  1 ], meta: { 'generator' => /FlexCMP/ }, headers: { 'X-Powered-By' => /FlexCMP/ } },
  'FluxBB' =>                           { cats: [  2 ], html: /Powered by (<strong>)?<a href=("|')[^>]+fluxbb/i },
  'Flyspray' =>                         { cats: [ 13 ], html: /(<a[^>]+>Powered by Flyspray|<map id=("|')projectsearchform)/ },
  'FreeBSD' =>                          { cats: [ 28 ], headers: { 'Server' => /FreeBSD/i } },
  'FWP' =>                              { cats: [  6 ], meta: {'generator' => /FWP Shop/ } },
  'FrontPage' =>                        { cats: [ 20 ], meta: { 'generator' => /Microsoft FrontPage/ }, html: /<html[^>]+urn:schemas\-microsoft\-com:office:office/i },
  'Gallery' =>                          { cats: [  7 ], env: /galleryAuthToken/, html: /<div id="gsNavBar" class="gcBorder1">/ },
  'Gambio' =>                           { cats: [  6 ], html: /brought to you by XT-Commerce|[Gg]ambio|content\.php\?coID=\d/},
  'Gauges' =>                           { cats: [ 10 ], html: /t\.src = '\/\/secure\.gaug\.es\/track\.js/, env: /^_gauges$/ },
  'Gentoo' =>                           { cats: [ 28 ], headers: { 'X-Powered-By' => /-?gentoo/} },
  'Get Satisfaction' =>                 { cats: [ 13 ], html: /var feedback_widget = new GSFN\.feedback_widget\(feedback_widget_options\)/ },
  'Google Analytics' =>                 { cats: [ 10 ], script: /(\.google\-analytics\.com\/ga\.js|google-analytics\.com\/urchin\.js)/, env: /^gaGlobal$/ },
  'Google App Engine' =>                { cats: [ 22 ], headers: { 'Server' => /Google Frontend/i } },
  'Google Font API' =>                  { cats: [ 17 ], script: /googleapis.com\/.+webfont/, html: /<link[^>]* href=("|')http:\/\/fonts\.googleapis\.com/, env: /^WebFont/ },
  'Google Friend Connect' =>            { cats: [  5 ], script: /google.com\/friendconnect/ },
  'Google Maps' =>                      { cats: [  5 ], script: /(maps\.google\.com\/maps\?file=api|maps\.google\.com\/maps\/api\/staticmap)/ },
  'Google Sites' =>                     { cats: [  1 ], url: /sites.google.com/ },
  'GoStats' =>                          { cats: [ 10 ], env: /^_go(stats|_track)/i },
  'Graffiti CMS' =>                     { cats: [  1 ], meta: { 'generator' => /Graffiti CMS/i } },
  'Gravatar' =>                         { cats: [ 19 ], env: /^Gravatar$/ },
  'Gravity Insights' =>                 { cats: [ 10 ], html: /gravityInsightsParams\.site_guid = '/, env: /^GravityInsights$/ },
  'Handlebars' =>                       { cats: [ 12 ], env: /^Handlebars$/ },
  'Hiawatha' =>                         { cats: [ 22 ], headers: { 'Server' => /Hiawatha/i } },
  'Highcharts' =>                       { cats: [ 25 ], script: /highcharts.*\.js/, env: /^Highcharts$/ },
  'Hotaru CMS' =>                       { cats: [  1 ], meta: { 'generator' => /Hotaru CMS/i } },
  'Hybris' =>                           { cats: [  6 ], html: /\/sys_master\/|\/hybr\//, header: { 'Set-Cookie' => /_hybris/ }, implies: [ 'Java' ] },
  'IIS' =>                              { cats: [ 22 ], headers: { 'Server' => /IIS/i }, implies: [ 'Windows Server' ] },
  'Indexhibit' =>                       { cats: [  1 ], html: /<link [^>]+ndxz-studio/i },
  'InstantCMS' =>                       { cats: [  1 ], meta: { 'generator' => /InstantCMS/i } },
  'Intershop' =>                        { cats: [  6 ], url: /is-bin|INTERSHOP/i, script: /is-bin|INTERSHOP/i },
  'IPB' =>                              { cats: [  2 ], script: /jscripts\/ips_/, env: /^IPBoard/, html: /<link[^>]+ipb_[^>]+\.css/ },
  'iWeb' =>                             { cats: [ 20 ], meta: { 'generator' => /iWeb/i } },
  'Jalios' =>                           { cats: [  1 ], meta: { 'generator' => /Jalios/i } },
  'Java' =>                             { cats: [ 27 ] },
  'Javascript Infovis Toolkit' =>       { cats: [ 25 ], script: /jit.*\.js/, env: /^\$jit$/ },
  'Jo' =>                               { cats: [ 26, 12 ], env: /^jo(Cache|DOM|Event)$/ },
  'JobberBase' =>                       { cats: [ 19 ], meta: { 'generator' => /Jobberbase/i }, env: /^Jobber$/ },
  'Joomla' =>                           { cats: [  1 ], meta: { 'generator' => /Joomla/i }, html: /(<!\-\- JoomlaWorks "K2"|<[^>]+(feed|components)\/com_)/i, headers: { 'X-Content-Encoded-By' => /Joomla/ }, env: /^(jcomments)$/i },
  'jqPlot' =>                           { cats: [ 25 ], script: /jqplot.*\.js/, env: /^jQuery.jqplot$/ },
  'jQTouch' =>                          { cats: [ 26 ], script: /jqtouch.*\.js/i, env:/^jQT$/ },
  'jQuery UI' =>                        { cats: [ 12 ], script: /jquery\-ui.*\.js/, implies: [ 'jQuery' ] },
  'jQuery' =>                           { cats: [ 12 ], script: /jquery.*.js/, env: /^jQuery$/ },
  'jQuery Mobile' =>                    { cats: [ 26 ], script: /jquery\.mobile.*\.js/i },
  'jQuery Sparklines' =>                { cats: [ 25 ], script: /jquery\.sparkline.*\.js/i },
  'JS Charts' =>                        { cats: [ 25 ], script: /jscharts.*\.js/i, env: /^JSChart$/ },
  'JTL Shop' =>                         { cats: [  6 ], html: /(<input[^>]+name=('|")JTLSHOP|<a href=('|")jtl\.php)/i },
  'K2' =>                               { cats: [ 19 ], html: /<!\-\- JoomlaWorks "K2"/, env: /^K2RatingURL$/, implies: [ 'Joomla' ] },
  'Kampyle' =>                          { cats: [ 10 ], script: /cf\.kampyle\.com\/k_button\.js/ },
  'Kentico CMS' =>                      { cats: [  1 ], meta: { 'generator' => /Kentico CMS/i } },
  'Koego' =>                            { cats: [ 10 ], script: /tracking\.koego\.com\/end\/ego\.js/ },
  'Kohana' =>                           { cats: [ 18 ], headers: { 'Set-Cookie' => /kohanasession/i, 'X-Powered-By' => /Kohana/ }, implies: [ 'PHP' ] },
  'Kolibri CMS' =>                      { cats: [  1 ], meta: { 'generator' => /Kolibri/i } },
  'Koobi' =>                            { cats: [  1 ], meta: { 'generator' => /Koobi/i } },
  'lighttpd' =>                         { cats: [ 22 ], headers: { 'Server' => /lighttpd/i } },
  'LiveJournal' =>                      { cats: [ 11 ], url: /^(www.)?.+\.livejournal\.com/i },
  'Liferay' =>                          { cats: [  1 ], env: /^Liferay$/, headers: { 'Liferay-Portal' => /.*/i } },
  'Lotus Domino' =>                     { cats: [ 22 ], headers: { 'Server' => /Lotus\-Domino/i } },
  'Magento' =>                          { cats: [  6 ], script: /\/(js\/mage|skin\/frontend\/(default|enterprise))\//, env: /^(Mage|VarienForm)$/, implies: [ 'PHP '] },
  'Mambo' =>                            { cats: [  1 ], meta: { 'generator' => /Mambo/i } },
  'MantisBT' =>                         { cats: [ 13 ], html: /<img[^>]+ alt=("|')Powered by Mantis Bugtracker/i },
  'MaxSite CMS' =>                      { cats: [  1 ], meta: { 'generator' => /MaxSite CMS/i } },
  'MediaWiki' =>                        { cats: [  8 ], meta: { 'generator' => /MediaWiki/i }, html: /(<a[^>]+>Powered by MediaWiki<\/a>|<[^>]+id=("|')t\-specialpages)/i },
  'Meebo' =>                            { cats: [  5 ], html: /(<iframe id=("|')meebo\-iframe("|')|Meebo\('domReady'\))/ },
  'Microsoft ASP.NET' =>                { cats: [ 18 ], html: /<input[^>]+name=("|')__VIEWSTATE/, headers: { 'X-Powered-By' => /ASP\.NET/, 'X-AspNet-Version' => /.+/ }, implies: [ 'Windows Server' ] },
  'Microsoft SharePoint' =>             { cats: [  1 ], meta: { 'generator' => /Microsoft SharePoint/i }, headers: { 'MicrosoftSharePointTeamServices' => /.*/, 'X-SharePointHealthScore' => /.*/, 'SPRequestGuid' => /.*/, 'SharePointHealthScore' => /.*/ } },
  'MiniBB' =>                           { cats: [  2 ], html: /<a href=("|')[^>]+minibb.+\s+<!--End of copyright link/i },
  'Mint' =>                             { cats: [ 10 ], script: /mint\/\?js/, env: /^Mint$/ },
  'Mixpanel' =>                         { cats: [ 10 ], script: /api\.mixpanel\.com\/track/ },
  'MochiKit' =>                         { cats: [ 12 ], script: /MochiKit\.js/, env: /^MochiKit$/ },
  'Modernizr' =>                        { cats: [ 12 ], script: /modernizr.*\.js/, env: /^Modernizr$/ },
  'MODx' =>                             { cats: [  1 ], html: /(<a[^>]+>Powered by MODx<\/a>|var el= \$\('modxhost'\);|<script type=("|')text\/javascript("|')>var MODX_MEDIA_PATH = "media";)|<(link|script)[^>]+assets\/snippets\//i },
  'Mojolicious' =>                      { cats: [ 18 ], headers: { 'x-powered-by' => /mojolicious/ }, implies: [ 'PERL' ] },
  'Mollom' =>                           { cats: [ 16 ], script: /mollom\.js/, html: /<img[^>]+\/.mollom\/.com/i },
  'Mondo Media' =>                      { cats: [  6 ], meta: { 'generator' => /Mondo Shop/ } },
  'Mongrel' =>                          { cats: [ 22 ], headers: { 'Server' => /Mongrel/ }, implies: [ 'Ruby' ] },
  'Moodle' =>                           { cats: [ 21 ], html: /(var moodleConfigFn = function\(me\)|<img[^>]+moodlelogo)/i, implies: [ 'PHP' ] },
  'Moogo' =>                            { cats: [  1 ], script: /kotisivukone.js/ },
  'MooTools' =>                         { cats: [ 12 ], script: /mootools.*\.js/, env: /^MooTools$/ },
  'Movable Type' =>                     { cats: [  1 ], meta: { 'generator' => /Movable Type/i } },
  'Mustache' =>                         { cats: [ 12 ], env: /^Mustache$/ },
  'MyBB' =>                             { cats: [  2 ], html: /(<script [^>]+\s+<!--\s+lang\.no_new_posts|<a[^>]* title=("|')Powered By MyBB)/i, env: /^MyBB/ },
  'MyBlogLog' =>                        { cats: [  5 ], script: /pub\.mybloglog\.com/i },
  'Mynetcap' =>                         { cats: [  1 ], meta: { 'generator' => /Mynetcap/i } },
  'Nedstat' =>                          { cats: [ 10 ], html: /sitestat\(("|')http:\/\/nl\.sitestat\.com/ },
  'Netmonitor' =>                       { cats: [ 10 ], script: /netmonitor\.fi\/nmtracker\.js/, env: /^netmonitor/ },
  'Nginx' =>                            { cats: [ 22 ], headers: { 'Server' => /nginx/i } },
  'NOIX' =>                             { cats: [ 19 ], html: /<[^>]+(src|href)=[^>]*(\/media\/noix)|<!\-\- NOIX/i },
  'nopCommerce' =>                      { cats: [  6 ], html: /(<!\-\-Powered by nopCommerce|Powered by: <a[^>]+nopcommerce)/i },
  'OneStat' =>                          { cats: [ 10 ], html: /var p=("|')http("|')\+\(d\.URL\.indexOf\('https:'\)==0\?'s':''\)\+("|'):\/\/stat\.onestat\.com\/stat\.aspx\?tagver/i },
  'OpenCart' =>                         { cats: [  6 ], html: /(Powered By <a href=("|')[^>]+OpenCart|route = getURLVar\(("|')route)/i },
  'openEngine' =>                       { cats: [  1 ], html: /<meta[^>]+openEngine/i },
  'OpenGSE' =>                          { cats: [ 22 ], headers: { 'Server' => /GSE/i } },
  'OpenLayers' =>                       { cats: [  5 ], script: /openlayers/, env:/^OpenLayers$/ },
  'OpenNemas' =>                        { cats: [  1 ], headers: { 'X-Powered-By' => /OpenNemas/ } },
  'Open Web Analytics' =>               { cats: [ 10 ], html: /<!-- (Start|End) Open Web Analytics Tracker -->/, env: /^_?owa_/i },
  'Optimizely' =>                       { cats: [ 10 ], env: /^optimizely/ },
  'Oracle Recommendations On Demand' => { cats: [ 10 ], script: /atgsvcs.+atgsvcs\.js/ },
  'osCommerce' =>                       { cats: [  6 ], html: /<a[^>]*osCsid/i },
  'osCSS' =>                            { cats: [  6 ], html: /<body onload=("|')window\.defaultStatus='oscss templates';("|')/i },
  'OXID eShop' =>                       { cats: [  6 ], html: /<!--.*OXID eShop/, env: /^ox(TopMenu|ModalPopup|LoginBox|InputValidator)/ },
  'PANSITE' =>                          { cats: [  1 ], meta: { 'generator' => /PANSITE/i } },
  'papaya CMS' =>                       { cats: [  1 ], html: /<link[^>]*\/papaya-themes\//i },
  'Parse.ly' =>                         { cats: [ 10 ], env: /^PARSELY$/ },
  'Perl' =>                             { cats: [ 27 ] },
  'PHP' =>                              { cats: [ 27 ], headers: { 'Server' => /php/i, 'X-Powered-By' => /php/i, 'Set-Cookie' => /PHPSESSID/ }, url: /\.php$/ },
  'Phpcms' =>                           { cats: [  1 ], env: /^phpcms/ },
  'PHP-Fusion' =>                       { cats: [  1 ], html: /Powered by <a href=("|')[^>]+php-fusion/i },
  'PHP-Nuke' =>                         { cats: [  2 ], meta: { 'generator' => /PHP-Nuke/i }, html: /<[^>]+Powered by PHP\-Nuke/i },
  'phpBB' =>                            { cats: [  2 ], meta: { 'copyright' => /phpBB Group/ }, html: /(Powered by <a[^>]+phpbb|<a[^>]+phpbb[^>]+class=.copyright|\tphpBB style name|<[^>]+styles\/(sub|pro)silver\/theme|<img[^>]+i_icon_mini|<table class="forumline)/i, env: /^(style_cookie_settings|phpbb_)/, headers: { 'Set-Cookie' => /^phpbb/ }, implies: [ 'PHP' ] },
  'phpDocumentor' =>                    { cats: [  4 ], html: /<!-- Generated by phpDocumentor/, implies: [ 'PHP' ] },
  'phpMyAdmin' =>                       { cats: [  3 ], html: /(var pma_absolute_uri = '|PMA_sendHeaderLocation\(|<title>phpMyAdmin<\/title>)/i, implies: [ 'PHP' ] },
  'phpPgAdmin' =>                       { cats: [  3 ], html: /(<title>phpPgAdmin<\/title>|<span class=("|')appname("|')>phpPgAdmin)/i },
  'Piwik' =>                            { cats: [ 10 ], html: /var piwikTracker = Piwik\.getTracker\(/i, env: /^Piwik$/ },
  'Plentymarkets' =>                    { cats: [  6 ], meta: { 'generator' => /www\.plentyMarkets\./i } },
  'Plesk' =>                            { cats: [  9 ], script: /common\.js\?plesk/i },
  'Plone' =>                            { cats: [  1 ], meta: { 'generator' => /Plone/i }, implies: [ 'Python' ] },
  'Plura' =>                            { cats: [ 19 ], html: /<iframe src="http:\/\/pluraserver\.com/ },
  'posterous' =>                        { cats: [  1, 11 ], html: /<div class=("|')posterous/i, env: /^Posterous/i },
  'Powergap' =>                         { cats: [  6 ], html: /(s\d\d)\.php\?shopid=\1/ },
  'Prestashop' =>                       { cats: [  6 ], meta: { 'generator' => /PrestaShop/i }, html: /Powered by <a href=("|')[^>]+PrestaShop/i },
  'Prototype' =>                        { cats: [ 12 ], script: /(prototype|protoaculous)\.js/, env: /^Prototype$/ },
  'Protovis' =>                         { cats: [ 25 ], script: /protovis.*\.js/, env: /^protovis$/ },
  'punBB' =>                            { cats: [  2 ], html: /Powered by <a href=("|')[^>]+punbb/i },
  'Python' =>                           { cats: [ 27 ] },
  'Quantcast' =>                        { cats: [ 10 ], script: /edge\.quantserve\.com\/quant\.js/, env: /^quantserve$/ },
  'Quick.Cart' =>                       { cats: [  6 ], html: /<a href="[^>]+opensolution\.org\/">Powered by/i },
  'ReallyCMS' =>                        { cats: [  1 ], meta: { 'generator' => /ReallyCMS/ } },
  'Red Hat' =>                          { cats: [ 28 ], headers: { 'Server' => /Red Hat/i, 'X-Powered-By' => /Red Hat/i } },
  'Raphael' =>                          { cats: [ 25 ], script: /raphael.*\.js/, env: /^Raphael$/ },
  'reCAPTCHA' =>                        { cats: [ 16 ], script: /(api\-secure\.recaptcha\.net|recaptcha_ajax\.js)/, html: /<div[^>]+id=("|')recaptcha_image/, env: /^Recaptcha$/ },
  'Reddit' =>                           { cats: [  2 ], html: /(<script[^>]+>var reddit = {|<a[^>]+Powered by Reddit|powered by <a[^>]+>reddit<)/i, url: /^(www\.)?reddit\.com/, env: /^reddit$/, implies: [ 'Python' ] },
  'Redmine' =>                          { cats: [ 13 ], meta: { 'description' => /Redmine/i }, html: /Powered by <a href=("|')[^>]+Redmine/i, implies: [ 'Ruby' ] },
  'Reinvigorate' =>                     { cats: [ 10 ], html: /reinvigorate\.track\("/ },
  'RequireJS' =>                        { cats: [ 12 ], script: /require.*\.js/ , env: /^requirejs$/},
  'Ruby' =>                             { cats: [ 27 ], headers: { 'Server' => /(Mongrel|WEBrick|Ruby|mod_rails|mod_rack|Phusion.Passenger)/i, 'X-Powered-By' => /(mod_rails|mod_rack|Phusion.Passenger)/i } },
  'S.Builder' =>                        { cats: [  1 ], meta: { 'generator' => /S\.Builder/i } },
  's9y' =>                              { cats: [  1 ], meta: { 'generator' => /Serendipity/i, 'Powered-By' => /Serendipity/i } },
  'script.aculo.us' =>                  { cats: [ 12 ], script: /(scriptaculous|protoaculous)\.js/, env: /^Scriptaculous$/ },
  'Sencha Touch' =>                     { cats: [ 26, 12 ], script: /sencha\-touch.*\.js/ },
  'Seoshop' =>                          { cats: [  6 ], html: /http:\/\/www\.getseoshop\.com/ },
  'ShareThis' =>                        { cats: [  5 ], script: /w\.sharethis\.com\//, env: /^SHARETHIS$/ },
  'Shopify' =>                          { cats: [  6 ], html: /<link[^>]+=cdn\.shopify\.com/, env: /^Shopify$/ },
  'sIFR' =>                             { cats: [ 17 ], script: /sifr\.js/ },
  'Site Meter' =>                       { cats: [ 10 ], script: /sitemeter.com\/js\/counter\.js\?site=/ },
  'SiteCatalyst' =>                     { cats: [ 10 ], html: /var s_code=s\.t\(\);if\(s_code\)document\.write\(s_code\)/i, env: /^s_account$/ },
  'SiteEdit' =>                         { cats: [  1 ], meta: { 'generator' => /SiteEdit/i } },
  'Skroutzstore' =>                     { cats: [  6 ], meta: { 'author' => /www\.skroutz(store)?\.gr/ }, url: /skroutzstore\.gr/, html: /http:\/\/(www\.)?skroutzstore\.gr/ },
  'Smartstore' =>                       { cats: [  6 ], script: /smjslib\.js/ },
  'SMF' =>                              { cats: [  2 ], html: /<script [^>]+\s+var smf_/i, env: /^smf_/ },
  'sNews' =>                            { cats: [  1 ], meta: { 'generator' => /sNews/ } },
  'Snoobi' =>                           { cats: [ 10 ], script: /snoobi\.com\/snoop\.php/ },
  'SOBI 2' =>                           { cats: [ 19 ], html: /(<!\-\- start of Sigsiu Online Business Index|<div[^>]* class=("|')sobi2)/i },
  'SoundManager' =>                     { cats: [ 12 ], env: /^(SoundManager|BaconPlayer)$/ },
  'SPIP' =>                             { cats: [  1 ], meta: { 'generator' => /SPIP/i }, headers: { 'X-Spip-Cache' => /.*/ } },
  'SQL Buddy' =>                        { cats: [  3 ], html: /(<title>SQL Buddy<\/title>|<[^>]+onclick=("|')sideMainClick\(("|')home\.php)/i },
  'Squarespace' =>                      { cats: [  1 ], html: /Squarespace\.Constants\.CURRENT_MODULE_ID/i },
  'Squiz Matrix' =>                     { cats: [  1 ], meta: { 'generator' => /Squiz Matrix/ }, html: /  Running (MySource|Squiz) Matrix/i, 'X-Powered-By' => /Squiz Matrix/ },
  'StatCounter' =>                      { cats: [ 10 ], script: /statcounter\.com\/counter\/counter/ },
  'Store Systems' =>                    { cats: [  6 ], html: /Shopsystem von <a href="http:\/\/www\.store-systems\.de"|\.mws_boxTop/ },
  'SWFObject' =>                        { cats: [ 19 ], script: /swfobject.*\.js/i, env: /^SWFObject$/ },
  'swift.engine' =>                     { cats: [  1 ], headers: { 'X-Powered-By' => /swift\.engine/ } },
  'Swiftlet' =>                         { cats: [ 18 ], meta: { 'generator' => /Swiftlet/i }, html: /Powered by <a href=("|')[^>]+Swiftlet/i, headers: { 'X-Swiftlet-Cache' => /.*/, 'X-Powered-By' => /Swiftlet/, 'X-Generator' => /Swiftlet/ }, implies: [ 'PHP' ] },
  'Textpattern CMS' =>                  { cats: [  1 ], meta: { 'generator' => /Textpattern/i } },
  'Tiki Wiki CMS Groupware' =>          { cats: [ 1, 2, 8, 11, 13 ], script: /(\/|_)tiki/, meta: { 'generator' => /^Tiki/i } },
  'Timeplot' =>                         { cats: [ 25 ], script: /timeplot.*\.js/, env: /^Timeplot$/ },
  'TinyMCE' =>                          { cats: [ 24 ], env: /^tinyMCE$/ },
  'TomatoCart' =>                       { cats: [  6 ], meta: { 'generator' => /TomatoCart/i } },
  'Trac' =>                             { cats: [ 13 ], html: /(<a id=("|')tracpowered)/i, implies: [ 'Python' ] },
  'Tumblr' =>                           { cats: [ 11 ], html: /<iframe src=("|')http:\/\/www\.tumblr\.com/i, url: /^(www.)?.+\.tumblr\.com/i, headers: { 'X-Tumblr-Usec' => /.*/ } },
  'Twilight CMS' =>                     { cats: [  1 ], headers: { 'X-Powered-CMS' => /Twilight CMS/ } },
  'Twitter Bootstrap' =>                { cats: [ 18 ], script: /twitter\.github\.com\/bootstrap/, html: /<link[^>]+bootstrap[^>]+css/, env: /^Twipsy$/ },
  'Typekit' =>                          { cats: [ 17 ], script: /use.typekit.com/, env: /^Typekit$/ },
  'TypePad' =>                          { cats: [ 11 ], meta: { 'generator' => /typepad/i }, url: /^(www.)?.+\.typepad\.com/i },
  'TYPO3' =>                            { cats: [  1 ], headers: { 'Set-Cookie' => /fe_typo_user/ }, meta: { 'generator' => /TYPO3/i }, html: /(<(script[^>]* src|link[^>]* href)=[^>]*fileadmin|<!--TYPO3SEARCH)/i, url: /\/typo3/i },
  'Ubercart' =>                         { cats: [  6 ], script: /uc_cart\/uc_cart_block\.js/ },
  'Ubuntu' =>                           { cats: [ 28 ], headers: { 'Server' => /Ubuntu/i, 'X-Powered-By' => /Ubuntu/i } },
  'Umbraco' =>                          { cats: [  1 ], meta: { 'generator' => /umbraco/i }, headers: { 'X-Umbraco-Version' => /.+/ }, html: /powered by <a href=[^>]+umbraco/i, implies: [ 'Microsoft ASP.NET' ] },
  'Underscore.js' =>                    { cats: [ 12 ], script: /underscore.*\.js/ },
  'UNIX' =>                             { cats: [ 28 ], headers: { 'Server' => /Unix/i } },
  'UserRules' =>                        { cats: [ 13 ], html: /var _usrp =/ , env: /^\_usrp$/ },
  'UserVoice' =>                        { cats: [ 13 ], env: /^UserVoice$/ },
  'Vanilla' =>                          { cats: [  2 ], html: /<body id=("|')(DiscussionsPage|vanilla)/i, headers: { 'X-Powered-By' => /Vanilla/ } },
  'Varnish' =>                          { cats: [ 22 ], headers: { 'X-Varnish' => /.+/, 'X-Varnish-Age' => /.+/, 'X-Varnish-Cache' => /.+/, 'X-Varnish-Action' => /.+/, 'X-Varnish-Hostname' => /.+/, 'Via' => /Varnish/i } },
  'vBulletin' =>                        { cats: [  2 ], meta: { 'generator' => /vBulletin/i }, env: /^(vBulletin|vB_)/ },
  'viennaCMS' =>                        { cats: [  1 ], html: /powered by <a href=("|')[^>]+viennacms/i },
  'Vignette' =>                         { cats: [  1 ], html: /<[^>]+?=("|')(vgn\-ext|vgnext)/i },
  'Vimeo' =>                            { cats: [ 14 ], html: /<(param|embed)[^>]+vimeo\.com\/moogaloop/i },
  'VirtueMart' =>                       { cats: [  6 ], html: /<div id=("|')vmMainPage/, headers: { 'Set-Cookie' => /^virtuemart\=/ } },
  'VisualPath' =>                       { cats: [ 10 ], script: /visualpath[^\/]*\.trackset\.it\/[^\/]+\/track\/include\.js/ },
  'VIVVO' =>                            { cats: [  1 ], headers: { 'Set-Cookie' => /VivvoSessionId/, env: /^vivvo/i } },
  'Vox' =>                              { cats: [ 11 ], url: /^(www.)?.+\.vox\.com/i },
  'VP-ASP' =>                           { cats: [  6 ], script: /vs350\.js/, html: /<a[^>]+>Powered By VP\-ASP Shopping Cart<\/a>/, implies: [ 'Microsoft ASP.NET' ] },
  'W3Counter' =>                        { cats: [ 10 ], script: /w3counter\.com\/tracker\.js/ },
  'Web Optimizer' =>                    { cats: [ 10 ], html: /<title [^>]*lang=("|')wo("|')>/ },
  'Websale' =>                          { cats: [  6 ], url: /\/websale7\// },
  'webEdition' =>                       { cats: [  1 ], meta: { 'generator' => /webEdition/i, 'DC.title' => /webEdition/i } },
  'WebGUI' =>                           { cats: [  1 ], meta: { 'generator' => /WebGUI/i } },
  'WebPublisher' =>                     { cats: [  1 ], meta: { 'generator' => /WEB\|Publisher/i } },
  'WebsiteBaker' =>                     { cats: [  1 ], meta: { 'generator' => /WebsiteBaker/i } },
  'Webtrekk' =>                         { cats: [ 10 ], html: /var webtrekk = new Object/ },
  'Webtrends' =>                        { cats: [ 10 ], html: /<img[^>]+id=("|')DCSIMG("|')[^>]+webtrends/i, env: /^(WTOptimize|WebTrends)/i },
  'Weebly' =>                           { cats: [  1 ], html: /<[^>]+class=("|')weebly/i },
  'WikkaWiki' =>                        { cats: [  8 ], meta: { 'generator' => /WikkaWiki/ }, html: /Powered by <a href=("|')[^>]+WikkaWiki/i },
  'Windows Server' =>                   { cats: [ 28 ] },
  'wink' =>                             { cats: [ 26, 12 ], script: /(\_base\/js\/base|wink).*\.js/i, env: /^wink$/ },
  'Wolf CMS' =>                         { cats: [  1 ], html: /<a href=("|')[^>]+wolfcms.org.+Wolf CMS.+inside/i },
  'Woopra' =>                           { cats: [ 10 ], script: /static\.woopra\.com/ },
  'WordPress' =>                        { cats: [  1, 11 ], meta: { 'generator' => /WordPress/i }, html: /<link rel=("|')stylesheet("|') [^>]+wp-content/i, env: /^wp_username$/, implies: [ 'PHP' ] },
  'xajax' =>                            { cats: [ 12 ], script: /xajax_core.*\.js/i },
  'Xanario' =>                          { cats: [  6 ], meta: { 'generator' => /xanario shopsoftware/i } },
  'XenForo' =>                          { cats: [  2 ], html: /(jQuery\.extend\(true, XenForo|Forum software by XenForo&trade;|<!\-\-XF:branding)/ },
  'XiTi' =>                             { cats: [ 10 ], html: /<[^>]+src=("|')[^>]+xiti.com\/hit.xiti/i, env: /^Xt_/ },
  'XMB' =>                              { cats: [  2 ], html: /<!-- Powered by XMB/i },
  'xui' =>                              { cats: [ 26, 12 ], script: /[^a-zA-Z]xui.*\.js/i, env: /^xui$/ },
  'XOOPS' =>                            { cats: [  1 ], meta: { 'generator' => /XOOPS/i } },
  'xtCommerce' =>                       { cats: [  6 ], meta: { 'generator' => /xt:Commerce/ }, html: /<div class=("|')copyright("|')>.+<a[^>]+>xt:Commerce/i },
  'YaBB' =>                             { cats: [  2 ], html: /Powered by <a href=("|')[^>]+yabbforum/i },
  'Yahoo! Web Analytics' =>             { cats: [ 10 ], script: /d\.yimg\.com\/mi\/ywa\.js/ },
  'Yandex.Metrika' =>                   { cats: [ 10 ], script: /mc\.yandex\.ru\/metrika\/watch\.js/ },
  'YouTube' =>                          { cats: [ 14 ], html: /<(param|embed|iframe)[^>]+youtube(-nocookie)?\.com\/(v|embed)/i },
  'YUI Doc' =>                          { cats: [  4 ], html: /<html[^>]* yuilibrary\.com\/rdf\/[0-9.]+\/yui\.rdf/i },
  'YUI' =>                              { cats: [ 12 ], script: /\/yui\/|yui\.yahooapis\.com/, env: /^YAHOO$/ },
  'Zen Cart' =>                         { cats: [  6 ], meta: { 'generator' => /Zen Cart/i } },
  'Zend' =>                             { cats: [ 22 ], headers: { 'X-Powered-By' => /Zend/ } },
  'Zepto' =>                            { cats: [ 12 ], script: /zepto.*.js/, env: /^Zepto$/ }
}
VERSION =
"0.0.7"