Текущий архив: 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