![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Модуль работы с IP сетями. [D7, WinXP]
ГореПрограммер © (2006-10-17 18:44:00)Здравствуйте.
Возможно тко- то уже сталкивался. Может есть у кого- нибудь модуль работы с IP адресами и масками ? вот примерный список требований:
пересчет масок в битовые и обратно
опредлеение принадлежности адреса к сети
операции с сетиями (складывание, вычитание)
определение адресов подсетей и броткастов.
....
ГореПрограммер (2006-10-19 18:48:00) [1]Вопрос такой, корректна ли данная функция перевода битовой маски в обычную ? т.е. результат то она правильный выдает, а вот со стороны кода ?
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);
ГореПрограммер (2006-10-19 15:03:00) [2]Еще было бы для примера очень полезна функция, возвращающая массив строк, состоящий из IP адресов сети, пример:
func (10.1.1.16/32)=[10.1.1.17,10.1.1.18]
ГореПрограммер (2006-10-19 15:00:00) [3]
> > пересчет масок в битовые и обратно
>
> Для этого модуль не нужен... и пересчитывать ничего не нужно.
> ... всего лишь двоичное представление числа.
Не совсем двоичное. От простого двоичного представления числа 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 )
YurikGL (2006-10-18 22:09:00) [4]
> пересчет масок в битовые и обратно
Для этого модуль не нужен... и пересчитывать ничего не нужно.... всего лишь двоичное представление числа.
> опредлеение принадлежности адреса к сети
Что понимается под сетью? Как она, по вашему, задается? Иными словами, какие входные параметры вы видете у этой процедуры?
> операции с сетиями (складывание, вычитание)
Долго думал, что это такое... не могли бы дать ссылку на теоретический материал по этой теме....
> определение адресов подсетей и броткастов.
Адрес подсети? Опять же... какие входные и выходные параметры должны быть у этой процедуры? Броадкаст? Сделать такую функцию - минут 5... смотрим по маске какие биты, являются адресом хоста, и если все они равны 1, то IP-адрес - броадакст... Если, конечно, вопрос был про broadcast уровня IP :)
kay (2006-10-18 20:46:00) [5]вот, то, что у меня есть:
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;
ГореПрограммер (2006-10-18 13:08:00) [6]Я же написал в первом посте.
kay (2006-10-18 13:00:00) [7]тебе процедура нужна, которая IP с маской в формате DWORD переводит в текстовы и наоборот?
ГореПрограммер (2006-10-18 11:06:00) [8]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 , либо с обычной маской через пробел. , каждый из таких видов записей является сетью, с которыми и можно и нужно производить некие операции.
Сергей М. (2006-10-18 10:56:00) [9]
> ГореПрограммер (18.10.06 10:41) [9]
> что такое маски я знаю
Еще бы ты пояснил, что такое "массив сетей" и "складывание, вычитание сетей".
Массив IP-адресов - это еще можно понять, логические/арифметические операции над этими адресами - это тоже можно понять, но "массив сетей" и "складывание, вычитание сетей" - это нонсенс.
ГореПрограммер (2006-10-18 10:41:00) [10]И что ?
что такое маски я знаю и таблица соответствия вещь далеко не новая. Вы мой вопрос читали ?
Rouse_ (2006-10-18 10:22:00) [11]http://www.hub.ru/modules.php?name=Pages&op=showpage&pid=45
ГореПрограммер (2006-10-17 19:02:00) [12]первая задача пришелшая на ум:
есть массив сетей, необходимо проверить, предположим, "заполненность" С сети.
самый просто вариант это складывание имеющегося массива для проверки на выходе наличия 24-й маски.
Это самое простое что только что пришло в голову, подобных задач великое множество.
Ketmar (2006-10-17 18:52:00) [13]раскроите мне череп, но всё равно не понимаю. господа, сведущие в сетях: это вообще имеет какой-нибудь смысл???
ГореПрограммер (2006-10-17 18:50:00) [14]10.1.1.16/29
kay (2006-10-17 18:49:00) [15]а что в итоге должно получиться?
Ketmar (2006-10-17 18:48:00) [16]и что должно быть в итоге? как-то напрочь не понимаю. более того -- не понимаю, зачем делать сии странные телодвижения.
ГореПрограммер (2006-10-17 18:47:00) [17]10.1.1.16/30+10.1.1.20/30
Ketmar (2006-10-17 18:45:00) [18]>[0] ГореПрограммер 17-Oct-2006, 18:44
>операции с сетиями (складывание, вычитание)
это как, пардон???