Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-02-2013
marcial marcial is offline
Miembro
 
Registrado: may 2003
Posts: 147
Poder: 21
marcial Va por buen camino
Identificar los equipos de la red

Hola a todos:
Trabajo con D5 y, aunque llevo mucho tiempo buscando, no he encontrado nada sencillo para identificar los equipos que estan conectados a la red.
Me gustaria obtener algo como esto, en un Memo o ListView, etc.:

Servidor 192.168.1.2
Puesto1 192.168.1.3
Puesto2 192.168.1.4

He buscado (trucomania,About,DelphiPages, etc) y hay algunas cosas que te dan mucha información (recursos y tipos, etc) pero no van bien en Delphi5. Otras (ya tengo una), para obtener sólo el nombre de MI equipo y MI IP, pero necesito las de toda la red.

Muchas gracias por vuestro tiempo.
Responder Con Cita
  #2  
Antiguo 07-02-2013
Avatar de TOPX
TOPX TOPX is offline
Miembro
 
Registrado: may 2008
Ubicación: Bogotá
Posts: 527
Poder: 16
TOPX Va camino a la fama
Hola,

Pues, acabo de encontrar:
Para probarla, como en D5 no hay StrUtils, sólo debí cambiar los llamados a StartsStr() y PosEx() por una implementación propia y listo.

Espero que le sirva.

-
__________________
"constructive mind, destructive thoughts"

Última edición por TOPX fecha: 07-02-2013 a las 15:36:21. Razón: Sintaxis.
Responder Con Cita
  #3  
Antiguo 07-02-2013
marcial marcial is offline
Miembro
 
Registrado: may 2003
Posts: 147
Poder: 21
marcial Va por buen camino
Gracias POX, voy a probarlas y te cuento.
Responder Con Cita
  #4  
Antiguo 07-02-2013
marcial marcial is offline
Miembro
 
Registrado: may 2003
Posts: 147
Poder: 21
marcial Va por buen camino
Hola TopX
He systituido los Startstr y los PosEx pero no entiendo bien cómo lo hace. He puesto un showmessage, ejecuta las rutinas y me da los nombres de los puestos, pero cuado pongo un memo en el form y donde tengo el shoemessage (en el procedure ScanLevel) me dice que no existe ningún memo (cuando yo lo estoy viendo en el formulario y además está definido junto con un button y un edit).
Seguiré buscando.
Muchas gracias de todas formas.
Responder Con Cita
  #5  
Antiguo 08-02-2013
Avatar de TOPX
TOPX TOPX is offline
Miembro
 
Registrado: may 2008
Ubicación: Bogotá
Posts: 527
Poder: 16
TOPX Va camino a la fama
marcial,

El código referido está orientado a ser utilizado en una aplicación de consola; de esa manera sólo basta el cambio de las funciones mencionadas.

Ya si lo quiere utilizar en una aplicación visual, el trabajo es diferente. Por este medio tal vez no pueda explicar bien que los procedure deben ser miembros de una clase a la que se pueda acceder, pero en el siguiente hilo hay un ejemplo que tal vez le guíe: -
__________________
"constructive mind, destructive thoughts"
Responder Con Cita
  #6  
Antiguo 08-02-2013
marcial marcial is offline
Miembro
 
Registrado: may 2003
Posts: 147
Poder: 21
marcial Va por buen camino
Gracias TOPX
Intentaré adaptarlo y si no lo consigo , porque tampoco tengo las uses que necesita, consultaré al cliente para ver si se puede cambiar el programa para omitir este paso.
Gracias otra vez por tu atención.
Responder Con Cita
  #7  
Antiguo 08-02-2013
Avatar de TOPX
TOPX TOPX is offline
Miembro
 
Registrado: may 2008
Ubicación: Bogotá
Posts: 527
Poder: 16
TOPX Va camino a la fama
Para quien le sirva:
1) A continuación, el código original, publicado en Network infrastructure discovery - StackOverflow por [RRUZ]:
Código Delphi [-]
{$APPTYPE CONSOLE}

{$R *.res}

uses
  StrUtils, Windows, WinSock, SysUtils;

type
  PNetResourceArray = ^TNetResourceArray;
  TNetResourceArray = array[0..1023] of TNetResource;

function SendArp(DestIP,SrcIP: ULONG;pMacAddr: pointer;PhyAddrLen: pointer): DWord; 
  StdCall; external 'iphlpapi.dll' name 'SendARP';

function GetIPAddress(const HostName: AnsiString): AnsiString;
var
  HostEnt: PHostEnt;
  Host: AnsiString;
  SockAddr: TSockAddrIn;
begin
  Result := '';
  Host := HostName;
  if Host = '' then
  begin
    SetLength(Host, MAX_PATH);
    GetHostName(PAnsiChar(Host), MAX_PATH);
  end;
  HostEnt := GetHostByName(PAnsiChar(Host));
  if HostEnt <> nil then
  begin
    SockAddr.sin_addr.S_addr := Longint(PLongint(HostEnt^.h_addr_list^)^);
    Result := inet_ntoa(SockAddr.sin_addr);
  end;
end;

function GetMacAddr(const IPAddress: AnsiString; var ErrCode : DWORD): AnsiString;
var
 MacAddr    : Array[0..5] of Byte;
 DestIP     : ULONG;
 PhyAddrLen : ULONG;
begin
  Result    :='';
  ZeroMemory(@MacAddr,SizeOf(MacAddr));
  DestIP    :=inet_addr(PAnsiChar(IPAddress));
  PhyAddrLen:=SizeOf(MacAddr);
  ErrCode   :=SendArp(DestIP,0,@MacAddr,@PhyAddrLen);
  if ErrCode = S_OK then
   Result:=AnsiString(Format('%2.2x-%2.2x-%2.2x-%2.2x-%2.2x-%2.2x',
    [MacAddr[0], MacAddr[1],MacAddr[2], MacAddr[3], MacAddr[4], MacAddr[5]]));
end;

function ParseRemoteName(Const lpRemoteName : string) : string;
begin
  Result:=lpRemoteName;
  if StartsStr('\\', lpRemoteName) and (Length(lpRemoteName)>2) and 
  (LastDelimiter('\', lpRemoteName)>2) then
   Result:=Copy(lpRemoteName, 3, PosEx('\', lpRemoteName,3)-3)
  else
  if StartsStr('\\', lpRemoteName) and (Length(lpRemoteName)>2) and 
  (LastDelimiter('\', lpRemoteName)=2) then
   Result:=Copy(lpRemoteName, 3, length(lpRemoteName));
end;

function CreateNetResourceList(ResourceType: DWord;
                              NetResource: PNetResource;
                              out Entries: DWord;
                              out List: PNetResourceArray): Boolean;
var
  EnumHandle: THandle;
  BufSize: DWord;
  Res: DWord;
begin
  Result := False;
  List := Nil;
  Entries := 0;
  if WNetOpenEnum(RESOURCE_GLOBALNET, ResourceType, 0, NetResource, EnumHandle) = NO_ERROR then
  begin
    try
      BufSize := $4000;  // 16 kByte
      GetMem(List, BufSize);
      try
        repeat
          Entries := DWord(-1);
          FillChar(List^, BufSize, 0);
          Res := WNetEnumResource(EnumHandle, Entries, List, BufSize);
          if Res = ERROR_MORE_DATA then
          begin
            ReAllocMem(List, BufSize);
          end;
        until Res <> ERROR_MORE_DATA;

        Result := Res = NO_ERROR;
        if not Result then
        begin
          FreeMem(List);
          List := Nil;
          Entries := 0;
        end;
      except
        FreeMem(List);
        raise;
      end;
    finally
      WNetCloseEnum(EnumHandle);
    end;
  end;
end;

procedure ScanNetworkResources(ResourceType, DisplayType: DWord);

  procedure ScanLevel(NetResource: PNetResource);
  var
    Entries: DWord;
    NetResourceList: PNetResourceArray;
    i: Integer;
    IPAddress, MacAddress : AnsiString;
    ErrCode : DWORD;
  begin
    if CreateNetResourceList(ResourceType, NetResource, Entries, NetResourceList) then try
      for i := 0 to Integer(Entries) - 1 do
      begin
        if (DisplayType = RESOURCEDISPLAYTYPE_GENERIC) or
          (NetResourceList[i].dwDisplayType = DisplayType) then
          begin
            IPAddress   :=GetIPAddress(ParseRemoteName(AnsiString(NetResourceList[i].lpRemoteName)));
            MacAddress  :=GetMacAddr(IPAddress, ErrCode);
            Writeln(Format('Remote Name %s Ip %s MAC %s',
              [NetResourceList[i].lpRemoteName, IPAddress, MacAddress]));
          end;
        if (NetResourceList[i].dwUsage and RESOURCEUSAGE_CONTAINER) <> 0 then
          ScanLevel(@NetResourceList[i]);
      end;
    finally
      FreeMem(NetResourceList);
    end;
  end;
begin
  ScanLevel(Nil);
end;

var
  WSAData: TWSAData;
begin
  try
   if WSAStartup($0101, WSAData)=0 then
   try
     ScanNetworkResources(RESOURCETYPE_ANY, RESOURCEDISPLAYTYPE_SERVER);
     Writeln('Done');
   finally
     WSACleanup;
   end;
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
  Readln;
end.

2) Y adjunto a este mensaje
  • captura de pantalla de la aplicación de consola y
  • el código fuente adaptado (improvisadamente) para una aplicación visual hecha en Delphi 5.

-
Imágenes Adjuntas
Tipo de Archivo: jpg 82202_consola.jpg (29,6 KB, 21 visitas)
Archivos Adjuntos
Tipo de Archivo: zip 82202.zip (146,7 KB, 25 visitas)
__________________
"constructive mind, destructive thoughts"
Responder Con Cita
  #8  
Antiguo 09-02-2013
marcial marcial is offline
Miembro
 
Registrado: may 2003
Posts: 147
Poder: 21
marcial Va por buen camino
Hola TOPX

Gracias por intentar ayudarme, pero por desgracia hay un problema cuando trato de descomprimir el archivo adaptado para Delphi5.
Dice 82202.zip: Final Inesperado del Archivo.

¿Podrías intentar subirlo otra vez?
De todas formas, te debo una.
Gracias otra vez
Responder Con Cita
  #9  
Antiguo 09-02-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Yo lo he descargado sin problemas.
Responder Con Cita
  #10  
Antiguo 09-02-2013
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.

Tampoco tuve problemas en abrir o descargar el archivo. (Mozilla Firefox)

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #11  
Antiguo 09-02-2013
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.485
Poder: 20
MAXIUM Va camino a la fama
¿Hay forma de obtener los comentarios?. Algo tan útil en hasta Windows XP y que desapareció en Windows 7
Responder Con Cita
  #12  
Antiguo 09-02-2013
marcial marcial is offline
Miembro
 
Registrado: may 2003
Posts: 147
Poder: 21
marcial Va por buen camino
Ahora si lo he podido abrir sin problemas. Con Mozilla Firefox.
Gracias por el aporte.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Identificar el Alt+R AGAG4 Varios 7 17-04-2010 05:18:46
Identificar objeto rruffino Impresión 3 14-03-2008 14:58:53
Identificar la aplicacion eliash OOP 4 07-02-2006 20:37:43
Identificar campos torito Conexión con bases de datos 1 22-08-2005 20:05:23
Identificar el Tabulador AGAG4 Varios 6 09-09-2004 12:26:09


La franja horaria es GMT +2. Ahora son las 03:06:26.


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