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

Discussion in 'PHP' started by DetMyl, 25 Jan 2006.

  1. DetMyl

    DetMyl Люминевый самолет

    Joined:
    17 Dec 2005
    Messages:
    109
    Likes Received:
    75
    Reputations:
    70
    Скрипт - который пытается узнать версии 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, [email protected]

    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 ;-)
    Но надеюсь скрипт окажется полезен.
     
    1 person likes this.
  2. null_access

    null_access Elder - Старейшина

    Joined:
    31 Jan 2005
    Messages:
    128
    Likes Received:
    6
    Reputations:
    0
    У меня не пашет скрипт.(
    У кого-нить работает??
     
  3. k1b0rg

    k1b0rg Тут может быть ваша реклама.

    Joined:
    30 Jul 2005
    Messages:
    1,182
    Likes Received:
    399
    Reputations:
    479
    когда я писал такой же узнавальщик версий на php, из этого же файла CHANGELOG.html

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

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

    DetMyl Люминевый самолет

    Joined:
    17 Dec 2005
    Messages:
    109
    Likes Received:
    75
    Reputations:
    70
    Ага, но я это обрабатываю в скрипте и выдаю нормальную версию:)

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

    NeMiNeM Elder - Старейшина

    Joined:
    22 Aug 2005
    Messages:
    480
    Likes Received:
    310
    Reputations:
    201
    Не на всех форумах есть файл changelog, даже если есть то не всегда ему можно верить... вот например мне недавно попался форум в ченджлоге написано было что последние обновление было версия 2.0.5)) На самом деле - 2.0.18 стоял..
    Но молодец что старался и написал)