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

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

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

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

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

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

Есть готовая функция?
...
Рейтинг: 0 / 0
25.07.2017, 12:15
    #39494492
Азагаш
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Принадлежность IP заданной подсети с маской.
Zinka5,
есть даже целый готовый пакет http://www.sql.ru/blogs/oracleandsql/1390
...
Рейтинг: 0 / 0
25.07.2017, 12:16
    #39494493
Азагаш
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Принадлежность IP заданной подсети с маской.
Код: 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
25.07.2017, 12:19
    #39494497
Азагаш
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Принадлежность IP заданной подсети с маской.
Походу фигню посоветовал
Код: 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
25.07.2017, 12:21
    #39494498
Азагаш
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Принадлежность IP заданной подсети с маской.
Хотя,
Код: 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
25.07.2017, 13:14
    #39494540
Zinka5
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Принадлежность IP заданной подсети с маской.
Спасибо.
не могу понять почему результат
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
26.07.2017, 11:57
    #39495146
nixxu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Принадлежность IP заданной подсети с маской.
Код: 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
26.07.2017, 13:18
    #39495250
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Принадлежность IP заданной подсети с маской.
Жжоте напалмом.
Продолжайте.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Принадлежность IP заданной подсети с маской. / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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