PDA

Просмотр полной версии : Скрипт Perl: Узнавалка версии phpBB


DetMyl
25.01.2006, 03:08
Скрипт - который пытается узнать версии phpBB форума.
Он ищет файл CHANGELOG.html откуда теоретически можно прочитать версию установленного форума.
Для упрощения, скрипт ищет в гугле по заданной ему строке и тестит полученные линки, поэтому было бы логично давать ему такие запросы, которые привели бы на форум (напр. "phpbb powered 2001" или "phpBB forum" и т.д. ).

Как параметры скрипту надо строку, которую он искать будет (я когда тестировал, то искал по "phpbb powered 2001", результат интерестен :-) ) и количество страниц google которые он будет обрабатывать (на каждой странице ~10 линков), можно также задать прокси.

Приятного вершн хантинга :-)

#!/usr/bin/perl -w

# phpBB Version Finder
# This script looks for phpBB changelog.html file
# and if such file was found, prints version of
# installed forum.
# It searches on google with given string and
# checks all found links
# 01.2006 by DetMyl, DetMyl@bk.ru

if (@ARGV < 2)
{
print q(
++++++++++++++++++++++++++++++++++++++++++++++++++ +
Usage: perl Vercheck.pl [search str] [how much google pages to CHECK] [proxy (optional)]
i.e. perl Vercheck.pl "Powered by phpBB" 2 127.0.0.1:3128
will test 20 links from sites containing "Powered by phpBB"
++++++++++++++++++++++++++++++++++++++++++++++++++ ++
);
exit;
}
use strict;
use LWP::UserAgent;
use Time::Local;
my $timme=scalar(localtime());


my $search = $ARGV[0];
my $links = $ARGV[1];
my $proxy = $ARGV[2];

my $request;
my $response;
my $sstring;
my $t_url;
my $t_path;
my $count = 0;

my $browser = LWP::UserAgent->new ();
$browser->agent('User-Agent: Opera/8.0 (Windows NT 5.1; U; en)');
if ( defined $proxy)
{
$proxy =~ s/(http:\/\/)//eg;
$browser->proxy("http" , "http://$proxy");
}

print ("\nSession started at $timme\n") ;
if ($proxy) {print "Using proxy $proxy\n";}

print "--------------------------------\n\n";
print "++ Searching for: $search\n";

for (my $i = 0; $i < $links; $i++) # po 10 zaprosov za raz...
{
my $foo = $i*10;
print "\n~~Links $foo till ".($foo + 10)." ~~\n\n";
$request = "http://www.google.com";
$request .= "/search?q=$search&num=10&safe=off&start=$foo";
$response = $browser->get($request);
die "Error: ", $response->status_line
unless $response->is_success;
#nahodim linky
my $temp = $response->content;
M1:
while ($temp =~ /class=g><a class=l href="http:\/\/(.*)\/[\w\d\_\-\?\=\.\/\&\+\%]*"/gi)
{
$t_url=$1;
$t_path="/";
print "--\n";
$request = "http://";
$request .= $t_url;
$request .= $t_path;
print "Testing $request: ";
if (&test($request."docs/CHANGELOG.html")) {print "----\n\n"; next M1;}
if (&test($request."CHANGELOG.html")) {print "----\n\n"; next M1;}
print "Not found\n----\n\n";
}
}



sub test
{
my @browser_like_headers = (
'User-Agent' => 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en)',
'Accept-Language' => 'en',
'Accept' => "text/html, image/jpeg",
);
$response = $browser->get(@_, @browser_like_headers);
unless ($response->is_success)
{
return 0;
}
if ($response->content =~ m/<span class=\"maintitle\">phpBB 2.0.x CHANGELOG<\/span/i)
{
if ($response->content =~ m/<li><a href=\"[\#\d]*\">Changes since ([\d\.]*)<\/a><\/li>/i)
{
print (" version: $1 \n");
return 1;
}
return 0
}
if ($response->content =~ m/<span class=\"maintitle\">phpBB ([\d\.]*) CHANGELOG<\/span/i)
{
print (" version: $1 \n");
return 1;
}
return 0;
}


П.С. Я не очень бы доверял файлу CHANGELOG.html ;-)
Но надеюсь скрипт окажется полезен.

null_access
13.02.2006, 14:32
У меня не пашет скрипт.(
У кого-нить работает??

k1b0rg
13.02.2006, 14:44
когда я писал такой же узнавальщик версий на php, из этого же файла CHANGELOG.html

там ведь он имеет такой вид
phpBB 2.0.x CHANGELOG
Changelog
Changes since 2.0.16
Changes since 2.0.15


т.е. если последняя надпись 2.0.16 то стоит значит 2.0.17

Но когда я его написал, обнаружилось что на 1/20 сайтов присутствовал этот файл CHANGELOG.html, на остальных его не было, вот так вот

DetMyl
13.02.2006, 23:34
т.е. если последняя надпись 2.0.16 то стоит значит 2.0.17Но когда я его написал, обнаружилось что на 1/20 сайтов присутствовал этот файл CHANGELOG.html, на остальных его не было, вот так вот

Ага, но я это обрабатываю в скрипте и выдаю нормальную версию:)

2 nul_access: Он может не пахать, если гугл немного ответ измени, поковыряйся в скрипте, там немного исправлять :)

NeMiNeM
14.02.2006, 00:48
Не на всех форумах есть файл changelog, даже если есть то не всегда ему можно верить... вот например мне недавно попался форум в ченджлоге написано было что последние обновление было версия 2.0.5)) На самом деле - 2.0.18 стоял..
Но молодец что старался и написал)