1. Вы находитесь в архивной версии форума xaker.name. Здесь собраны темы с 2007 по 2012 год, большинство инструкций и мануалов уже неактуальны.
    Скрыть объявление

Пишем сканер директорий сайта

Тема в разделе "Pascal/Delphi", создана пользователем CraftR14, 29 авг 2010.

  1. CraftR14

    CraftR14 Новичок

    Регистрация:
    4 апр 2010
    Сообщения:
    38
    Симпатии:
    23
    Баллы:
    0
    И так, для этого нам понадобится Delphi (у меня 7-ая) и Indy ( у меня 10-ая ).
    Приступим.
    Загружать список дир мы будем в Memo1 для этого кинем ее на форму.
    А отображать результаты в TreeView'е потому как он удобен( может кто то не согласиться но это все таки мое мнение :) )
    Кинем на форму собственно TreeView1 и Edit куда будем вбивать название сайта, а так же кнопочку Button.
    И так начинаем сканирование сайта :)
    В мемо я сразу же загрузил списочек не большой .
    Код:
    add/
    addnews/
    adm/
    adm2/
    admin.asp
    admin.cfg
    admin.dat
    admin.html
    admin.inc
    admin.php
    admin.pw
    admin/
    admin_.php
    admin_area/
    admin_files/
    admin1.asp
    admin1.html
    admin1.php
    admin1/
    admin2.asp
    admin2.html
    admin2.php
    admin4_account/
    admin4_colon/
    admincontrol.asp
    admincontrol.html
    admincontrol.php
    admincp/
    administer/
    administr8.asp
    administr8.html
    administr8.php
    administr8/
    administratie/
    administration.html
    administration.php
    administration/
    administrator.asp
    administrator.html
    administrator.php
    administrator/
    administratoraccounts/
    administrators/
    administrivia/
    adminka.php
    adminpanel.asp
    adminpanel.html
    adminpanel.php
    adminpro/
    admins.asp
    admins.html
    admins.php
    admins/
    AdminTools/
    advanced/
    aggregator/
    ajax/
    alogin.php
    also order_log.dat
    alterra/
    am/
    api/
    app_code/
    apps/
    archive/
    archives/
    article/
    aspnet_client/
    audio/
    auth.php
    author/
    autobackup.php
    autologin/
    avi/
    awald/
    backup.php
    backup.rar
    backup.sql
    backup.txt
    backup/
    bad/
    
    Создадим "глобальные переменные" ( могу не правильно выразиться)) )
    Код:
     
    var
      C200 : TTreeNode;
      C403 : TTreeNode;
      C301 : TTreeNode;
      C401 : TTreeNode;
      C404 : TTreeNode;
      C302 : TTreeNode;
    теперь о процедуре сканирования:
    Код:
    var
    dira:string;//в переменную будем грузить нашу директорию
    resp:string;//здесь будет ответ от сервера
    i:Integer;//ну и как обычно "i" )
    begin
    //Проверим что бы в конце имени сайта стоял слеш / если его там нет то поставим
     if Copy(Form1.Edit1.Text,Length(Form1.Edit1.Text),1)<>'/' then
     Form1.Edit1.Text:=Form1.Edit1.Text+'/';
    //Отрубаем Edit1 что бы с ним не баловались) хотя... можно было просто загрузить в переменную текст Edit'a и не парится)
     Form1.Edit1.Enabled:=true;
    //Создаем корневые точки в TreeView1
     C200:=Form1.TreeView1.Items.AddChild(nil,'200 OK');
    //nil поставил так как нужно создать без родителя
     C403:=Form1.TreeView1.Items.AddChild(nil,'403 Forbidden');
     C301:=Form1.TreeView1.Items.AddChild(nil,'301 Moved Permanently');
     C401:=Form1.TreeView1.Items.AddChild(nil,'401 Unauthorized');
     C404:=Form1.TreeView1.Items.AddChild(nil,'404 Not Found');
     C302:=Form1.TreeView1.Items.AddChild(nil,'302 Found');
    //теперь цикл.
     for i:=0 to Form1.Memo1.Lines.Count-1 do
     begin
     dira:=Form1.Memo1.Lines.Strings[i];//Получаем диру
     if Copy(dira,1,1)='/' then Delete(dira,1,1);//Если первым идет / слеш то удаляем на хрен его) так как получиться что то типа http://site.ru//admin
    //что не есть гуд
    //что бы не вылезли ошибки)
    try
    Form1.idhttp1.Get(Form1.Edit1.Text+dira);//получаем страничку 
    except
    end;
    
    resp:=IntToStr(Form1.idhttp1.ResponseCode);//Получаем код ответа от сервера
    Form1.TreeView1.Items.AddChild(getnode(resp),Form1.Edit1.Text+dira);
    //Добовляем "ребенка" в Treeview1  с текстом сайта + диры 
    //о функции getnode позже не множко)
    end;
    Form1.Edit1.Enabled:=true; //Врубаем edit1
    такс а теперь о мини функции getnode
    Код:
    function getnode(code:string):TTreeNode;
    begin
    if code='200' then result:=C200;
    if code='403' then result:=C403;
    if code='301' then result:=C301;
    if code='401' then result:=C401;
    if code='404' then result:=C404;
    if code='302' then result:=C302;
    //Т.е. даем ей код ответа от сервера, она нам возвращает указатель на TTreeNode что бы потом нам его использовать)
    end;
    Ну вот собственно и все)
    Вот что получилось у меня:
    [​IMG]

    Да и что бы формачка не подвисала закинул все это в поток...

    Кому не понятно вот сорцы:
    http://multi-up.com/327747


    P.S. Сильно не пинайте))
    Если что то не так, попровляйте ;)





    © CraftR14, For CodingWorld.Ru in 2010.
     
    1 человеку нравится это.
  2. Stepler

    Stepler Новичок

    Регистрация:
    26 дек 2011
    Сообщения:
    0
    Симпатии:
    0
    Баллы:
    0
    Как сделать вывод ошибок или гудов в поле ?

    Добавлено через 2 минуты
    Memo1 Или в другое поле к примеру ListBox1?

    Добавлено через 2 минуты
    А так интересная вещь если подработать чутка то почему бы и не юзать займусь этим)
     
    Последнее редактирование: 14 янв 2012

Поделиться этой страницей