powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Расчет подсетей из диапазона IP-адресов
24 сообщений из 49, страница 2 из 2
Расчет подсетей из диапазона IP-адресов
    #38519871
IvanC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Со старшим байтом overflow выбрасывает. За пределы Long выходит. В данном случае это не принципиально, так как таких больших диапазонов не будет. В любом случае спасибо Вам большое. Постараюсь на практике разобраться и, может, подправить. Еще раз спасибо. Если получится, напишу.
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38519878
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IvanCЗа пределы Long выходитСамо собой. Попробуй использовать Currency - у него целая часть принимает бОльшие значения, при этом - это точный тип. Правда, я не знаю, как с ней будут работать функции двоичных преобразований.

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

Пока что из всех диапазонов, которые проверил, все совпадает с интернет-калькулятором! Полет нормальный :) Спасибо!
P.S.Действительно, сначала нужно разбираться, а потом слизывать.
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38519885
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да не должно работать! По крайней мере из-за (n-1)
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38519886
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если уже все исправил - так выложи исправленную версию
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38519888
IvanC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, с другим типом нужно будет и функции преобразования переделывать кардинально, поэтому проще так сделать.
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38522683
IvanC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо Shocker.Pro за помощь, без него вряд ли догадался бы.
Ну и еще вопрос назрел: создал ACCESS базу данных, в которой планирую хранить IP адреса. Решил их записывать в целочисленном формате. Но проблема в том, что в дальнейшем нужно будет производить с ними логическое умножение. Возможно ли это производить прямо в SQL-запросе? Из того, что я прочитал и попробовал, почему-то понял, что с ACCESS такие фокусы не проходят или я ошибаюсь? И в каком формате хранить эти данные?
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38522687
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что такое логическое умножение? Логическое И?
Вроде бы без проблем - Поле1 & Поле2
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38522722
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
имхо, ТС имеет в виду битовые операции

в Акцессе (в Jet) они есть : band, bor, bxor
но их можно использовать :
- или программно, через АДО
Код: vbnet
1.
2.
?currentProject.Connection.Execute ("SELECT 7 and 8 AS f1, 7 band 8 AS f2, 7 bor 8 AS f3, 1 bxor 9 AS f4").fields("f4")
 8


- или, если для БД включен синтаксис для ANSI 92, то и через интерфейс Акцесса

или, если клиентская часть тоже будет в Аксцессе, можно написать пользовательские функции на ВБА и использовать их в запросах
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38522828
IvanC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В таблице находятся следующие записи:

Код Net Mask Provider City
6 1579791360 4294966272 UfaNet Orenburg

SQL запрос:

SELECT IP.Provider, IP.City FROM IP WHERE IP.Net = (IP.Mask & '1579791641');

Но дает пустые поля. Может что не так сделал?
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38522858
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
во-первых почему число в кавычках?
во вторых попробуйте And или BAnd для наложения маски
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38522871
IvanC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кавычки убрал, попробовал с AND - результат тот же - пустые поля, а на band ругается, что пропущен оператор. А из-за типа поля может быть такая проблема? я поставил числовой тип, действительное число.
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38522883
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IvanCдействительное число.да, конечно, числа с плавающей запятой не являются точными, нужно использовать типы с фиксированной запятой
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38522887
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IvanCВ таблице находятся следующие записи:

Код Net Mask Provider City615797913604294966272UfaNetOrenburg

SQL запрос:

SELECT IP.Provider, IP.City FROM IP WHERE IP.Net = (IP.Mask & '1579791641');

Но дает пустые поля. Может что не так сделал?
а что вот это за "приколы" (выделил), которые в 4-е байта и не влазят-то ?
ты как 4-х байтные тетрады ИП и маски переводил в целое число ?
вот это вот твоё - "Решил их записывать в целочисленном формате" - как сделал ?
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38523092
IvanC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
"длинное целое", как написано в access имеет предел 2 147 483 647, хоть подсеть и влезает в этот предел, но маска не укладывается.
Перевод туда и обратно осуществляется функцией, там тип Variant, поэтому проблем не встречаю.
Сейчас вставил в таблицу вместо маски и сети "1", также вместо проверяемого адреса поставил "1", 1 AND 1 = 1, но запрос все так же не отрабатывает.
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38523201
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IvanC1 AND 1 = 1,а так
(1 AND 1) = 1
приоритет операции сравнения выше, чем битовой (кажется)
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38523214
IvanC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Оказывается, на самом деле в запросе Access эти фокусы не прокатывают, подключил базу в среде VBA через Microsoft.ACE.OLEDB.12.0, где и сработал BAND, но снова проблема. Не работает почему-то BAND с этими числами. Переполнение возвращает. Неужели придется разбивать IP адреса на части?
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38523219
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторНеужели придется разбивать IP адреса на части?

ТС,

"открой мне глаза",
скажи какой ИП и какую маску ты "представил" в виде этих целых чисел - 1579791360 и 4294966272
покажи эти ИП и маску - тетрадами , потом вместе над тобой посмеёмся
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38523222
IvanC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
94.41.180.0 255.255.252.0
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38523228
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IvanC94.41.180.0 255.255.252.0
с первым - понятно
а для 255.255.252.0 - "левое" значение
Код: vbnet
1.
2.
3.
4.
5.
?habahaba(94,41,180,0)
dec:1579791360              hex: 5E29B400

?habahaba(255,255,252,0 )
dec: -1024    hex: FFFFFC00



соответственно их побитовое произведение
Код: vbnet
1.
2.
?currentproject.Connection.Execute ("select 1579791360 band -1024").Fields (0) 
 1579791360 
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38523234
IvanC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а почему маска отрицательная получилась?
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38523243
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IvanCа почему маска отрицательная получилась?
потому что эта твоя маска не количество хз чего,
а всего лишь то, как храниться число с типом Long , которое в 16-ричной форме записываеться как FFFFFC00
а у Long - первый бит - определяет знак числа

вот тебе для размышлений
Код: vbnet
1.
2.
3.
4.
5.
?CLng(&h7FFFFFFF)
 2147483647 

?CLng(&h80000000)
-2147483648 
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38523246
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кстате, если "пугают" отрицательные дес.числа, то можно просто всё хранить в 16-ричных,
прийдёться, правда всё время "морочиться" с преобразованиями, но сами значения, конечно по-наглядней будут ...

Код: vbnet
1.
2.
?currentproject.Connection.Execute ("select hex(clng('&h5E29B400') band clng('&hFFFFFC00'))").Fields (0) 
5E29B400
...
Рейтинг: 0 / 0
Расчет подсетей из диапазона IP-адресов
    #38523254
IvanC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
короче, проще хранить каждый байт в отдельном поле, меньше проблем
...
Рейтинг: 0 / 0
24 сообщений из 49, страница 2 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Расчет подсетей из диапазона IP-адресов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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