Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798

Условие для перебора диапазона IP

22.12.2014, 14:38. Показов 1850. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем.

Помогите пожалуйста придумать условие\цикл перебора конкретного диапазона IP

Есть две группы Edit'ов по четыре в каждой. В каждом Edit своё число.
C++
1
2
String IP1 = Edit1->Text + "." + Edit2->Text + "." + Edit3->Text + "." + Edit4->Text;
String IP2 = Edit5->Text + "." + Edit6->Text + "." + Edit7->Text + "." + Edit8->Text;
А дальше я не могу сообразить как составить условие для перебора всех IP между IP1 и IP2, например диапазон: 15.15.0.80 - 15.15.2.90, хочу чтобы был такой перебор
Code
1
2
3
4
5
6
7
8
9
15.15.0.80
...
15.15.0.255
15.15.1.0
...
15.15.1.255
15.15.2.0
..
15.15.2.90
А получается только между 80 и 90 в последней группе, если делать тупой брутфорс до 255, то в последнем случае пойдёт ненужная проверка.

Прошу помощи в составлении цикла перебора IP в заданом диапазоне. Спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.12.2014, 14:38
Ответы с готовыми решениями:

Условие окончания перебора элементов строки
Как она работает , что в неё прописано ? while(text != '\0') i++; вот вижу цикл... И в цикле моя переменная text ,она становится...

Есть что то типа unique, но не для последовательно повторяющихся элементов из диапазона, а для всего диапазона?
list<string>a = { "aa","bb","ccc", "gg","eeee" ,"aa" }; list <string> ::iterator eudit = unique(a.begin(), a.end(), (string s1, string...

Как добавить в запросе условие "начинаются с букв из диапазона от Л до Р"?
SELECT onum, amt, cname, sname, cust.city, sal.city FROM sal, cust, ord WHERE sal.city = cust.city;

10
Native x86
Эксперт Hardware
 Аватар для quwy
6857 / 3790 / 1025
Регистрация: 13.02.2013
Сообщений: 11,861
22.12.2014, 14:42
Самый правильный путь -- это не пытаться играть со строковым представление IP-адресов, а работать с родным 32-битным числовым видом. Тогда проблема исчезнет сама собой и нужен будет лишь один цикл.
1
place status here
 Аватар для gunslinger
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,013
22.12.2014, 15:56
Если делать не способом, предложенным quwy, то
C++
1
2
3
4
5
6
7
8
for (int i = 0; i <= 2; i++)
  for (int j = 0; j <= 255; j++)
  {
    if ((i == 0 && j < 80) || (i == 2 && j > 90))
      continue;
    else
      Memo1->Lines->Add("15.15." + String(i) + '.' + String(j));
  }
результат (то, что и требуется)

15.15.0.80
15.15.0.81
15.15.0.82
15.15.0.83
15.15.0.84
15.15.0.85
15.15.0.86
15.15.0.87
15.15.0.88
15.15.0.89
15.15.0.90
15.15.0.91
15.15.0.92
15.15.0.93
15.15.0.94
15.15.0.95
15.15.0.96
15.15.0.97
15.15.0.98
15.15.0.99
15.15.0.100
15.15.0.101
15.15.0.102
15.15.0.103
15.15.0.104
15.15.0.105
15.15.0.106
15.15.0.107
15.15.0.108
15.15.0.109
15.15.0.110
15.15.0.111
15.15.0.112
15.15.0.113
15.15.0.114
15.15.0.115
15.15.0.116
15.15.0.117
15.15.0.118
15.15.0.119
15.15.0.120
15.15.0.121
15.15.0.122
15.15.0.123
15.15.0.124
15.15.0.125
15.15.0.126
15.15.0.127
15.15.0.128
15.15.0.129
15.15.0.130
15.15.0.131
15.15.0.132
15.15.0.133
15.15.0.134
15.15.0.135
15.15.0.136
15.15.0.137
15.15.0.138
15.15.0.139
15.15.0.140
15.15.0.141
15.15.0.142
15.15.0.143
15.15.0.144
15.15.0.145
15.15.0.146
15.15.0.147
15.15.0.148
15.15.0.149
15.15.0.150
15.15.0.151
15.15.0.152
15.15.0.153
15.15.0.154
15.15.0.155
15.15.0.156
15.15.0.157
15.15.0.158
15.15.0.159
15.15.0.160
15.15.0.161
15.15.0.162
15.15.0.163
15.15.0.164
15.15.0.165
15.15.0.166
15.15.0.167
15.15.0.168
15.15.0.169
15.15.0.170
15.15.0.171
15.15.0.172
15.15.0.173
15.15.0.174
15.15.0.175
15.15.0.176
15.15.0.177
15.15.0.178
15.15.0.179
15.15.0.180
15.15.0.181
15.15.0.182
15.15.0.183
15.15.0.184
15.15.0.185
15.15.0.186
15.15.0.187
15.15.0.188
15.15.0.189
15.15.0.190
15.15.0.191
15.15.0.192
15.15.0.193
15.15.0.194
15.15.0.195
15.15.0.196
15.15.0.197
15.15.0.198
15.15.0.199
15.15.0.200
15.15.0.201
15.15.0.202
15.15.0.203
15.15.0.204
15.15.0.205
15.15.0.206
15.15.0.207
15.15.0.208
15.15.0.209
15.15.0.210
15.15.0.211
15.15.0.212
15.15.0.213
15.15.0.214
15.15.0.215
15.15.0.216
15.15.0.217
15.15.0.218
15.15.0.219
15.15.0.220
15.15.0.221
15.15.0.222
15.15.0.223
15.15.0.224
15.15.0.225
15.15.0.226
15.15.0.227
15.15.0.228
15.15.0.229
15.15.0.230
15.15.0.231
15.15.0.232
15.15.0.233
15.15.0.234
15.15.0.235
15.15.0.236
15.15.0.237
15.15.0.238
15.15.0.239
15.15.0.240
15.15.0.241
15.15.0.242
15.15.0.243
15.15.0.244
15.15.0.245
15.15.0.246
15.15.0.247
15.15.0.248
15.15.0.249
15.15.0.250
15.15.0.251
15.15.0.252
15.15.0.253
15.15.0.254
15.15.0.255
15.15.1.0
15.15.1.1
15.15.1.2
15.15.1.3
15.15.1.4
15.15.1.5
15.15.1.6
15.15.1.7
15.15.1.8
15.15.1.9
15.15.1.10
15.15.1.11
15.15.1.12
15.15.1.13
15.15.1.14
15.15.1.15
15.15.1.16
15.15.1.17
15.15.1.18
15.15.1.19
15.15.1.20
15.15.1.21
15.15.1.22
15.15.1.23
15.15.1.24
15.15.1.25
15.15.1.26
15.15.1.27
15.15.1.28
15.15.1.29
15.15.1.30
15.15.1.31
15.15.1.32
15.15.1.33
15.15.1.34
15.15.1.35
15.15.1.36
15.15.1.37
15.15.1.38
15.15.1.39
15.15.1.40
15.15.1.41
15.15.1.42
15.15.1.43
15.15.1.44
15.15.1.45
15.15.1.46
15.15.1.47
15.15.1.48
15.15.1.49
15.15.1.50
15.15.1.51
15.15.1.52
15.15.1.53
15.15.1.54
15.15.1.55
15.15.1.56
15.15.1.57
15.15.1.58
15.15.1.59
15.15.1.60
15.15.1.61
15.15.1.62
15.15.1.63
15.15.1.64
15.15.1.65
15.15.1.66
15.15.1.67
15.15.1.68
15.15.1.69
15.15.1.70
15.15.1.71
15.15.1.72
15.15.1.73
15.15.1.74
15.15.1.75
15.15.1.76
15.15.1.77
15.15.1.78
15.15.1.79
15.15.1.80
15.15.1.81
15.15.1.82
15.15.1.83
15.15.1.84
15.15.1.85
15.15.1.86
15.15.1.87
15.15.1.88
15.15.1.89
15.15.1.90
15.15.1.91
15.15.1.92
15.15.1.93
15.15.1.94
15.15.1.95
15.15.1.96
15.15.1.97
15.15.1.98
15.15.1.99
15.15.1.100
15.15.1.101
15.15.1.102
15.15.1.103
15.15.1.104
15.15.1.105
15.15.1.106
15.15.1.107
15.15.1.108
15.15.1.109
15.15.1.110
15.15.1.111
15.15.1.112
15.15.1.113
15.15.1.114
15.15.1.115
15.15.1.116
15.15.1.117
15.15.1.118
15.15.1.119
15.15.1.120
15.15.1.121
15.15.1.122
15.15.1.123
15.15.1.124
15.15.1.125
15.15.1.126
15.15.1.127
15.15.1.128
15.15.1.129
15.15.1.130
15.15.1.131
15.15.1.132
15.15.1.133
15.15.1.134
15.15.1.135
15.15.1.136
15.15.1.137
15.15.1.138
15.15.1.139
15.15.1.140
15.15.1.141
15.15.1.142
15.15.1.143
15.15.1.144
15.15.1.145
15.15.1.146
15.15.1.147
15.15.1.148
15.15.1.149
15.15.1.150
15.15.1.151
15.15.1.152
15.15.1.153
15.15.1.154
15.15.1.155
15.15.1.156
15.15.1.157
15.15.1.158
15.15.1.159
15.15.1.160
15.15.1.161
15.15.1.162
15.15.1.163
15.15.1.164
15.15.1.165
15.15.1.166
15.15.1.167
15.15.1.168
15.15.1.169
15.15.1.170
15.15.1.171
15.15.1.172
15.15.1.173
15.15.1.174
15.15.1.175
15.15.1.176
15.15.1.177
15.15.1.178
15.15.1.179
15.15.1.180
15.15.1.181
15.15.1.182
15.15.1.183
15.15.1.184
15.15.1.185
15.15.1.186
15.15.1.187
15.15.1.188
15.15.1.189
15.15.1.190
15.15.1.191
15.15.1.192
15.15.1.193
15.15.1.194
15.15.1.195
15.15.1.196
15.15.1.197
15.15.1.198
15.15.1.199
15.15.1.200
15.15.1.201
15.15.1.202
15.15.1.203
15.15.1.204
15.15.1.205
15.15.1.206
15.15.1.207
15.15.1.208
15.15.1.209
15.15.1.210
15.15.1.211
15.15.1.212
15.15.1.213
15.15.1.214
15.15.1.215
15.15.1.216
15.15.1.217
15.15.1.218
15.15.1.219
15.15.1.220
15.15.1.221
15.15.1.222
15.15.1.223
15.15.1.224
15.15.1.225
15.15.1.226
15.15.1.227
15.15.1.228
15.15.1.229
15.15.1.230
15.15.1.231
15.15.1.232
15.15.1.233
15.15.1.234
15.15.1.235
15.15.1.236
15.15.1.237
15.15.1.238
15.15.1.239
15.15.1.240
15.15.1.241
15.15.1.242
15.15.1.243
15.15.1.244
15.15.1.245
15.15.1.246
15.15.1.247
15.15.1.248
15.15.1.249
15.15.1.250
15.15.1.251
15.15.1.252
15.15.1.253
15.15.1.254
15.15.1.255
15.15.2.0
15.15.2.1
15.15.2.2
15.15.2.3
15.15.2.4
15.15.2.5
15.15.2.6
15.15.2.7
15.15.2.8
15.15.2.9
15.15.2.10
15.15.2.11
15.15.2.12
15.15.2.13
15.15.2.14
15.15.2.15
15.15.2.16
15.15.2.17
15.15.2.18
15.15.2.19
15.15.2.20
15.15.2.21
15.15.2.22
15.15.2.23
15.15.2.24
15.15.2.25
15.15.2.26
15.15.2.27
15.15.2.28
15.15.2.29
15.15.2.30
15.15.2.31
15.15.2.32
15.15.2.33
15.15.2.34
15.15.2.35
15.15.2.36
15.15.2.37
15.15.2.38
15.15.2.39
15.15.2.40
15.15.2.41
15.15.2.42
15.15.2.43
15.15.2.44
15.15.2.45
15.15.2.46
15.15.2.47
15.15.2.48
15.15.2.49
15.15.2.50
15.15.2.51
15.15.2.52
15.15.2.53
15.15.2.54
15.15.2.55
15.15.2.56
15.15.2.57
15.15.2.58
15.15.2.59
15.15.2.60
15.15.2.61
15.15.2.62
15.15.2.63
15.15.2.64
15.15.2.65
15.15.2.66
15.15.2.67
15.15.2.68
15.15.2.69
15.15.2.70
15.15.2.71
15.15.2.72
15.15.2.73
15.15.2.74
15.15.2.75
15.15.2.76
15.15.2.77
15.15.2.78
15.15.2.79
15.15.2.80
15.15.2.81
15.15.2.82
15.15.2.83
15.15.2.84
15.15.2.85
15.15.2.86
15.15.2.87
15.15.2.88
15.15.2.89
15.15.2.90
2
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
22.12.2014, 17:16  [ТС]
gunslinger, мне кажется решение подходит только для очень ограниченого диапазона...

Цитата Сообщение от quwy Посмотреть сообщение
работать с родным 32-битным числовым видом. Тогда проблема исчезнет сама собой и нужен будет лишь один цикл.
Так я в string формирую лишь для вывода на экран, не более того, в цикле for перебор от 0 до 255. Покажите пример с одним циклом?
0
Native x86
Эксперт Hardware
 Аватар для quwy
6857 / 3790 / 1025
Регистрация: 13.02.2013
Сообщений: 11,861
22.12.2014, 17:32
Maestro, IPv4-адрес -- это четырехбайтовое беззнаковое целое число, строковое представление вида "A.B.C.D" существует в основном только для удобства человека. Если упаковать однобайтовые составляющие адреса 15.15.0.80 в 32-битное беззнаковое целое, то получим число 252641360. А для адреса 15.15.2.90 соответственно 252641882. Запускаем цикл с первого числа по второе и получаем полный набор адресов заданного диапазона.
1
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
22.12.2014, 19:05
Лучший ответ Сообщение было отмечено Maestro как решение

Решение

quwy имеет ввиду вот это, один цикл по десятичному представлению без точек:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void __fastcall TForm1::btn_gen_ipClick( TObject * Sender )
{
    union ip
    {
        BYTE parts[ 4 ];
        unsigned whole;
    } ;
 
    ip it =
    { 80, 0, 15, 15 } ,
        end =
    { 90, 2, 15, 15 } ;
 
    while ( it.whole <= end.whole )
    {
        memo_1->Lines->Add( String( ).sprintf( L"%d.%d.%d.%d", it.parts[ 3 ], it.parts[ 2 ], it.parts[ 1 ], it.parts[ 0 ] ) );
        ++it.whole;
    }
}
Миниатюры
Условие для перебора диапазона IP  
4
place status here
 Аватар для gunslinger
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,013
22.12.2014, 20:31
А можно еще так (но медленнее):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  byte ip1[4] = {15, 15, 0, 80}, ip2[4] = {15, 15, 2, 90}, ip[4] = {0}, j;
  unsigned total[2] = {0}, i;
  // переводим адреса в числа
  for (j = 0; j < 4 ; j++)
  {
    total[0] += ip1[j] << (8*(3-j));
    total[1] += ip2[j] << (8*(3-j));
  }
 
  // вывод с переводом обратно
  for (i = total[0]; i <= total[1]; i++)
  {
    for (j = 0; j < 4 ; j++)
    {
      ip[j] = i >> (8*(3-j));
      Memo1->Text = Memo1->Text + ((j == 3) ? String(ip[j]) : String(ip[j])+".");
    }
    Memo1->Lines->Add("");
    Memo1->Lines->Delete(Memo1->Lines->Count-1);
  }
Добавлено через 7 минут
P.S.: значительно медленнее по сравнению с BRcr.
2
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
24.12.2014, 01:56  [ТС]
Ребят спасибо большое за пояснение и наглядные примеры. То что надо. Вопрос решён на все 100%. Спасибо.
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
25.12.2014, 02:32  [ТС]
Приветствую ещё раз всех. А вот, допустим у меня есть айпи вида:
Code
1
ХХХ.ХХХ.[0-255].ХХХ
ХХХ любая не меняющаяся цифра, а в квадратных скобках должна\может меняться, т.е. вот так
Code
1
2
3
4
5
6
10.10.0.10
10.10.1.10
10.10.2.10
10.10.3.10
...
10.10.255.10
Можно ли ограничить перебор цифр только третьей группы или вообще любой произвольной?

Благодарю.
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
25.12.2014, 16:12
Лучший ответ Сообщение было отмечено Maestro как решение

Решение

А запросто. Инкрементация произвольной группы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void __fastcall TForm1::btn_gen_ipClick( TObject * Sender )
{
    union ip
    {
        BYTE parts[ 4 ];
        unsigned whole;
    } ;
 
    ip it =
    { 80, 0, 15, 15 } ,
        end =
    { 80, 0, 150, 15 } ;
    int group_pos( 1 );
 
    memo_1->Lines->BeginUpdate();
 
    while ( it.whole <= end.whole )
    {
        memo_1->Lines->Add( String( ).sprintf( L"%d.%d.%d.%d", it.parts[ 3 ], it.parts[ 2 ], it.parts[ 1 ], it.parts[ 0 ] ) );
        it.whole += pow( 256, 3 - group_pos );
    }
    memo_1->Lines->EndUpdate();
}
Границы задаются так же. Индексация позиций групп с нуля. То бишь, в данном случае: 15 - позиция 0, 80 - позиция 3.
Миниатюры
Условие для перебора диапазона IP  
1
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
25.12.2014, 16:20
Лучший ответ Сообщение было отмечено Maestro как решение

Решение

Или вот еще. Границы задавать не надо, надо только указать начальный ip и позицию группы:
C++
1
2
3
4
5
6
    int group_pos( 1 );
 
    ip it =
    { 80, 0, 0, 15 } ,
        end( it );
    end.parts[ 3 - group_pos ] = 255;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.12.2014, 16:20
Помогаю со студенческими работами здесь

Скрипт для перебора
Кто может написать скрипт для перебора всевозможных поролей. Допустим Ivan Nikolaivich 17011979 1701 1989 и нужно подобрать все возможные...

Бот для перебора <select>
Всем привет! Возможно вопрос не сюда. Если что, извиняюсь. Есть страница на ней 3 выпадающих окна &lt;select&gt; (День, Месяц, Год)....

Программа для перебора паролей 7z
Здравствуйте Подскажите пожалуйста программу, которая может подставлять пароли из текствого файла к 7z архивам. Суть: запоролил архив,...

Скрипт для перебора блоков по очереди
Всем привет! Подскажите пожалуйста простенький скрипт, который будет перебирать блоки по очереди с каким нибудь эффектом. Что то типа...

Метод для перебора паролей по алфавиту
Нужен метод для перебора всех возможных паролей по алфавиту и возвращающий строку с паролем. Вот что сумел написать сам: public string...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru