|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
Всех с наступившим Новым годом! Уже второй день мучаюсь одной задачей, но решил уже спросить, когда все варианты закончились. Есть произвольный диапазон IP-адресов, к примеру: 94.41.167.0-94.41.175.255, он может быть любой, но я пытаюсь вытащить из него все подсети и маски, что-то типа такого: 94.41.167.0/24, 94.41.168.0/21. Но ничего так и не получилось. Может, у кого-нибудь есть идеи? Прошу помочь. Заранее спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2014, 11:37 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
Все - то есть включая в себя все вложенные подсети *.*.*.*/30 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2014, 11:47 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
Нет, в данном конкретном диапазоне получилось только 2. В дальнейшем буду сопоставлять IP-адреса конкретному диапазону ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2014, 11:51 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
IvanCВсех с наступившим Новым годом! Уже второй день мучаюсь одной задачей, но решил уже спросить, когда все варианты закончились. Есть произвольный диапазон IP-адресов, к примеру: 94.41.167.0-94.41.175.255, он может быть любой, но я пытаюсь вытащить из него все подсети и маски, что-то типа такого: 94.41.167.0/24, 94.41.168.0/21. Но ничего так и не получилось. Может, у кого-нибудь есть идеи? Прошу помочь. Заранее спасибо. почему 24 ? что вы хотите получить на этих входных данных : 94.41.167.0-94.41.175.255 какой результат должен быть ? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2014, 12:06 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
Лично мне тогда не очень понятна задача. То есть где-то внутри этого диапазона есть самая крупная подсеть, а ближе к краям все более мелкие, вот на это и надо разложить? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2014, 12:06 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
qwerty112почему 24 ?потому что следующую подсеть /23 /22 /21 можно получить только начиная с 94.41.168.*, а это либо фрагмент предыдущей подсети, либо самостоятельная сеть /24 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2014, 12:11 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
Как я понимаю, это инструмент провайдера по анализу занятых/свободных подсетей для выделения их новым клиентам. Почти наверняка существуют уже готовые инструменты, почему бы не поискать их? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2014, 12:12 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
94.41.167.0/24, 94.41.168.0/21 это мне посчитал http://ip-calculator.ru/ ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2014, 12:13 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
Shocker.ProПочти наверняка существуют уже готовые инструменты, почему бы не поискать их?IvanC http://ip-calculator.ru/ ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2014, 12:15 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
так мне нужно это реализовать в программе ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2014, 12:16 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
IvanCтак мне нужно это реализовать в программеты гуглил алгоритмы? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2014, 12:18 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
Само собой, там в основном расчет идет из условий, что известна маска. А у меня она неизвестна, и мало того, еще и переменная величина в диапазоне ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2014, 12:24 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
Но ведь ip-калькулятор работает без указания подсети. Значит алгоритмы существуют. Раз это клиентский сервис, доступный через веб, значит и алгоритмы наверняка опубликованы. Уж ончень не хочется изобретать велосипед, хотя и можно ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2014, 12:29 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
Хотя, наверное, все не так страшно Берем твой пример 01011110 00101001 10100111 00000000 - считаем количество нулей с конца - 8 - значит маска подсети 32-8=24 - прибавляем 2^8, получаем 01011110 00101001 10101000 00000000 - считаем количество нулей с конца - 11 - значит маска подсети 32-11=21 - прибавляем 2^11, получаем 01011110 00101001 10110000 00000000 мы вышли за пределы указанного диапазона и получили две подсети. осталось продумать, как проверять верхнюю границу каждый раз и уменьшать подсеть, пока она не будети вписываться в верхнюю границу. Справишься? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2014, 12:38 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
еще надо отсекать некорректные диапазоны, если требуется, то есть если получились подсети с маской /31 и /32, они могут получиться только в начале и в конце диапазона ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2014, 12:39 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
тут есть какой-то веб-сервис, вроде по этой "теме" (я "не шарю", вдруг что :)) ) его, достаточно просто "дёргать" Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
возвращает результат, правда в JSONP, но его, достаточно просто можно в XML "переделать" и разобрать (или просто строковыми функциями) Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2014, 12:51 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
В общем, алгоритм такой, работаем в цикле с текущем значением IP в виде непрерывного числа, начальное значение - начало диапазона: - цикл, пока IP<=конец_диапазона { - N = количество нулей в двоичном представлении IP с конца - Проверяем в цикле { если IP + 2^N - 1 > конец_диапазона, то N = N - 1 } - IP - найденная подсеть, (32 - N) - маска - выводим. - IP = IP + 2^N } ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2014, 13:23 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
Спасибо всем за помощь, попробую алгоритм Shocker.Pro, по результатам отпишусь ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2014, 13:31 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
Кому интересно, набросал по вышепредложенному алгоритму программу: Код: vbnet 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.
Работает, но не все подсети выводит. Буду думать, но победа уже где-то близко. Модератор: Учимся использовать тэги оформления кода - FAQ ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2014, 19:41 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
Первый серьезный косяк, бросающийся в глаза Код: vbnet 1.
за пределами цикла ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2014, 20:23 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
не косяк, но строкиIvanC Код: vbnet 1. 2. 3. 4.
абсолютно бессмысленны и бесполезны, так как n все равно принимает значение x-1, то есть ветка Else ничего не делает, да и не нужна она вообще ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2014, 20:31 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
Строка Код: vbnet 1.
тоже абсолютно бессмысленна ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2014, 20:33 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
Еще один серьезный косяк Код: vbnet 1. 2.
должно быть заключено в цикл - я же писал об этом. Смысл в том, чтобы урезать подсеть, пока она не уложится в диапазон. В общем, программа работать не должнаIvanCРаботает, но ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2014, 20:35 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
Shocker.Pro, Да, косячу я много :) Ну для стажа в полгода, я думаю, позволительно :) Для того и учимся. А про цикл, я не совсем понял, должно быть так: Код: vbnet 1. 2. 3.
? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2014, 20:55 |
|
Расчет подсетей из диапазона IP-адресов
|
|||
---|---|---|---|
#18+
Да, почти, но почему почему же в степени (n-1) -то???? Ты совершенно зря сначала не разобрал мой алгоритм "на бумажке", чтобы просто понять, как он работает. Во-первых, я его просто набросал из головы, но не делал детальный просчет, то есть не исключено, что я мог допустить ошибку. Во-вторых, я не продумывал, как этот алгоритм будет обрабатывать граничные значения (например, если начало диапазона нечетное или конец диапазона четный). Я, правда, обычно в таких случаях, смотрю на поведение программы уже после реализации, тебе надо тоже не забыть это сделать. Еще вопрос - ты умышленно не используешь старший байт IP-адреса? Еще стоит объявить все переменные явно и использовать Option Explicit , а то тут возможно неожиданное поведение. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2014, 21:19 |
|
|
start [/forum/topic.php?fid=60&msg=38519826&tid=2156583]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 160ms |
0 / 0 |