Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.01;
Скачать: CL | DM;

Вниз

Модуль работы с IP сетями.   Найти похожие ветки 

 
ГореПрограммер   (2006-10-17 18:44) [0]

Здравствуйте.
Возможно тко- то уже сталкивался. Может есть у кого- нибудь модуль работы с IP адресами и масками ? вот примерный список требований:
пересчет масок в битовые и обратно
опредлеение принадлежности адреса к сети
операции с сетиями (складывание, вычитание)
определение адресов подсетей и броткастов.
....


 
Ketmar ©   (2006-10-17 18:45) [1]

>[0] ГореПрограммер 17-Oct-2006, 18:44
>операции с сетиями (складывание, вычитание)
это как, пардон???


 
ГореПрограммер   (2006-10-17 18:47) [2]

10.1.1.16/30+10.1.1.20/30


 
Ketmar ©   (2006-10-17 18:48) [3]

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


 
kay ©   (2006-10-17 18:49) [4]

а что в итоге должно получиться?


 
ГореПрограммер   (2006-10-17 18:50) [5]

10.1.1.16/29


 
Ketmar ©   (2006-10-17 18:52) [6]

раскроите мне череп, но всё равно не понимаю. господа, сведущие в сетях: это вообще имеет какой-нибудь смысл???


 
ГореПрограммер   (2006-10-17 19:02) [7]

первая задача пришелшая на ум:
есть массив сетей, необходимо проверить, предположим, "заполненность" С сети.
самый просто вариант это складывание имеющегося массива для проверки на выходе наличия 24-й маски.
Это самое простое что только что пришло в голову, подобных задач великое множество.


 
Rouse_ ©   (2006-10-18 10:22) [8]

http://www.hub.ru/modules.php?name=Pages&op=showpage&pid=45


 
ГореПрограммер   (2006-10-18 10:41) [9]

И что ?
что такое маски я знаю и таблица соответствия вещь далеко не новая. Вы мой вопрос читали ?


 
Сергей М. ©   (2006-10-18 10:56) [10]


> ГореПрограммер   (18.10.06 10:41) [9]


> что такое маски я знаю


Еще бы ты пояснил, что такое "массив сетей" и "складывание, вычитание сетей".

Массив IP-адресов - это еще можно понять, логические/арифметические операции над этими адресами - это тоже можно понять, но "массив сетей" и "складывание, вычитание сетей" - это нонсенс.


 
ГореПрограммер   (2006-10-18 11:06) [11]

10.1.1.1/30 это сеть, 10.1.1.1 это адрес.
Если следовать вашей логике, то получается следующее:
выражение 10.1.1.16+10.1.1.17 имеет смысл  (что бред в корне), а выражение 10.1.1.16/30+10.1.1.20/30 не имеет смысла (что на самом деле наоброт).
Массив сетей это, предположим, некий вектор строковых значений вида XXX.XXX.XXX.XXX/XX , либо с обычной маской через пробел.  , каждый из таких видов записей является сетью, с которыми и можно и нужно производить некие операции.


 
kay ©   (2006-10-18 13:00) [12]

тебе процедура нужна, которая IP с маской в формате DWORD переводит в текстовы и наоборот?


 
ГореПрограммер   (2006-10-18 13:08) [13]

Я же написал в первом посте.


 
kay ©   (2006-10-18 20:46) [14]

вот, то, что у меня есть:
function StrToIP(const IpString1:string):DWORD;
var
 i:integer;
 IpString:string;
 Dip:DWORD;
begin
 IpString:=IpString1+".";
 Dip:=0;
 for i:=0 to 3 do
   begin
     Dip:=Dip or (WORD(StrToInt(Copy(IpString,0,Pos(".",IpString)-1))) shl (8*i));
     Delete(IpString, 1, Pos(".",IpString));
   end;
 StrToIP:=Dip;
end;

function IPToStr(const Dip:DWORD):string;
begin
 IPToStr:=IntToStr((Dip shl 24) shr 24)+"."+
          IntToStr((Dip shl 16) shr 24)+"."+
          IntToStr((Dip shl 8) shr 24)+"."+
          IntToStr((Dip shl 0) shr 24);
end;

вот преобразование маски сети в читабельную:
     tmp:=$FFFFFFFF shl (32-StrToInt(mask.Strings[i]));
     mask1.Add(IntToStr((tmp shl 0) shr 24)+"."+
               IntToStr((tmp shl 8) shr 24)+"."+
               IntToStr((tmp shl 16) shr 24)+"."+
               IntToStr((tmp shl 24) shr 24));

mask1:TStringList;


 
YurikGL ©   (2006-10-18 22:09) [15]


> пересчет масок в битовые и обратно

Для этого модуль не нужен... и пересчитывать ничего не нужно.... всего лишь двоичное представление числа.


> опредлеение принадлежности адреса к сети
Что понимается под сетью? Как она, по вашему, задается? Иными словами, какие входные параметры вы видете у этой процедуры?


> операции с сетиями (складывание, вычитание)
Долго думал, что это такое... не могли бы дать ссылку на теоретический материал по этой теме....


> определение адресов подсетей и броткастов.
Адрес подсети? Опять же... какие входные и выходные параметры должны быть у этой процедуры?   Броадкаст? Сделать такую функцию - минут 5... смотрим по маске какие биты, являются адресом хоста, и если все они равны 1, то IP-адрес - броадакст... Если, конечно, вопрос был про broadcast уровня IP :)


 
ГореПрограммер   (2006-10-19 15:00) [16]


> > пересчет масок в битовые и обратно
>
> Для этого модуль не нужен... и пересчитывать ничего не нужно.
> ... всего лишь двоичное представление числа.

Не совсем двоичное. От простого двоичного представления числа 32 вам вряд ли станет понятно что это маска 255.255.255.255

> > опредлеение принадлежности адреса к сети
> Что понимается под сетью? Как она, по вашему, задается?
> Иными словами, какие входные параметры вы видете у этой
> процедуры?

Сеть: 10.1.1.16/30   Соответственно передав процедуре сеть и некий IP 10.1.1.119 кпримеру, процедура должна вернуть true или false в зависимости от того принадлежит этот адрес сети или нет.

> > операции с сетиями (складывание, вычитание)
> Долго думал, что это такое... не могли бы дать ссылку на
> теоретический материал по этой теме....

Я же описал в этой теме на примере:
10.1.1.16/30 + 10.1.1.20/30 =10.1.1.16/29,
т.е.
10.1.1.16/255.255.255.252+10.1.1.20/255.255.255.252=10.1.1.16/255.255.255.248
Вроде как логичн ои понятно

> > определение адресов подсетей и броткастов.
> Адрес подсети? Опять же... какие входные и выходные параметры
> должны быть у этой процедуры?   Броадкаст? Сделать такую
> функцию - минут 5... смотрим по маске какие биты, являются
> адресом хоста, и если все они равны 1, то IP-адрес - броадакст.
> .. Если, конечно, вопрос был про broadcast уровня IP :)

Я и не утверждаю что это сложно ) передав процедуре сеть 10.1.1.16/30 процедура должна вернуть соответственно адрес подсети : 10.1.1.16 и адрес бродкаста: 10.1.1.19 )


 
ГореПрограммер   (2006-10-19 15:03) [17]

Еще было бы для примера очень полезна функция, возвращающая массив строк, состоящий из IP адресов сети, пример:
func (10.1.1.16/32)=[10.1.1.17,10.1.1.18]


 
ГореПрограммер   (2006-10-19 18:48) [18]

Вопрос такой, корректна ли данная функция перевода битовой маски в обычную ? т.е. результат то она правильный выдает, а вот со стороны кода ?
var ic,ic1,i:integer;
   iss,res:string;
begin
ic:=4294967295;
ic1:=round(power(2,(32-strtoint(t2.text)))-1);
ic:=ic-ic1;
iss:=inttohex(ic,8);
res:="";
for i:=1 to 4 do
begin
res:=res+inttostr(strtoint("$"+copy(iss,1,2)))+".";
iss:=copy(iss,3,length(iss)-2);
end;
res:=copy(res,1,length(res)-1);



Страницы: 1 вся ветка

Текущий архив: 2007.04.01;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.042 c
11-1150389913
DevilDevil
2006-06-15 20:45
2007.04.01
Как настроить подсказки?


1-1170663053
Нож
2007-02-05 11:10
2007.04.01
Получить список шар на компе в ЛВС


1-1171001707
Choco
2007-02-09 09:15
2007.04.01
Изменить размер видео в MediaPlayer


15-1173178219
Ega23
2007-03-06 13:50
2007.04.01
Так сколько раз будет вычеслено условие цикла???


1-1170616532
atruhin
2007-02-04 22:15
2007.04.01
Как перечислить зарегистрированные классы