Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Скрипт Perl: Узнавалка версии phpBB (https://forum.antichat.xyz/showthread.php?t=13441)

DetMyl 25.01.2006 03:08

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

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

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

PHP код:

#!/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(
 +++++++++++++++++++++++++++++++++++++++++++++++++++
 
Usageperl Vercheck.pl [search str] [how much google pages to CHECK] [proxy (optional)] 
 
i.eperl 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><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: $\n");
              return 1;
          }
         return 0
      }
     if (
$response->content =~ m/<span class=\"maintitle\">phpBB ([\d\.]*) CHANGELOG<\/span/i)
      {
              print (" 
version: $\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

Цитата:

Сообщение от k1b0rg
т.е. если последняя надпись 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 стоял..
Но молодец что старался и написал)


Время: 11:43