There are several means for enumerating network resources. Some are indeed easier than others, but let me just throw out a few means that I know are proven. You could start out with the good old Win32 API in C/C++ and call the NetServerEnum method which will allow you to enumerate network resources such as domain controllers, SQL servers, or printers to name a few. However, that isn't going to be easy to consume from a managed language. Enter P/Invoke and Interop.
The next logical step would be to create a managed C++ wrapper class that would call the native APIs and then return the results in managed classes any .NET language could consume.
You could of course do all the work in VB.NET or C# using straight interop, but that will take more time than the previous suggestions.
You could also use Windows Management Instrumentation (WMI) or Windows Scripting Host (WScript.NETwork object to be more precise.)
If you are curious, there are many articles leading to free source code from other sites like www.codeproject.com or www.codeguru.com that would have example programs that demonstrate this. If you google the phrase "NetServerEnum C#" you should find several links to helpful articles covering this topic.
I would recommend the managed C++ wrapper or the pure C# classes using Interop. Keep things in a managed environment and you will thank yourself later!
Several good starting articles to read with source code examples can be found here. Both implement some of the techniques I have mentioned above.
This was first published in August 2004