Categories: Perl

which-forum-perl/

Решил поделиться очередной своей наработкой — набором скриптов на Perl для определения движка форума. Эту заметку можно считать дополнением к посту Определение CMS средствами Perl .

Начнем сразу с кода основного скрипта:

#!/usr/bin/perl

# which-forum.pl script
# (c) 2010 Alexandr A Alexeev, http://remontka.com/

use strict ;

# закомментированные строки — для строгости
# если задача — собрать статистику движков, оставить как есть
# если составить список форумов — раскомментировать

my $data ;
$data .= $_ while ( <> ) ;

# проверить, сколько было Powered by phpBB без ссылки в подвале
print «phpbb n »
if ( $data =~ /<a[^>]+href=»[^»]*http://(?:www.)?phpbb.com/?»[^>]*>phpBB/i or
#     $data =~ /viewforum.php?[^'»]*f=d+/i or
$data =~ /phpBB-SEO/i or
$data =~ /<link rel=»copyright» href=»(?:http://)?phpBB.com»/i ) ;
print «ipb n »
if ( $data =~ /<a[^>]+href='[^’]*http://(?:www.)?invision(?:board|power).com/?[^’]*'[^>]*>[^<]*IP.Board/i or
$data =~ /<a[^>]+href=»[^»]*http://(?:www.)?invisionboard.com/?»[^>]*>Invision Power Board/i or
$data =~ /<div id=[«‘]{0,1}ipbwrapper[«‘]{0,1}>/i or
$data =~ /index.php?[^'»]*showforum=d+/i ) ;
print «vbulletin n »
if ( $data =~ /Powered by:?[^<]+vBulletin[^<]+(?:Version)?/i or
$data =~ /<meta name=»generator» content=»vBulletin/i or
$data =~ /forumdisplay.php?[^'»]*f=d+/i ) ;
print «smf n »
if ( $data =~ /<a[^>]+href=»[^»]*http://(?:www.)?simplemachines.org/?»[^>]*>Powered by SMF/i or
$data =~ /index.php?[^'»]*board=d+.0/i ) ;
print «punbb n »
if ( $data =~ /<a[^>]+href=»[^»]*http://(?:(?:www.)?punbb.org|punbb.informer.com)/?»[^>]*>PunBB/i ) ; #or
#     $data =~ /viewforum.php?[^'»]*id=d+/i);
print «fluxbb n »
#  if($data =~ /viewtopic.php?id=d+/i or
if ( $data =~ /<a[^>]+href=»http://(?:www.)fluxbb.org/?»[^>]*>FluxBB/i ) ;
print «exbb n »
if ( $data =~ /<a[^>]+href=»[^»]*http://(?:www.)?exbb.org/?»[^>]*>ExBB/i ) ; # or
#     $data =~ /forums.php?[^'»]*forum=d+/i);
print «yabb n »
if ( $data =~ /<a[^>]+href=»[^»]*http://(?:www.)?yabbforum.com/?»[^>]*>YaBB/i or
$data =~ /YaBB.pl?[^'»]*num=d+/i ) ;
print «dleforum n »
if ( $data =~ /(Powered By DLE Forum)</title>/i or
$data =~ /<a[^>]+href=»[^»]+(?:http://(?:www.)?dle-files.ru|act=copyright)[^»]*»>DLE Forum</a>/i ) ;
print «ikonboard n »
if ( $data =~ /<a[^>]+href=»[^»]*http://(?:www.)?ikonboard.com/?[^»]*»[^>]*>Ikonboard/i or
$data =~ /<meta name=»GENERATOR» content=»Ikonboard/i or
$data =~ /ikonboard.cgi/i ) ;
print «bbpress n »
if ( $data =~ /<meta name=»generator» content=»bbPress/i ) ; # or
#     $data =~ /topic.php?id=d+/i or
#     $data =~ /forum.php?id=d+/i);
print «flashbb n »
#  if($data =~ /forums.php?fid=d+/i or
#     $data =~ /topic.php?fid=d+/i or
if ( $data =~ /<a[^>]+href=»http://(?:www.)?flashbb.net/?»[^>]*>FlashBB/i ) ;
print «stokesit n »
#  if($data =~ /forum.php?f=d+/i or
if ( $data =~ /<a[^>]+href=»http://(?:www.)?stokesit.com.au/?»[^>]*>[^/]*Stokes IT/i ) ;
print «podium n »
#  if($data =~ /topic.php?t=d+/i or
if ( $data =~ /<a[^>]+href=[‘»]?http://(?:www.)?sopebox.com/?[‘»]?[^>]*>Podium/i ) ;
print «usebb n »
#  if($data =~ /forum.php?id=d+/i or
if ( $data =~ /<a[^>]+href=»http://(?:www.)?usebb.net/?»[^>]*>UseBB/i ) ;
print «wrforum n »
#  if($data =~ /index.php?fid=d+/i or
if ( $data =~ /<a[^>]+href=»http://(?:www.)?wr-script.ru/?»[^>]*>WR-Forum/i ) ;
print «yetanotherforumnet n »
if ( $data =~ /Yet Another Forum.net/i or
$data =~ /default.aspx?g=posts&t=d+/i ) ;

Этот и другие скрипты, упомянутые в посте, вы найдете в этом архиве .

Скрипт which-forum.pl изучает код html-страницы на предмет наличия в нем сигнатур форумного движка. Аналогичный прием мы использовали при определении WordPress и Joomla , но есть пара отличий. Во-первых, сам скрипт не загружает код страницы, а читает его из stdin или файла, переданного в качестве аргумента. Это позволяет загрузить страницу один раз, к примеру, с помощью wget, а затем прогнать ее через несколько анализаторов, если у нас их не один. Во-вторых, в данном скрипте наличие сигнатуры является 100% признаком движка. В прошлый раз наличие сигнатуры лишь придавало веса соответствующему движку и «выигрывал» движок с наибольшим весом. Я решил, что в данном случае такой подход лишь напрасно усложнит код.

Чтобы протестировать работу скрипта, я провел небольшое исследование. Я составил список из нескольких тысяч форумов и прогнал каждый из них через свой скрипт, определив тем самым процент срабатываний программы и популярность различных движков.

Для получения списка форумов я воспользовался своим парсером Google . Поисковой системе посылались запросы типа

site:forum.*.ru
site:talk.*.ru
site:board.*.ru
site:smf.*.ru
site:phpbb.*.ru
….

и так далее. Полный код генератора запросов вы найдете в файле gen-forumsearch-urls.pl . Помимо зоны .ru также использовались .su .ua .kz и .by. В прошлый раз провести такое исследование было затруднительно, поскольку сайты на WordPress и Joomla не имеют подобных сигнатур в URL. Каталоги типа cmsmagazine.ru/catalogue/ не обеспечивают достаточного объема выборки. Что такое 600 сайтов на Drupal?

Надо признать, результаты эксперимента меня огорчили. Из 12590 исследуемых сайтов только на 7083 движок был определен успешно, то есть лишь в 56% случаев. Может быть, я не учел какой-нибудь движок? Неужто на половине форумов стоял Bitrix? Или мне стояло больше времени уделить поиску сигнатур? В общем, тут требуются дополнительные исследования.

Среди 56% успешно опознанных движков самыми популярными, как и следовало ожидать, оказались IPB (31%), phpBB (26,6%) и vBulletin (26,5%)

За ними с большим отставанием следуют SMF (5,8%) и DLEForum (5,3%). Мой любимый punBB оказался лишь на 6-м месте (1,64%). Я не советовал бы сильно доверять этим цифрам (мол, каждый третий форум в рунете работает на IPB), но определенные выводы сделать, конечно, можно.

Например, если вы намерены делать сайт на форумном движке и планируете модифицировать форум, скажем, платить пользователям по 0.01$ за каждое сообщение с автоматическим выводом средств раз в неделю, то вам следует выбрать один из трех наиболее популярных движков. Чем популярнее форум, тем больше шансов найти программиста, который хорошо в нем разбирается.

Если же существенных изменений в движке не предвидится, то возможно имеет смысл выбрать не самый популярный движок, например SMF или punBB. Этим вы уменьшите число хакерских атак на свой форум и количество автоматически рассылаемого на нем спама.

Скриптам для поиска/определения форумов также можно найти не одно практическое применение. Первое, что пришло лично мне в голову — это отсортировать по тИЦ опознанные форумы и разместить на первой сотне посты с ссылками на один из своих сайтов. Однако сотня форумных dofolllow-ссылок никак не повлияла на тИЦ (прошло 2 апдейта), так что лучше не тратить тут время, если только вас не интересуют переходы.

Понятно, что названное применение скриптов далеко не единственное. Думаю, вы легко придумаете, как еще можно их использовать.

admin

Share
Published by
admin
Tags: Perl

Recent Posts

Apple: история логотипа

Как менялся логотип Apple на протяжении многих лет. Логотип Apple — это не просто символ,…

6 дней ago

Security Boot Fail при загрузке Acer — решение проблемы

Security Boot Fail при загрузке Acer — решение проблемы При загрузке ноутбука Acer с флешки,…

3 недели ago

Ноутбук не включается — варианты решения

Ноутбук не включается — варианты решения Если при попытке включить ноутбук вы обнаруживаете, что он…

3 недели ago

The AC power adapter wattage and type cannot be determined — причины и решение

The AC power adapter wattage and type cannot be determined — причины и решение При…

3 недели ago

Свистит или звенит блок питания компьютера — причины и решения

Свистит или звенит блок питания компьютера — причины и решения Некоторые владельцы ПК могут обратить…

3 недели ago

Мигает Caps Lock на ноутбуке HP — почему и что делать?

Мигает Caps Lock на ноутбуке HP — почему и что делать? При включении ноутбука HP…

3 недели ago