powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Расчет подсетей из диапазона IP-адресов
25 сообщений из 49, страница 1 из 2
Расчет подсетей из диапазона IP-адресов
    #38518350
IvanC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всех с наступившим Новым годом!
Уже второй день мучаюсь одной задачей, но решил уже спросить, когда все варианты закончились.
Есть произвольный диапазон IP-адресов, к примеру: 94.41.167.0-94.41.175.255, он может быть любой, но я пытаюсь вытащить из него все подсети и маски, что-то типа такого: 94.41.167.0/24, 94.41.168.0/21. Но ничего так и не получилось. Может, у кого-нибудь есть идеи? Прошу помочь. Заранее спасибо.
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38518351
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все - то есть включая в себя все вложенные подсети *.*.*.*/30 ?
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38518352
IvanC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет, в данном конкретном диапазоне получилось только 2. В дальнейшем буду сопоставлять IP-адреса конкретному диапазону
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38518355
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
какой результат должен быть ?
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38518356
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лично мне тогда не очень понятна задача.
То есть где-то внутри этого диапазона есть самая крупная подсеть, а ближе к краям все более мелкие, вот на это и надо разложить?
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38518358
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwerty112почему 24 ?потому что следующую подсеть /23 /22 /21 можно получить только начиная с 94.41.168.*, а это либо фрагмент предыдущей подсети, либо самостоятельная сеть /24
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38518361
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как я понимаю, это инструмент провайдера по анализу занятых/свободных подсетей для выделения их новым клиентам.

Почти наверняка существуют уже готовые инструменты, почему бы не поискать их?
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38518362
IvanC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
94.41.167.0/24, 94.41.168.0/21 это мне посчитал http://ip-calculator.ru/
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38518364
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProПочти наверняка существуют уже готовые инструменты, почему бы не поискать их?IvanC http://ip-calculator.ru/
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38518365
IvanC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так мне нужно это реализовать в программе
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38518367
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IvanCтак мне нужно это реализовать в программеты гуглил алгоритмы?
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38518370
IvanC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Само собой, там в основном расчет идет из условий, что известна маска. А у меня она неизвестна, и мало того, еще и переменная величина в диапазоне
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38518372
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но ведь ip-калькулятор работает без указания подсети. Значит алгоритмы существуют. Раз это клиентский сервис, доступный через веб, значит и алгоритмы наверняка опубликованы. Уж ончень не хочется изобретать велосипед, хотя и можно
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38518375
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя, наверное, все не так страшно
Берем твой пример

01011110 00101001 10100111 00000000

- считаем количество нулей с конца - 8
- значит маска подсети 32-8=24
- прибавляем 2^8, получаем

01011110 00101001 10101000 00000000

- считаем количество нулей с конца - 11
- значит маска подсети 32-11=21
- прибавляем 2^11, получаем

01011110 00101001 10110000 00000000

мы вышли за пределы указанного диапазона и получили две подсети.
осталось продумать, как проверять верхнюю границу каждый раз и уменьшать подсеть, пока она не будети вписываться в верхнюю границу. Справишься?
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38518376
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще надо отсекать некорректные диапазоны, если требуется, то есть если получились подсети с маской /31 и /32, они могут получиться только в начале и в конце диапазона
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38518382
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
тут есть какой-то веб-сервис, вроде по этой "теме" (я "не шарю", вдруг что :)) )
его, достаточно просто "дёргать"
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Sub haba()
    Const sURL = "http://dotnul.com/api/ip/94.41.167.0/24"
    '
    Dim sEnv As String
    Dim xmlhtp As Object 'MSXML2.XMLHTTP
    Dim XMLDoc As Object 'MSXML2.DOMDocument
    Dim xmlNode As Object 'MSXML2.IXMLDOMNode
    Dim texthttp As String
    '
    Set xmlhtp = CreateObject("MSXML2.XMLHTTP")
    Set XMLDoc = CreateObject("MSXML2.DOMDocument")
    '
    With xmlhtp
        .Open "GET", sURL, False
        .Send
        texthttp = .ResponseText
    End With
    Debug.Print texthttp
End Sub


возвращает результат, правда в JSONP, но его, достаточно просто можно в XML "переделать" и разобрать (или просто строковыми функциями)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
{"ipcalc":
  {"ip":"94.41.167.0",
  "ipv6":false,
  "size":256,
  "bits":"01011110001010011010011100000000",
  "network":"94.41.167.0",
  "broadcast":"94.41.167.255",
  "reverse":"0.167.41.94.in-addr.arpa"},
"error":false}
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38518392
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, алгоритм такой, работаем в цикле с текущем значением IP в виде непрерывного числа, начальное значение - начало диапазона:

- цикл, пока IP<=конец_диапазона {
- N = количество нулей в двоичном представлении IP с конца
- Проверяем в цикле {
если IP + 2^N - 1 > конец_диапазона, то N = N - 1
}
- IP - найденная подсеть, (32 - N) - маска - выводим.
- IP = IP + 2^N
}
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38518397
IvanC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем за помощь, попробую алгоритм Shocker.Pro, по результатам отпишусь
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38519798
IvanC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кому интересно, набросал по вышепредложенному алгоритму программу:
Код: 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.
Public Sub maask()
Public Sub maask()
Dim Add1 As String
Dim Add2 As String
Dim IP As Long
Dim y As String


IPl4 = 5
IPl3 = 142
IPl2 = 18
IPl1 = 0

IPh4 = 5
IPh3 = 142
IPh2 = 145
IPh1 = 255

Add1 = Bin(IPl3) & Bin(IPl2) & Bin(IPl1)
Add2 = Bin(IPh3) & Bin(IPh2) & Bin(IPh1)
Dec1 = Bin2Dec(Add1)
Dec2 = Bin2Dec(Add2)
IP = Dec1
x = 1

Do While IP <= Dec2
    y = Bin(IP)
            If Right(y, x) = 0 Then
            Do While Right(y, x) = 0
            x = x + 1
            Loop
            Else
            n = x
            End If
            n = x - 1
    IP = Bin2Dec(y)
    If IP + 2 ^ (n - 1) > Dec2 Then
        n = n - 1
    Else
    End If
      
    IP = IP + (2 ^ n)
    Debug.Print (32 - n)
Loop

End Sub



Работает, но не все подсети выводит. Буду думать, но победа уже где-то близко.
Модератор: Учимся использовать тэги оформления кода - FAQ
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38519826
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первый серьезный косяк, бросающийся в глаза
Код: vbnet
1.
x = 1

за пределами цикла
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38519832
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не косяк, но строкиIvanC
Код: vbnet
1.
2.
3.
4.
            If Right(y, x) = 0 Then
           
            Else
            n = x

абсолютно бессмысленны и бесполезны, так как n все равно принимает значение x-1, то есть ветка Else ничего не делает, да и не нужна она вообще
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38519835
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Строка
Код: vbnet
1.
   IP = Bin2Dec(y)

тоже абсолютно бессмысленна
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38519840
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще один серьезный косяк
Код: vbnet
1.
2.
    If IP + 2 ^ (n - 1) > Dec2 Then
        n = n - 1

должно быть заключено в цикл - я же писал об этом. Смысл в том, чтобы урезать подсеть, пока она не уложится в диапазон.

В общем, программа работать не должнаIvanCРаботает, но
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38519850
IvanC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Да, косячу я много :) Ну для стажа в полгода, я думаю, позволительно :) Для того и учимся. А про цикл, я не совсем понял, должно быть так:

Код: vbnet
1.
2.
3.
Do While IP + 2 ^ (n - 1) > Dec2
n = n - 1
Loop


?
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38519867
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, почти, но почему почему же в степени (n-1) -то????

Ты совершенно зря сначала не разобрал мой алгоритм "на бумажке", чтобы просто понять, как он работает.
Во-первых, я его просто набросал из головы, но не делал детальный просчет, то есть не исключено, что я мог допустить ошибку. Во-вторых, я не продумывал, как этот алгоритм будет обрабатывать граничные значения (например, если начало диапазона нечетное или конец диапазона четный). Я, правда, обычно в таких случаях, смотрю на поведение программы уже после реализации, тебе надо тоже не забыть это сделать.

Еще вопрос - ты умышленно не используешь старший байт IP-адреса?

Еще стоит объявить все переменные явно и использовать Option Explicit , а то тут возможно неожиданное поведение.
...
Рейтинг: 0 / 0
25 сообщений из 49, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Расчет подсетей из диапазона IP-адресов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]