Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-08-2014
rchavezh rchavezh is offline
Miembro
 
Registrado: sep 2005
Ubicación: Guadalajara, Jalisco, México
Posts: 23
Poder: 0
rchavezh Va por buen camino
Comparar IP`s con la finalidad si son del mismo segmento de red

Hola requiero de su ayuda apra realziar lo siguiente

estoy desarrolando una aplicacion de chat interno para una empresa

la aplicacion ya funciona pero resulta que se require validad que las ips en comunicacion sean del mismo segmento de red

yo se que por ejemplo si

equipo a tiene 192.168.1.34 mascara 255.255.255.0
y el equipo b tiene 192.168.1.35 mascara 255.255.255.0

los equipos pertencen a la misma red

al momento no he encontrado como obtener la mascara de sub red para programar la funcion que realize los comprativos

de antemano muchas gracias
Responder Con Cita
  #2  
Antiguo 22-08-2014
Avatar de juanelo
juanelo juanelo is offline
Miembro
 
Registrado: sep 2007
Posts: 1.083
Poder: 18
juanelo Va por buen camino
Que tal rchavezh,
Dificilmente vas obtener la mascara de subred de la maquina que responde (si es que esta no la envía explicitamente el equipo que responde dentro de los mensajes que se intercambian), pero lo que si tienes es la IP Local, la Mascara Local y la IP del equipo que responde.
Para saber si dos IP corresponden a la misma "subred", lo que unico que tienes que hacer es "aplicar binariamente la submascara de Red" que que tienes, si el resultado de cada segmento de la IP resultasen iguales entonces te encuentras en la misma "subred".
Para obtener la informacion de tu red local (en realidad de todos los adaptadores de red conectados a tu maquina, y si es un equipo basado en windows) puedes usar las funciones de la API:GetAdaptersInfo
Saludos
__________________
Ya tengo Firma!
Responder Con Cita
  #3  
Antiguo 22-08-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola rchavezh.

Es como te explica juanelo, te pongo un código de aproximación como ejemplo:
Código Delphi [-]
....
type
  TNetClass = (A, B, C);

const
  NETCLASS: array[TNetClass] of Byte = (8, 16, 24);

procedure TForm1.FormCreate(Sender: TObject);
begin
  EditIP1.Text:= '163.209.141.0';
  EditIP2.Text:= '163.209.142.23';
  EditMask1.Text:= '255.255.255.0';
  EditMask2.Text:= '255.255.255.0';
end;

function IPToBin(const IP: string): string;
  function ToBin(Value: Integer): string;
  var
    i: Integer;
  begin
    Result:= '';
    for i:= 7 downto 0 do
      Result := Result+ Chr(Ord('0')+ (Value shr i and 1));
  end;
var
  TS: TStrings;
  i: Integer;
begin
  Result:= '';
  TS:= TStringList.Create;
  try
    TS.Delimiter:= '.';
    TS.DelimitedText:= IP;
    for i:= 0 to TS.Count-1 do
      Result:= Result + ToBin(StrToInt(TS[i]))+'.';
    SetLength(Result, Length(Result)-1);
  finally
    TS.Free;
  end;
end;
function ProcessIP(ip, ms: string): string;
var
  TS: TStrings;
  v1,v2: array[0..3] of Integer;
  i: Integer;
begin
  TS:= TStringList.Create;
  try
    TS.Delimiter:= '.';
    TS.DelimitedText:= ip;
    for i:= 0 to 3 do v1[i]:= StrToInt(TS[i]);
    TS.DelimitedText:= ms;
    for i:= 0 to 3 do v2[i]:= StrToInt(TS[i]);
    for i:= 0 to 3 do Result:= Result +IntToStr(v1[i] and v2[i]) + '.';
    SetLength(Result,Length(Result)-1);
  finally
    TS.Free;
  end;
end;

function SameNetwork(net1, net2: string; const submask: Integer): Boolean;
var
  i: Integer;
begin
  Result:= True;
  net1:= StringReplace(net1, '.', '', [rfReplaceAll]);
  net2:= StringReplace(net2, '.', '', [rfReplaceAll]);
  for i:= 1 to submask do
  begin
    if net1[i]<>net2[i] then
    begin
      Result:= False;
      Exit;
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  r1, r2: string;
begin
  r1:= IPToBin(ProcessIP(EditIP1.Text, EditMask1.Text));
  r2:= IPToBin(ProcessIP(EditIP2.Text, EditMask2.Text));
  if SameNetwork(r1, r2, NETCLASS[C]) then
    ShowMessage('IP2 pertenece a la misma subred clase C')
  else
    ShowMessage('IP2 no pertenece a misma subred clase C'); //<--
  // Sin embargo,
  if SameNetwork(r1, r2, NETCLASS[b]) then
    ShowMessage('IP2 pertenece a la misma subred clase B')  //<--
  else
    ShowMessage('IP2 no pertenece a misma subred clase B');
  // y, en este caso, es claro que también pertenece a clase A
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ficheros con el mismo nombre en el mismo directorio Casimiro Notevi La Taberna 7 04-03-2011 16:52:07
Comparar 2 versiones del mismo programa mierda Varios 3 05-07-2007 16:14:51
No es lo mismo, ni quiere decir lo mismo obiwuan Humor 35 21-12-2006 20:25:48
comparar hora ebeltete Varios 4 31-01-2006 16:02:18
comparar con el mod emiliu Varios 1 23-01-2006 20:55:53


La franja horaria es GMT +2. Ahora son las 01:56:22.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi