Cita:
Empezado por paquechu
Bueno, por lo que veo has diseñado la funcion añadiendo la mascara a la IP aunque la mascara yo necesito que este en la parte del parametro red.
Este es el codigo PHP (je,je no C) que puse en el otro post que comentas. El primer parametro es la ip y el segundo es la red y mascara.
|
Ha, pero eso es muy simple de solucionar...
Código Delphi
[-]
function IsIPBelongsToNet(sIP, sRed: string): Boolean;
var
Mask, IP, Red: LongWord;
TS : TStrings;
i : Integer;
begin
Mask := $FFFFFFFF;
i := Pos('/', sRed);
if i <> 0 then
begin
Mask := $FFFFFFFF shl (32 - StrToInt(Copy(sRed, i+1, MaxInt)));
Delete(sRed, i, MaxInt);
end;
TS := TStringList.Create;
try
ExtractStrings([' ','.'], [], PChar(sIP), TS);
IP := StrToInt(TS[0]);
for i:= 1 to TS.Count-2 do
begin
IP := IP or StrToInt(TS[i]);
IP := IP shl 8;
end;
IP := IP or StrToInt(TS[TS.Count-1]);
TS.Clear;
ExtractStrings([' ','.'], [], PChar(sRed), TS);
Red := StrToInt(TS[0]);
for i:= 1 to TS.Count-2 do
begin
Red := Red or StrToInt(TS[i]);
Red := Red shl 8;
end;
Red := Red or StrToInt(TS[TS.Count-1]);
Result := (IP and Mask) = (Red and Mask);
finally
TS.Free
end
end;
La llamada ahora tendría que ser
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
const
CLASE_A = '/8';
CLASE_B = '/16';
CLASE_C = '/24';
begin
if IsIPBelongsToNet('192.168.1.80', '192.168.2.0'+CLASE_C) then
ShowMessage('pertenece a la red')
else
ShowMessage('no pertenece a la red');
if IsIPBelongsToNet('10.100.40.30', '10.127.0.0/11' ) then
ShowMessage('pertenece a la red')
else
ShowMessage('no pertenece a la red');
end;
Saludos.