MAC Addresses on Network

I am using both D3 and D5. I am in search of Delphi code and/or documentation that will allow me to do the following on an NT 4.x/5.x/2000 network:

From a single workstation (presumably an NT workstation but I suppose it could be a Win9X workstation) logged into this NT domain I would like to be able to be able to determine the IP address of every other workstation that is currently logged into the same domain, and (more importantly) determine the hardware MAC address of every other workstation that is currently logged into this domain.

All of the above is quite simple to do in a Novell environment but I have been searching for weeks for a way to do this on an NT network. Any help would be greatly appreciated!



Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

simonetConnect With a Mentor Commented:
To get the IP from the enumerated machine name, use the function below:

Now, the second step is to get the IP for each machine found. For that you can use the function below, passing the name of the machine as the parameter:

uses WinSock;

function GetAddressByName(name : string) : string;
wsdata : TWSAData;
  he : PHostEnt;
  ss : pchar;
  ip : TInAddr;
WSAStartup(MakeWord(1, 1), wsdata);
  he := gethostbyname(pchar(name));
  if he<>nil then
   ip.S_addr := integer(pointer(he^. h_addr_list^)^);
     ss := inet_ntoa(ip);
     Result := string(ss);

You should post a link to this question in the "Windows programming" forum. This sounds like a quite difficult question, so it would surely help to make the C++ guys look at this question, too.
Piece of cake!

The hardest part, but still not impossible is to enumerate the MAC address. There are no remote calls that will retrieve that, so you'll have to create a "listener" for that, which will install on Windows (9x/NT/2k) as a service, so it's invisible.

The listener service works pretty much like Microsoft SMS, BackOriffice, Netbus, etc.: it's a program that listens do a specific TCP/IP port (you define what port it is), and responds to specific commands. The commands are sent out by the server machine (which contains the server app). One of the commands can be something like "#GET-MAC-ADDR@", and then the host machine reads (locally) the MAC addr and sends it over the TCP/IP port.

Enumerating the IP addresses in the local network is easier. There are functions that will let you enumerate all machines on a given LAN. YOu simply get the machine's name and convert it to its IP addr. The enumeration code can be found at

I have some source code at home that I'll send you later on with all this I am talking about.


Receive 1:1 tech help

Solve your biggest tech problems alongside global tech experts with 1:1 help.

cdk033198Author Commented:
Comment accepted as answer
cdk033198Author Commented:
Thank you. Sorry for delay in closing this question.
>Thank you.

Anytime, cdk! Thanks.

All Courses

From novice to tech pro — start learning today.