PDA

Ver la Versión Completa : Encontrar todos los dispositivos de red.


friendspark
21-11-2005, 18:37:53
Hola a todos, estoy tratando de buscar los nombres de todos los dispositivos de red junto con su mac y su ip(si tienen) y dividirlos en pantalla, mostrando por una parte aquellos que esten activos y por otra los que no, como el ipconfig/all.

Por ahora solo se encontrar la mac con este programa y su ip:

este programa me da la mac:


unit Macaddress;
interface
uses SysUtils, Nb30, Winsock;
function GetMACAdress: string;
implementation
function GetMACAdress: string;
var
NCB: PNCB;
Adapter: PAdapterStatus;
URetCode: PChar;
RetCode: char;
I: integer;
Lenum: PlanaEnum;
_SystemID: string;
TMPSTR: string;
begin
Result := '';
_SystemID := '';
Getmem(NCB, SizeOf(TNCB));//ncb
Fillchar(NCB^, SizeOf(TNCB), 0);
Getmem(Lenum, SizeOf(TLanaEnum));//defino Lenum
Fillchar(Lenum^, SizeOf(TLanaEnum), 0);
Getmem(Adapter, SizeOf(TAdapterStatus));//defino Adapter
Fillchar(Adapter^, SizeOf(TAdapterStatus), 0);
Lenum.Length := chr(0);
NCB.ncb_command := chr(NCBENUM);
NCB.ncb_buffer := Pointer(Lenum);
NCB.ncb_length := SizeOf(Lenum);
RetCode := Netbios(NCB);
i := 0;
repeat
Fillchar(NCB^, SizeOf(TNCB), 0);
Ncb.ncb_command := chr(NCBRESET);
Ncb.ncb_lana_num := lenum.lana[i];
RetCode := Netbios(Ncb);
Fillchar(NCB^, SizeOf(TNCB), 0);
Ncb.ncb_command := chr(NCBASTAT);
Ncb.ncb_lana_num := lenum.lana[i];
// Must be 16
Ncb.ncb_callname := '* ';
Ncb.ncb_buffer := Pointer(Adapter);
Ncb.ncb_length := SizeOf(TAdapterStatus);
RetCode := Netbios(Ncb);
writeln('ncb...', Ncb.ncb_length);
//---- calc _systemId from mac-address[2-5] XOR mac-address[1]...
//if (RetCode = chr(0)) or
//RetCode = chr(6)) then
//begin
_SystemId := IntToHex(Ord(Adapter.adapter_address[0]), 2) + '-' +
IntToHex(Ord(Adapter.adapter_address[1]), 2) + '-' +
IntToHex(Ord(Adapter.adapter_address[2]), 2) + '-' +
IntToHex(Ord(Adapter.adapter_address[3]), 2) + '-' +
IntToHex(Ord(Adapter.adapter_address[4]), 2) + '-' +
IntToHex(Ord(Adapter.adapter_address[5]), 2);
//writeln(Adapter);
writeln(_SystemId);
writeln(Ncb.ncb_command);
//end;
Inc(i);
until i>10{_SystemID <> '00-00-00-00-00-00'};
FreeMem(NCB);
FreeMem(Adapter);
FreeMem(Lenum);
GetMacAdress := _SystemID;
end;
end.