Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.79
ak74m
0 / 0 / 0
Регистрация: 09.04.2009
Сообщений: 5
#1

Реализовать перебор всех возможных IP-адресов (С++) - C++

09.04.2009, 14:55. Просмотров 2384. Ответов 18
Метки нет (Все метки)

Реализовать перебор всех возможных IP-адресов, начиная с 0.0.0.0, заканчивая 255.255.255.0. (проще говоря перебор всех возможных комбинаций четырех целых чисел в интервале 0;255)если кто может, пожалуйста помогите.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2009, 14:55     Реализовать перебор всех возможных IP-адресов (С++)
Посмотрите здесь:

C++ Перебор всех возможных способов размещения n различных предметов по m различным ящикам
Перебор всех возможных подмножеств множества целых чисел C++
Нахождение всех возможных путей C++
Поиск всех возможных A и B из формулы C++
Перебор возможных значений для трёх чисел C++
Перебор и вывод всех возможных сочетаний C++
C++ Реализовать стратегий обработки возможных ошибок времени исполнения
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deicider
96 / 52 / 1
Регистрация: 18.03.2009
Сообщений: 273
09.04.2009, 14:58     Реализовать перебор всех возможных IP-адресов (С++) #2
Просто в цикле:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int i, j, k, m;
for (i = 0; i < 256; i++)
{
    for (j = 0; j < 256; j++)
    {
        for (k = 0; k < 256; k++)
        {
            for (m = 0; m < 256; m++)
            {
                // тут делаем то, что нужно сделать с этими числами
            }
        }
    }
}
Будь готов к длительному времени выполнения такого цикла. Комбинаций, как видишь, 4 294 967 296 штук!
ak74m
0 / 0 / 0
Регистрация: 09.04.2009
Сообщений: 5
09.04.2009, 15:18  [ТС]     Реализовать перебор всех возможных IP-адресов (С++) #3
Deicider спасибо, но както все просто выглядит, счас попробуем.
и еще вопрос в какой компонент можно вывести 4 числа, разделенных точками? ну и желательно как это делается.(в мемо чтото не получается)
Deicider
96 / 52 / 1
Регистрация: 18.03.2009
Сообщений: 273
09.04.2009, 15:21     Реализовать перебор всех возможных IP-адресов (С++) #4
Да, всё действительно просто ))
Насчет компонента не совсем понял вопрос. Ты собираешься выводить куда-то все четыре миллиарда комбинаций???
YurA_280784
Заблокирован
09.04.2009, 15:24     Реализовать перебор всех возможных IP-адресов (С++) #5
В MFC в контролах есть прям такой єлементик называется IP adres...
ak74m
0 / 0 / 0
Регистрация: 09.04.2009
Сообщений: 5
09.04.2009, 16:49  [ТС]     Реализовать перебор всех возможных IP-адресов (С++) #6
Deicider упаси господь =)), только которые условию удовлетворяют
YurA_280784 спасибо

Добавлено через 1 час 16 минут 56 секунд
Deicider, а сколько примерно по времени будет это все выполнятся? а то пошла уже 24ая наверно минута, чтото не так я думаю.
Deicider
96 / 52 / 1
Регистрация: 18.03.2009
Сообщений: 273
09.04.2009, 17:07     Реализовать перебор всех возможных IP-адресов (С++) #7
Ну 24 минуты это долговато, конечно, хотя если комп слабый, то и такое возможно. Плюс зависит от того, что ты в цикле делаешь. Если ты там порты сканируешь в больших количествах, то можешь даже не ждать что цикл завершится в этом году )))))
ak74m
0 / 0 / 0
Регистрация: 09.04.2009
Сообщений: 5
09.04.2009, 17:13  [ТС]     Реализовать перебор всех возможных IP-адресов (С++) #8
Deicider, да не там плюсик образовался, она оказывается просто висела=)))все работает замечательно.
про компонент куда вывести одной строкой четыре числа через точку не подскажешь?
YurA_280784
Заблокирован
09.04.2009, 17:23     Реализовать перебор всех возможных IP-адресов (С++) #9
C++
1
2
CIPAdressCtrl m_ipadr1;
m_ipadr1.SendMessage(IPM_SETADDRESS,0,MAKEIPADDRESS(192,178,125,32));
Это для MFC
ну а если в консоли напечатать то
C++
1
printf("IP : %d.%d.%d.%d",i, j, k, m);
ak74m уточни твой проект консоль, api, mfc???
ak74m
0 / 0 / 0
Регистрация: 09.04.2009
Сообщений: 5
09.04.2009, 21:12  [ТС]     Реализовать перебор всех возможных IP-адресов (С++) #10
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int i,j,k,l;
 
  for(i=0;i<256;i++)
     {
        for(j=0;j<256;j++)
        {
             for(k=0;k<256;k++)
             {
                  for(l=0;l<256;l++)
                  {
 
 
                  ClientSocket1->Host=IntToStr(i)+"."+IntToStr(j)+"."+IntToStr(k)+"."+IntToStr(l);
                  ClientSocket1->Active=true;
                  if (ClientSocket1->Socket->Connected)
                  {
                  Memo1->Lines->Add(IntToStr(i)+"."+IntToStr(j)+"."+IntToStr(k)+"."+IntToStr(l)+" on-line");
                  }
                  ClientSocket1->Active=false;
                   }
               }
          }
       }
                  
}
//---------------------------------------------------------------------------
 
 
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Memo1->Clear();
Memo2->Clear();
 
}
//---------------------------------------------------------------------------

Вот вобщем написал, но при выполнение вылетает ошибка
[img]C:\Documents and Settings\ak74m\Мои документы\Мои рисунки\12121[/img]
Rise of Death
1 / 1 / 0
Регистрация: 10.03.2009
Сообщений: 24
10.04.2009, 11:06     Реализовать перебор всех возможных IP-адресов (С++) #11
4 294 967 296
ЭТо если на каждый всреднем нужно 8 байт (3 группы по 4 цифры + 3 точки + конец строки), если писать как текст, то в итоге полдучается 64 Гб
Tiami
Яростный кот
-4 / 1 / 1
Регистрация: 10.03.2009
Сообщений: 220
10.04.2009, 12:52     Реализовать перебор всех возможных IP-адресов (С++) #12
Цитата Сообщение от Deicider Посмотреть сообщение
Просто в цикле:
А обясни почему цикл не выполняет сразу 4 операции
а ток сначала
1-255.0.0.1-255(цикл идет тут) и в том месте перебирается,а не сразу чтобы))
1-255.1-255.1-255.1-255
Не понимаю обясни етот Цикл просто интересно
Ну то есть не сразу 4 числа перебирает
Monte-Cristo
2786 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
10.04.2009, 13:18     Реализовать перебор всех возможных IP-адресов (С++) #13
Tiami, всмысле? цикл, при первых трех нулях перебирает четвертое значение от 0 до 255...предпоследнее значени становится 1, последнее сново от 0 до 255...
получатеся что-то типа:

0.0.0.0
0.0.0.1
0.0.0.2
0.0.0.3
...
0.0.0.255
0.0.1.0
0.0.1.1
0.0.1.2
...
0.0.1.255
Tiami
Яростный кот
-4 / 1 / 1
Регистрация: 10.03.2009
Сообщений: 220
10.04.2009, 17:55     Реализовать перебор всех возможных IP-адресов (С++) #14
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
Tiami, всмысле? цикл, при первых трех нулях перебирает четвертое значение от 0 до 255...предпоследнее значени становится 1, последнее сново от 0 до 255...
получатеся что-то типа:
Да не Почему не перебираются сразу 4 цифры
то есть вот так
1.1.1.1
А перебирается почему то так
1.0.0.1
2.0.0.1
3.0.0.1
..........
256.0.0.1
и потом уже
1.0.0.2
Почему цикл не перебирает так
1.1.1.1
2.2.2.2
Вот не понимаю Как действует етот цикл
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
10.04.2009, 18:03     Реализовать перебор всех возможных IP-адресов (С++) #15
Ессли ты имеешь ввиду этот цикл:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int i, j, k, m;
for (i = 0; i < 256; i++)
{
        for (j = 0; j < 256; j++)
        {
                for (k = 0; k < 256; k++)
                {
                        for (m = 0; m < 256; m++)
                        {
                                // тут делаем то, что нужно сделать с этими числами
                        }
                }
        }
}
То сначала i = 0, k = 0, и m пробегает свои значения и т.д.
Когда что-то непонятно, нажимай F10 и смотрири как выполняется программа
Deicider
96 / 52 / 1
Регистрация: 18.03.2009
Сообщений: 273
11.04.2009, 10:00     Реализовать перебор всех возможных IP-адресов (С++) #16
Почему цикл не перебирает так
1.1.1.1
2.2.2.2
Потому что не такой перебор требуется ))) необходимо перебрать ВСЕ сочетания чисел.
Monte-Cristo
2786 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
11.04.2009, 10:08     Реализовать перебор всех возможных IP-адресов (С++) #17
Цитата Сообщение от Tiami Посмотреть сообщение
Почему цикл не перебирает так
1.1.1.1
2.2.2.2
потому что сначала выполняет полностью последний фор, потом предпоследний становится 1, и снова выполняется последний фор и т.д.
Tiami
Яростный кот
-4 / 1 / 1
Регистрация: 10.03.2009
Сообщений: 220
12.04.2009, 09:48     Реализовать перебор всех возможных IP-адресов (С++) #18
Цитата Сообщение от qwert Посмотреть сообщение
Когда что-то непонятно, нажимай F10 и смотрири как выполняется программа
Жму f10 ничего не делается
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.04.2009, 10:34     Реализовать перебор всех возможных IP-адресов (С++)
Еще ссылки по теме:

Перебор возможных вариантов разреза трубы C++
Организовать перебор всех возможных сочетаний C++
C++ Сортировка всех возможных комбинаций 4 из 8
Алгоритм перебора всех возможных значений C++
Реализовать алгоритм всех возможных комбинаций восьми ферзей C++

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

Или воспользуйтесь поиском по форуму:
kazak
3031 / 2352 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
12.04.2009, 10:34     Реализовать перебор всех возможных IP-адресов (С++) #19
Цитата Сообщение от Tiami Посмотреть сообщение
Жму f10 ничего не делается
Посмотри в меню Run(Debug), найди пункты Step Over и Trace Into и посмотри горячии клавиши для них(для Borland F8 F7, для VC F10 F11 соответственно). Это пошаговое выполнение, Step Over - шаг с обходом, т.е. если следующим шагом должна выполняться функция, то она выполняется как один оператор. Trace Into - шаг с заходом, т.е. ты можешь переместиться в функцию и посмотрить как она работает изнутри.
Yandex
Объявления
12.04.2009, 10:34     Реализовать перебор всех возможных IP-адресов (С++)
Ответ Создать тему
Опции темы

Текущее время: 23:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru