powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Принадлежность IP заданной подсети с маской.
13 сообщений из 13, страница 1 из 1
Принадлежность IP заданной подсети с маской.
    #39494306
Zinka5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
11.2
Подскажите корректную функцию для определения вхождения айпишника ip4 в заданную подсеть с маской.
Поиском не нашла.
Все что есть в интернете либо определяет неправильно либо зависает.
...
Рейтинг: 0 / 0
Принадлежность IP заданной подсети с маской.
    #39494307
Zinka5,

Показывай, что нашла, как пробовала....
...
Рейтинг: 0 / 0
Принадлежность IP заданной подсети с маской.
    #39494318
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zinka5Все что есть в интернете либо определяет неправильно либо зависает.

Серьезное заявление
...
Рейтинг: 0 / 0
Принадлежность IP заданной подсети с маской.
    #39494354
Zinka5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кто-нибудь по делу ответить сможет?
...
Рейтинг: 0 / 0
Принадлежность IP заданной подсети с маской.
    #39494359
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zinka5,

Э-эх уже ответил. Что из этого пробовала?
...
Рейтинг: 0 / 0
Принадлежность IP заданной подсети с маской.
    #39494470
Zinka5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Какие Вы))

Пробовала эту функцию виснет
http://codelikehell.livejournal.com/2119.html

Этот пакет неправильно считает
http://deepedit.ru/plsql-paket-dlya-raboty-s-setyu.html

Есть готовая функция?
...
Рейтинг: 0 / 0
Принадлежность IP заданной подсети с маской.
    #39494492
Азагаш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zinka5,
есть даже целый готовый пакет http://www.sql.ru/blogs/oracleandsql/1390
...
Рейтинг: 0 / 0
Принадлежность IP заданной подсети с маской.
    #39494493
Азагаш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
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.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
declare
 i varchar2(50);
 n varchar2(50);
 m varchar2(50);
 cv_ipseparator CONSTANT VARCHAR2(1) := '.'; 
FUNCTION fn_IpIsMask(p_MaskIp VARCHAR2, p_Mask VARCHAR2, p_IpNum VARCHAR2) RETURN NUMBER
  IS
    vr_returnvalue NUMBER;
  vr_Numip NUMBER;
  vr_NumMaskip NUMBER;
  vr_NumMask NUMBER; 
  vr_NumReturn NUMBER; 
FUNCTION Fn_IPtoNum(p_ip IN VARCHAR2) RETURN NUMBER 
 IS
   vr_IpNumber VARCHAR2(255);
   vr_IpReturnNumber NUMBER;
   vr_dec1 VARCHAR2(255);
   vr_dec2 VARCHAR2(255);
   vr_dec3 VARCHAR2(255);
   vr_dec4 VARCHAR2(255);
 BEGIN
 BEGIN
   vr_ipNumber := p_ip ;
   vr_dec1 := SUBSTR(vr_ipNumber, 1, INSTR(vr_ipNumber, cv_ipseparator )-1);
   vr_ipNumber := SUBSTR(vr_ipNumber , INSTR(vr_ipNumber, cv_ipseparator )+1); 
   vr_dec2 := SUBSTR(vr_ipNumber, 1, INSTR(vr_ipNumber, cv_ipseparator )-1);
   vr_ipNumber := SUBSTR(vr_ipNumber , INSTR(vr_ipNumber, cv_ipseparator )+1); 
   vr_dec3 := SUBSTR(vr_ipNumber, 1, INSTR(vr_ipNumber, cv_ipseparator )-1);
   vr_ipNumber := SUBSTR(vr_ipNumber , INSTR(vr_ipNumber, cv_ipseparator )+1)||'.'; 
   vr_dec4 := SUBSTR(vr_ipNumber, 1, INSTR(vr_ipNumber, cv_ipseparator )-1);
 --   
   IF TO_NUMBER(vr_dec1)>255 THEN 
     vr_dec1:='0';
   END IF;
   IF TO_NUMBER(vr_dec2)>255 THEN 
     vr_dec2:='0';
   END IF;
   IF TO_NUMBER(vr_dec3)>255 THEN 
     vr_dec3:='0';
   END IF;
   IF TO_NUMBER(vr_dec4)>255 THEN 
     vr_dec4:='0';
   END IF;
   vr_IpReturnNumber := 
     TO_NUMBER(vr_dec4)
   + TO_NUMBER(vr_dec3) * 256
   + TO_NUMBER(vr_dec2) * 256* 256
   + TO_NUMBER(vr_dec1) * 256 * 256 * 256;
  EXCEPTION 
    WHEN OTHERS THEN RAISE_APPLICATION_ERROR('Fn_IPtoNum '||SQLERRM ,0 );	
  END; 
  RETURN vr_ipReturnNumber;
  END Fn_IpToNum;   
  BEGIN
  BEGIN     
    IF INSTR(p_MaskIp, '.') = 0 THEN    
      vr_NumMaskip := TO_NUMBER(p_MaskIp);
  ELSE   
      vr_NumMaskip := fn_IpToNum(p_MaskIp);
  END IF;
    IF INSTR(p_IpNum, '.') = 0 THEN    
      vr_Numip := TO_NUMBER(p_IpNum);
  ELSE   
      vr_Numip := fn_IpToNum(p_IpNum);
  END IF;
    IF INSTR(p_Mask, '.') = 0 THEN    
    IF vr_NumMask<33 THEN
         vr_NumMask := TO_NUMBER(p_Mask);
    ELSE     
         vr_NumMask := fn_IpToNum(p_Mask);
    END IF; 
  ELSE
    vr_NumMask := fn_IpToNum(p_Mask);
  -- здесь надо доработать  
  END IF;  
  SELECT BITAND(vr_NumMask, vr_NumIp) 
    INTO vr_NumReturn 
    FROM dual;
  vr_returnvalue := 0;   
   SELECT DECODE(vr_NumReturn, vr_NumMaskip, 1 , 0) 
    INTO vr_returnvalue
    FROM 
    dual ;    
    RETURN vr_returnvalue;
  EXCEPTION 
    WHEN OTHERS THEN RAISE_APPLICATION_ERROR('fn_IpIsMask '||SQLERRM ,0 );	
  END;
  END fn_IpIsMask; 
begin
 dbms_output.put_line(to_char(fn_IpIsMask('123.123.123.0','255.255.255.0','123.123.123.8'))); 
end;
...
Рейтинг: 0 / 0
Принадлежность IP заданной подсети с маской.
    #39494497
Азагаш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Походу фигню посоветовал
Код: plsql
1.
2.
3.
begin
 dbms_output.put_line(to_char(fn_IpIsMask('123.123.123.0','255.255.0.0','123.123.123.8'))); 
end;


нолик пишет
...
Рейтинг: 0 / 0
Принадлежность IP заданной подсети с маской.
    #39494498
Азагаш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя,
Код: plsql
1.
2.
3.
begin
 dbms_output.put_line(to_char(fn_IpIsMask('123.123.0.0','255.255.0.0','123.123.123.8'))); 
end;


показывает 1, как и должно. просто я всю жизнь думал, что все что мимо маски - игнорируется.
...
Рейтинг: 0 / 0
Принадлежность IP заданной подсети с маской.
    #39494540
Zinka5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо.
не могу понять почему результат
dbms_output.put_line(to_char(fn_IpIsMask('123.123.123.0','255.255.0.0','123.123.123.8')));
0 верный

ведь 123.123.123.8 находится в диапазоне 123.123.0.1 и 123.123.255.254
...
Рейтинг: 0 / 0
Принадлежность IP заданной подсети с маской.
    #39495146
nixxu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
create or replace function long2ip(ip in number)
return varchar2 deterministic
as
begin
  return bitand(ip / 16777216, 255) || '.' ||
         bitand(ip / 65536, 255)    || '.' ||
         bitand(ip / 256, 255)      || '.' ||
         bitand(ip, 255);
end long2ip;
...
Рейтинг: 0 / 0
Принадлежность IP заданной подсети с маской.
    #39495250
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жжоте напалмом.
Продолжайте.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Принадлежность IP заданной подсети с маской.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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