FTP Accounts Parser

Discussion in 'PHP' started by [QwyZ], 18 Jul 2009.

  1. [QwyZ]

    [QwyZ] Banned

    Joined:
    7 Jul 2009
    Messages:
    71
    Likes Received:
    27
    Reputations:
    5
    FTP Account Parser

    Дарова всем.Вот скачал тут из раздела халява сборник фтп сервов и мне пришла идея написать маленкий парсер.Маленький да удаленький.Значит осн.возможности:
    1)ищет красивенкие домены типа blabla.com а не всякие типа blabla.narod.ru
    2)можно поставить фильтр длины домена
    3)можно также поискать какое то слово в доменах
    4)можно также искать во всех субдоменах,не только в "красивенких"
    5)можно сохранить все в файл на сервере
    6)выделяет домен одним цветом,акк другим + искомую фразу тосже выделяет
    7)делает удобные линки на фтп
    8)более подробный мануальчик в скрипте


    [+] дабавил по вашим просьбам валидатор,теперь,при установке флага valid на 1 (&valid=1),он будет проверять каждый server. Oфф сервера несохраняются,а в онлайн логе это выводится красным квадратом слева.очень удобно.
    [+] теперь также при режиме валидатора будет показано все содержимое сервака.(javascript:alert)
    [+] добавил наконец нормальный интерфейс.
    [+] показывает справа все логи,отпарсенные ранее.
    [+]в конце парсинга выдает также доменные зоны первого уровня,которые встречались.


    Screeshot:
    http://qwyz.freehostia.com/screen.png
    _____________________________________
    http://qwyz.freehostia.com/FTP_Parser.zip
    _____________________________________
     
    #1 [QwyZ], 18 Jul 2009
    Last edited: 30 Jul 2009
    2 people like this.
  2. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    ТС, зачем темы дублировать? http://forum.antichat.ru/thread130318.html

    Я пост свой тоже сюда скопирую, даже добавлю кое-что...

    1. Есть такие функции - isset, error_reporting, ты про них не знаешь?
    2. Никогда не пробовал делать код читабелным, не? Читабельный:
    PHP:
    <html><body bgcolor=black>
    <style>
    a
    {
    text-decoration:none;
    }
    </style><font color=dcdcdc size=-1 face=verdana>FTP Parser 1.0 By [QwyZ] (for antichat.ru and seclab.ru)<br>
    <br>
    Variables: www.your.host.com/parser.php?<font color=orange>z</font>=com&amp;<font color=orange>m</font>=14&amp;<font color=orange>base</font>=ftps.txt&amp;<font color=orange>all</font>=0&amp;<font color=orange>save</font>=yes&amp;<font color=orange>word</font>=freehostia.com<br><br>
    $z = domain zone (ex. &z=com),for all zones use * (&z=*)<br>
    $m = maxlength of domain name (ex. &m=14),for all domains use * (&m=*)<br>
    $base = ftp database (ex. &base=file.txt),bases must to be in "/bases" folder<br>
    $all = searching at subdomains too (ex. &all=1,&all=0)<br>
    $save = saving/not saving results to "/queries" folder (ex. &save=yes,&save=no)<br>
    $word = search word (ex. &word=freehostia.com)<br><font color=blue>___________________________________________________________________</font><br><br>
    <?php

    //vars
    $zone $_GET['z'];
    $maxl $_GET['m'];
    $i $_GET['base'];
    $all $_GET['all'];
    $save $_GET['save'];
    $sw $_GET['word'];
    //vars

    if ($save == "yes")
    {
        
    $saveTo fopen("./queries/" $zone "." $maxl "." $i "." $all "." .
            
    $sw ".txt""w+");
        
    fclose($saveTo);
    }
    function 
    check_ftps($i$zone$maxl$all$save$sw)
    {
        
    $current_base file("./bases/" $i);
        
    $k 0;
        for (
    $k 0$k count($current_base); $k++)
        {
            
    $current_ftp $current_base[$k];
            if (
    substr_count($current_ftp"@") == 1)
            {
                
    $current_ftp explode("@"$current_ftp);
                
    $current_ftp $current_ftp[1];
                if ((
    substr_count($current_ftp".") == 1) || ($all == "1"))
                {
                    if ((
    strlen($current_ftp) <= $maxl) || ($maxl == "*"))
                    {
                        if ((
    strstr($current_ftp$sw)) || ($sw == "*"))
                        {
                            
    $suba explode("."$current_ftp);
                            
    $suba $suba[count($suba) - 1];
                            
    $suba substr($suba0, (strlen($suba) - 2));
                            if ((
    $suba == $zone) || ($zone == "*"))
                            {
                                if (
    substr($current_base[$k], 06) == "ftp://")
                                {
                                } else
                                {
                                    
    $current_base[$k] = "ftp://" $current_base[$k];
                                }
                                
    $account explode("@"$current_base[$k]);
                                
    $lp $account[0] . "@";
                                
    $button substr($account[1], 0strlen($account[1]) - 2);
                                
    $dom "<font color=orange>" $account[1] . "</font><br>";
                                
    $dom str_replace($sw"<b><font color=yellow>" $sw "</font></b>"$dom);
                                echo (
    "<input type=button value=\"Open\" onclick='location.href=\"" $lp $button .
                                    
    "\"'>&nbsp;&nbsp;" $lp $dom);
                                if (
    $save == "yes")
                                {
                                    
    $add fopen("./queries/" $zone "." $maxl "." $i "." $all "." .
                                        
    $sw ".txt""a+");
                                    
    fputs($add$current_base[$k]);
                                    
    fclose($add);
                                }
                            }
                        }
                    }
                }
            }
        }
    }

    //call function
    check_ftps($i$zone$maxl$all$save$sw);
    //call function


    ?></font>
    </body>
    </html>
    Нечитабельный (твой):
    PHP:
    <html><body bgcolor=black>
    <style>
    a
    {
    text-decoration:none;
    }
    </style><font color=dcdcdc size=-1 face=verdana>FTP Parser 1.0 By [QwyZ] (for antichat.ru and seclab.ru)<br>
    <br>
    Variables: www.your.host.com/parser.php?<font color=orange>z</font>=com&amp;<font color=orange>m</font>=14&amp;<font color=orange>base</font>=ftps.txt&amp;<font color=orange>all</font>=0&amp;<font color=orange>save</font>=yes&amp;<font color=orange>word</font>=freehostia.com<br><br>
    $z = domain zone (ex. &z=com),for all zones use * (&z=*)<br>
    $m = maxlength of domain name (ex. &m=14),for all domains use * (&m=*)<br>
    $base = ftp database (ex. &base=file.txt),bases must to be in "/bases" folder<br>
    $all = searching at subdomains too (ex. &all=1,&all=0)<br>
    $save = saving/not saving results to "/queries" folder (ex. &save=yes,&save=no)<br>
    $word = search word (ex. &word=freehostia.com)<br><font color=blue>___________________________________________________________________</font><br><br>
    <?php
    //vars
    $zone=$_GET['z'];
    $maxl=$_GET['m'];
    $i=$_GET['base'];
    $all=$_GET['all'];
    $save=$_GET['save'];
    $sw=$_GET['word'];
    //vars

    if ($save=="yes"){
    $saveTo=fopen("./queries/" $zone "." $maxl "." $i "." $all "." $sw ".txt","w+");
    fclose($saveTo);}
    function 
    check_ftps($i,$zone,$maxl,$all,$save,$sw)
    {
     
    $current_base=file("./bases/" $i);
     
    $k=0;
     for(
    $k=0;$k<count($current_base);$k++)
     {
      
    $current_ftp=$current_base[$k];
      if (
    substr_count($current_ftp,"@")==1)
      {
      
    $current_ftp=explode("@",$current_ftp);
      
    $current_ftp=$current_ftp[1];
      if ((
    substr_count($current_ftp,".")==1) || ($all=="1"))
      {
      if ((
    strlen($current_ftp)<=$maxl) || ($maxl=="*"))
      {
      if ((
    strstr($current_ftp,$sw)) || ($sw=="*")){
      
    $suba=explode(".",$current_ftp);
      
    $suba=$suba[count($suba)-1];
      
    $suba=substr($suba,0,(strlen($suba)-2));
      if ((
    $suba==$zone) || ($zone=="*"))
      {
      if (
    substr($current_base[$k],0,6)=="ftp://"){}else
      {
    $current_base[$k]="ftp://" $current_base[$k];}
      
    $account=explode("@",$current_base[$k]);
      
    $lp=$account[0] . "@";
      
    $button=substr($account[1],0,strlen($account[1])-2);
      
    $dom="<font color=orange>" $account[1] . "</font><br>";
      
    $dom=str_replace($sw,"<b><font color=yellow>" $sw "</font></b>",$dom);
      echo(
    "<input type=button value=\"Open\" onclick='location.href=\"" $lp $button "\"'>&nbsp;&nbsp;" $lp $dom);
      if (
    $save=="yes"){
      
    $add=fopen("./queries/" $zone "." $maxl "." $i "." $all "." $sw ".txt","a+");
      
    fputs($add,$current_base[$k]);
      
    fclose($add);}
    }}}}}}
    }

    //call function
    check_ftps($i,$zone,$maxl,$all,$save,$sw);
    //call function
    ?></font>
    </body>
    </html>
    3. Функции работы со строками - прошлый век. Сейчас есть регулярки.
    4. Про формы не читал никогда?
    5. В коде есть строчки вида
    PHP:
    if(условие)
    {
    #xD кода нету... обычные фигурные скобки
    } else 

    #code 
    }
    6. Используй switch-case вместо if.
     
    #2 mailbrush, 18 Jul 2009
    Last edited: 18 Jul 2009
  3. [QwyZ]

    [QwyZ] Banned

    Joined:
    7 Jul 2009
    Messages:
    71
    Likes Received:
    27
    Reputations:
    5
    блин я вообщето консультации непросил.как надо будет спрошу,а если ненравится дак я вроде тебя неаставлял его юзать.извини конечно,но твои комментарии излишни.
     
  4. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    Разве это консультация?
    Это обычный анализ быдлокода :)
     
  5. LEE_ROY

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

    Joined:
    9 Nov 2006
    Messages:
    450
    Likes Received:
    188
    Reputations:
    26
    >>3. Функции работы со строками - прошлый век. Сейчас есть регулярки.
    неправда, регеспы медленнее функций работы со строками, и если есть возможность решить проблему с помощью доступных функций, регулярки не используют..
     
  6. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    Медленнее, но удобнее.
     
  7. inlanger

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

    Joined:
    7 Jan 2007
    Messages:
    985
    Likes Received:
    283
    Reputations:
    27
    Нифига не удобнее. Чем сидеть и задрачивать регулярки, лучше использовать готовое решение, которое 100% будет работать.
     
  8. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    А с чего ты взял, что регулярки не будут работать? Мне, например, регулярки намного удобнее...
     
  9. Martyr

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

    Joined:
    29 Jun 2008
    Messages:
    33
    Likes Received:
    7
    Reputations:
    0
    По поводу регулярок приведу цитату:«Если у вас есть проблема, и вы решили с ней разобраться с помощью регулярок, то теперь у вас две проблемы».
    Насчет выложенного кода :
    1.Бросилось в глаза огромная вложенность if..else конструкций.
    2.Все сделано в 1 функции поэтому последуещее дополнение и улучшение скрипта станет проблематичным.
    Хотя в принципе [QwyZ] молодец, неплохая идея.
     
  10. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,174
    Likes Received:
    1,157
    Reputations:
    202
    mailbrush,
    Несоглашусь в некоторых моментах:
    error_reporting - для тех кто неумеет правильно оформлять код, если нотайсы, значит у вас не предопределены переменные как ето бывает в 90%, а от Варнингов и Фатал ерроров спасаются решением проблеммы а не отключением отображения ошибок.

    Тоже не согласен, мне самому удобнее регулярками пользоваться но ето не грамотно с точки зрения программирования.

    И вот момент, несовсем правильный:
    PHP:
    if(условие

    #xD кода нету... обычные фигурные скобки 
    } else  
    {  
    #code  
    Зачем прибегать к такой конструкции если можно сделать все наоборот:
    Немного не в том направлении работает ТС, ети все функции не актуальны, лучше поработать над nxfntkmyjq сортировкой фтп, к примеру бэды писать в отдельный файл, для дальнейшего анализа, возможно там неправильно записаны фтп, тоесть без префикса ftp:// и тд. Выявлять все фри хосты, анонимные, гостевые, паблик фтп. Вообщем очистить лист от хлама, разделать на доменные зоны - ru, com, org ....
    Когда работаеш с листом фтп >100k то красивая ссылка и подсветка домена нахрен не нужна, тогда бальше озадачен тем как отсеять паблик хлам.
     
  11. scrat

    scrat кодер

    Joined:
    8 Apr 2007
    Messages:
    625
    Likes Received:
    541
    Reputations:
    3
    я тут просто оставлю эту ссылочку, ок?
     
  12. PaCo

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

    Joined:
    6 Feb 2008
    Messages:
    436
    Likes Received:
    138
    Reputations:
    25
    А вам что то говорит такое понятие - один интерфейс, множество реализаций(пускай это и не совсем обьект)? Если в функции не лепить куски тугово как пластилин говнокода то по моему глубокому имхо "последуещее дополнение и улучшение" ни разу не станет проблематичным.
     
  13. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    Ну это если он про isset не знает...
    Пускай, но это удобнее мне и тебе:)
    Вот я об этом и говорил... Это у него в коде так:)
    Верное решение...
     
  14. Martyr

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

    Joined:
    29 Jun 2008
    Messages:
    33
    Likes Received:
    7
    Reputations:
    0
    Ну и причем здесь полиморфизм?Если мы имеем дело с одной функцией.Я писал о таком методе рефракторинга, как группировка кода в отдельную функцию.
    Смотря что вы понимаете под "куски тугово как пластилин говнокода".
     
  15. [QwyZ]

    [QwyZ] Banned

    Joined:
    7 Jul 2009
    Messages:
    71
    Likes Received:
    27
    Reputations:
    5
    значит нужна вам еще и валидатор добавитb и шоб сразу на доменные зоны итд.?ок,покодю и во второи версии все это добавлю.спасибо за критику итд,хоть в ней ненуждался.кстати меня немного повеселило настойчивое повторение от майлбраша,что я незнаю что такое функция иссет...:D
     
  16. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    Если знаешь - зачем не использовать? На крайняк - юзай еррор_репортинг.
     
  17. PaCo

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

    Joined:
    6 Feb 2008
    Messages:
    436
    Likes Received:
    138
    Reputations:
    25
    Если вам необходимо сделать 1 операцию но вместо нее вы делаете 5(вот это как раз я и понимаю тугим как пластилин говнокодом) и потом что бы повысить читаемость вы начинаете вместо того что бы оптимизировать код заниматься " рефракторинга, как группировка кода" - создавать для нее например отдельный метод, или еще мне очень нравиться создают метод с новым именем и все что в нем делают - это вызывают другой метод(имя новое читаемость повышаеться по их соображениям) - то это имхо - вершина говнокода.
    Насчет полиморфизма - ну не знаю может интенсиональный контекст и т.д. но насколько я вас понял то вы утверждаете что использование функуции несет за собой проблематичность с дальнейшим добавлением кода и изменениям в его работе, но очень часто результат работы функции нужно обработать по разному - кто мешает вам использывать базисную функция - а результаты ее работы использовать в других функциях не копашась в коде основной? Конечно же разделения кода на законченые функциональные блоки повышает процесс нахождения ошибок и тестирования кода с этим никто не спорит.
     
    #17 PaCo, 19 Jul 2009
    Last edited: 19 Jul 2009
  18. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    Такие вещи пишутся на компилируемых языках...
     
  19. [QwyZ]

    [QwyZ] Banned

    Joined:
    7 Jul 2009
    Messages:
    71
    Likes Received:
    27
    Reputations:
    5
    smotrim update parsera
     
    #19 [QwyZ], 28 Jul 2009
    Last edited: 28 Jul 2009
  20. [QwyZ]

    [QwyZ] Banned

    Joined:
    7 Jul 2009
    Messages:
    71
    Likes Received:
    27
    Reputations:
    5
    up up,updated