Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
Solved

MAC Addresses on Network

Posted on 2000-05-08
6
127 Views
Last Modified: 2010-04-04
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!

Regards,

Chris

0
Comment
Question by:cdk033198
  • 3
  • 2
6 Comments
 
LVL 20

Expert Comment

by:Madshi
ID: 2789529
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.
0
 
LVL 15

Expert Comment

by:simonet
ID: 2789830
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 http://www.delphifreestuff.com/examples/wnetexmp.html

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

Yours,

Alex
0
 
LVL 15

Accepted Solution

by:
simonet earned 300 total points
ID: 2789839
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;
var
wsdata : TWSAData;
  he : PHostEnt;
  ss : pchar;
  ip : TInAddr;
begin
WSAStartup(MakeWord(1, 1), wsdata);
  he := gethostbyname(pchar(name));
  if he<>nil then
  begin
   ip.S_addr := integer(pointer(he^. h_addr_list^)^);
     ss := inet_ntoa(ip);
     Result := string(ss);
  end;
  WSACleanup();
end;



Alex
0
Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 

Author Comment

by:cdk033198
ID: 2844870
Comment accepted as answer
0
 

Author Comment

by:cdk033198
ID: 2844871
Thank you. Sorry for delay in closing this question.
0
 
LVL 15

Expert Comment

by:simonet
ID: 2845016
>Thank you.

Anytime, cdk! Thanks.

Alex
0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

A lot of questions regard threads in Delphi.   One of the more specific questions is how to show progress of the thread.   Updating a progressbar from inside a thread is a mistake. A solution to this would be to send a synchronized message to the…
Hello everybody This Article will show you how to validate number with TEdit control, What's the TEdit control? TEdit is a standard Windows edit control on a form, it allows to user to write, read and copy/paste single line of text. Usua…
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…

791 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question