С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
mabzZ
5 / 1 / 1
Регистрация: 28.03.2013
Сообщений: 13
#1

Мини-брутфорс - C++

29.07.2013, 21:20. Просмотров 1979. Ответов 18
Метки нет (Все метки)

Задан паттерн XXyyX, где Х может принимать следующие значения: D,J,K,L,L,X,Z, а Y - f,n,s.

Необходимо найти все возможные комбинации, при этом символы не должны повторяться, кроме L, так как он встречается два раза. Одна из этих комбинаций валидна и ссылка вида http://www.steamgifts.com/giveaway/+Валидная_комбинация должна привести на существующую страницу, если комбинация невалидна, то открывается страница, с указанием, что код неверен.

Я решил задачу, считывая полностью исходный код страницы и ища вхождение "Invalid" внутри него. Если строка отсутствует, то комбинация оказалась верной и в поле Edit1 возвращается итоговая ссылка.

Вопрос вот в чем: как обойтись без считывания всего исходного код страницы? Нельзя ли считать отдельно ТОЛЬКО заголовок страницы или определенные теги? Меня в принципе работа написанной мной программы устраивает, но хотелось бы все-таки довести до ума, так как постоянная подгрузка всего кода страницы при достаточно большом числе итераций - довольно серьезная затрата времени.

И да, если общий подход к решению или отрывок из программы этой задачи на ваш взгляд глуп или нерационален - обязательно сообщите мне! Так как я пока учусь, то хотелось бы знать наиболее оптимальные методы, а не те, которые кое-как, но работают. Но опять же по причине недостаточных знаний реализация такая, какая есть

Warning! Bydlo-code Inside!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
//---------------------------------------------------------------------------
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StartClick(TObject *Sender)
{
    int position,
        count=0;
    AnsiString searchText="Invalid",      //Искомая строка
               str="",
               mas1[7]={'D','J','K','L','L','X','Z'},
               mas2[3]={'f','n','s'};
    TStringList *sl,
                *s2;
 
    sl=new TStringList();
    s2=new TStringList();
 
    //------------------------------------------------------------------------
        for (int i = 0; i < 7; i++)
        {
            for (int j = 0; j < 7; j++)
            {
                for (int k = 0; k < 7; k++)
                {
                    for(int l = 0; l < 3; l++)
                    {
                        for (int m = 0; m < 3; m++)
                        {
                            if ((mas2[l]!=mas2[m]) &&
                            ((mas1[i]!=mas1[j]) || ((mas1[i]=='L') && mas1[j]=='L')) &&
                            ((mas1[i]!=mas1[k]) || ((mas1[i]=='L') && mas1[k]=='L')) &&
                            ((mas1[k]!=mas1[j]) || ((mas1[k]=='L') && mas1[j]=='L')))
                            {
                                str="http://www.steamgifts.com/giveaway/"+mas1[i]+mas1[j]+mas2[l]+mas2[m]+mas1[k];
                                //Запрос кода страницы и поиск в ней вхождения строки searchText="Invalid"
                                position=AnsiPos(searchText,IdHTTP1->Get(str));
                                // Дисконнект после каждого запроса для избежания Connection Closed Gracefully
                                IdHTTP1->Disconnect();
                                if (position==0)
                                {
                                    count++;
                                    Edit1->Text=str;
                                    s2->Add(str);
                                    s2->SaveToFile("good.txt");
                                    goto mark;
                                }
                                sl->Add(str);
                            }
                        }
                    }
                }
            }
        }
        mark:
        sl->SaveToFile("text.txt");
        delete sl;
        delete s2;
}
//---------------------------------------------------------------------------
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2013, 21:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Мини-брутфорс (C++):

Брутфорс WPA2 - C++
По-пьяни поменял пароль от wi-fi, гуглил, или посылает на Linux-системы, либо на CommView и Aircrack-ng. Сетевой адаптер не тащит эти...

Брутфорс (brute force) - C++
Мне нужно получить все возможные комбинации 4 чисел. Сумма чисел должна быть ровна 1. Тоесть нужно следующее: 0 0 0 1 0 0 ...

Мини-игра - C++
Здравствуйте уважаемые гуру ООП. Нужна небольшая консультация\помощь в предложенном ниже коде. Итак суть: мне надо каким-нибудь способом...

Мини-программа - C++
#include &lt;iostream&gt; using namespace std; int chnch(int); int main() { int a; cin &gt;&gt; a; cout &lt;&lt; chnch(a); ...

мини- программы - C++
Кто может хоть что-небудь решить, решите пожалуйста. Понимаю что задания элементарные, но до завтра сам сделать не успею... а завтра экзамн...

Модифицируйте мини калькулятор - C++
Обьясните, как сделать из обычного калькулятора такой, чтобы на входе он принимал и цифры и строки (например seven+seven = 14) и.т.п. ...

18
Avazart
Эксперт С++
7262 / 5434 / 304
Регистрация: 10.12.2010
Сообщений: 24,158
Записей в блоге: 17
30.07.2013, 02:24 #2
Цитата Сообщение от mabzZ Посмотреть сообщение
Вопрос вот в чем: как обойтись без считывания всего исходного код страницы? Нельзя ли считать отдельно ТОЛЬКО заголовок страницы или определенные теги? Меня в принципе работа написанной мной программы устраивает, но хотелось бы все-таки довести до ума, так как постоянная подгрузка всего кода страницы при достаточно большом числе итераций - довольно серьезная затрата времени.
Используй Head- запрос, и смотри код ответа сервера

http://www.cyberforum.ru/blogs/131347/blog608.html#a_1.3
https://ru.wikipedia.org/wiki/HTTP#HEAD

Насчет подбора - где- то была тема на форуме с перебор с помощью булеана...
1
mabzZ
5 / 1 / 1
Регистрация: 28.03.2013
Сообщений: 13
30.07.2013, 03:02  [ТС] #3
Avazart, самое интересное, что тему просматривал, - оттуда про способ избежания Connection Gracefully Closed как раз и вычитал, но про Head не нашел, видимо, недостаточно внимательно читал

Добавлено через 34 минуты
Avazart,
В продолжение темы: код ответа всегда один - "HTTP/1.1 200 OK", что неудивительно, так как при неверной комбинации выдается не несуществующая страница, а лишь страница с сообщением, что код неверен, а потому проверка на существование немного не подходит. Под заголовком я имел ввиду тег <title>. Можно ли его подгрузить отдельно, не загружая весь html-документ? Быстрый гугло-поиск и переход по ссылкам в разделе литературы мне ничего не дал.
0
Avazart
Эксперт С++
7262 / 5434 / 304
Регистрация: 10.12.2010
Сообщений: 24,158
Записей в блоге: 17
30.07.2013, 03:04 #4
По идее должно быть 404 http://ru.wikipedia.org/wiki/HTTP_404
1
mabzZ
5 / 1 / 1
Регистрация: 28.03.2013
Сообщений: 13
30.07.2013, 03:13  [ТС] #5
Avazart,
Да нет, страница существует. К примеру, тут страница, которая отображается, если подобранная комбинация невалидна. Эта страница является примером того, как должна выглядеть страница с валидной комбинацией. Можно заметить, что у любой невалидной тайтл всегда один, опираясь на это я и хотел сделать чекер валидности\невалидности.

Добавлено через 3 минуты
Первоначальная идея заключалась в поиске в теле страницы "Invalid", но это требует подгрузки всей страницы. Мне бы хотелось подгружать только тег <title> для экономии времени, существует ли такая возможность в принципе?
0
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
30.07.2013, 03:31 #6
Цитата Сообщение от mabzZ Посмотреть сообщение
В продолжение темы: код ответа всегда один - "HTTP/1.1 200 OK", что неудивительно, так как при неверной комбинации выдается не несуществующая страница, а лишь страница с сообщением, что код неверен, а потому проверка на существование немного не подходит.
Подходит, просто если выдается другая страница, то значит код переадресации должен быть это или 301 или 302 я точно не помню.
1
mabzZ
5 / 1 / 1
Регистрация: 28.03.2013
Сообщений: 13
30.07.2013, 03:34  [ТС] #7
ninja2,
Так там редиректа не происходит. Это обычная страница, но в теле этой страницы уже пишется, что ошибка. Сама же страница фактически ничем не отличается от валидной.
0
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
30.07.2013, 03:37 #8
Ну ладно мб оно просто сразу код проверяет и на этой же странице выводит сообщение без переадресации на страницу с сообщением, тогда 200 Ок, призабыл просто.

Добавлено через 2 минуты
Да наверно на скорость это не повлияет хоть ты будешь проверять содержание, хоть по коду. В любом случае ты делаешь запрос, сервер обработал и потом прислал токо ответ. Так что тут пофигу скорость будет одна и таже.
1
Avazart
Эксперт С++
7262 / 5434 / 304
Регистрация: 10.12.2010
Сообщений: 24,158
Записей в блоге: 17
30.07.2013, 03:40 #9
Выложите сырую ссылку без тегов
1
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
30.07.2013, 03:45 #10
Цитата Сообщение от mabzZ Посмотреть сообщение
Вопрос вот в чем: как обойтись без считывания всего исходного код страницы? Нельзя ли считать отдельно ТОЛЬКО заголовок страницы или определенные теги? Меня в принципе работа написанной мной программы устраивает, но хотелось бы все-таки довести до ума, так как постоянная подгрузка всего кода страницы при достаточно большом числе итераций - довольно серьезная затрата времени.
Я тебе отвечу на этот вопрос, нельзя, токо полностью будешь считывать, тут без вариантов. Это я тебе говорю как знаток HTTP протокола.

У меня комп 6 из 36 перебирает минуты 2-3, а если с подгрузкой, то это очень долго.
1
Avazart
Эксперт С++
7262 / 5434 / 304
Регистрация: 10.12.2010
Сообщений: 24,158
Записей в блоге: 17
30.07.2013, 03:45 #11
Для ускорения gzip можно использовать и и развести по потокам.
1
mabzZ
5 / 1 / 1
Регистрация: 28.03.2013
Сообщений: 13
30.07.2013, 03:50  [ТС] #12
ninja2,
в исходном коде страницы около 44000 символов = 43КБ на один запрос, если запрашивать только <title>, то по идее это приведет к небольшому приросту скорости работу, ввиду меньшего трафика.
Avazart,
Код
http://www.steamgifts.com/giveaway/wAbSw - валид
http://www.steamgifts.com/giveaway/wAbS1 - невалид
Добавлено через 43 секунды
Цитата Сообщение от ninja2 Посмотреть сообщение
Я тебе отвечу на этот вопрос нельзя, токо полностью будешь считывать, тут без вариантов.
Понял. Спасибо. Это как раз и было интересно узнать.

Добавлено через 2 минуты
Avazart,
Цитата Сообщение от Avazart Посмотреть сообщение
Для ускорения gzip можно использовать и и развести по потокам.
На данный момент мне ни то, ни другое ни о чем не говорит. Так как программировать я только недавно начал, то и знаний практически никаких - одно лишь желание. Но информацию на заметку возьму обязательно и ознакомлюсь, как только подкоплю в своем багаже знаний поболее.
0
Avazart
Эксперт С++
7262 / 5434 / 304
Регистрация: 10.12.2010
Сообщений: 24,158
Записей в блоге: 17
30.07.2013, 03:53 #13
Цитата Сообщение от mabzZ Посмотреть сообщение
если запрашивать только <title>
Да вроде в протоколе такого нет, но на всякий случае посмотрите другие методы.
1
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
30.07.2013, 03:57 #14
Цитата Сообщение от mabzZ Посмотреть сообщение
ninja2,
в исходном коде страницы около 44000 символов = 43КБ на один запрос, если запрашивать только <title>, то по идее это приведет к небольшому приросту скорости работу, ввиду меньшего трафика.
Да такого нельзя сделать тебе по любом сервер полностью весь текст выдаст. Там так ты послал запрос, сервер тебе ответ ты запрос, тебе ответ. Я парсер на пхп писал, сначала считывал полностью страницу, а затем уже удалял хэдэры, теги и все лишнее, оставлял только заголовок и текст.
1
mabzZ
5 / 1 / 1
Регистрация: 28.03.2013
Сообщений: 13
30.07.2013, 04:04  [ТС] #15
ninja2,
Хорошо, буду знать тогда, что не стоит лишние ресурсы затрачивать на поиск в данном направлении.
В принципе мне это не важно, так как программу писал для себя и просто так, фактической пользы от нее нет, хотелось просто протестировать и попробовать ее написать. Потому к быстродействию программы никаких требований нет, но как всегда хочется, чтобы программа работала как можно лучше Теперь, зная, что это реализовать извлечение тайтла не получится, хотя бы не буду время на это тратить свое, а займусь чем-нибудь более полезным и продуктивным
0
30.07.2013, 04:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2013, 04:04
Привет! Вот еще темы с ответами:

2 мини задачки на массивы - C++
1)Проверить, есть ли в массиве ДВА ПОДРЯД идущих одинаковых элемента. 2)Проверить, содержатся ли в массиве ДВА ПОДРЯД идущих...

Разработка мини игры) - C++
Здравствуйте, сразу прошу прощения за тему скорей всего не в том разделе)) У меня вопрос к знающим людям. Нам сказали сделать...

мини программа оповещание - C++
здравствуйте, я в с++ не сильна. Можно ли сделать такое? Имеется ссылка на .xml (обновляется каждые 30 мин.) где выводятся названия....

Мини база данных :) - C++
кое в чем проблемы, если кто знает, подскажите: #include &lt;iostream&gt; using namespace std; int main() { setlocale(0, &quot;Rus&quot;); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.