Dylan
Dylan

Reputation: 471

Getting computer names from my network places

I was wondering if there is a way to get all the computer names that show up in my network places using C#.

Upvotes: 3

Views: 9560

Answers (3)

Chris Frazier
Chris Frazier

Reputation: 221

You will want to use the NetServerEnum() API. I dont believe there is a managed wrapper for this in the base .NET libraries but I was able to find this with a quick google search: http://www.codeproject.com/Articles/16113/Retreiving-a-list-of-network-computer-names-using

NOTE: I haven't tested or thoroughly reviewed the codeproject code but it should be enough of a starting point for what you need if there are any issues.

EDIT: Do not use DirectoryServices unless your sure of a domain environment. The System.DirectoryServices class is an ADSI wrapper that dosent work without an Active Directory to query against. NetServerEnum() works on workgroups and domains but dosen't guarantee the most reliable data (not all machines may show up). It relies on the Computer Browser service.

The best solution would probably be a class that wraps both possibilities and merges the results :/

Upvotes: 3

darin
darin

Reputation: 419

This works, but it takes a while. :/

public List<String> ListNetworkComputers()
{
    List<String> _ComputerNames = new List<String>();
    String _ComputerSchema = "Computer";
    System.DirectoryServices.DirectoryEntry _WinNTDirectoryEntries = new System.DirectoryServices.DirectoryEntry("WinNT:");
    foreach (System.DirectoryServices.DirectoryEntry _AvailDomains in _WinNTDirectoryEntries.Children) {
        foreach (System.DirectoryServices.DirectoryEntry _PCNameEntry in _AvailDomains.Children) {
            if (_PCNameEntry.SchemaClassName.ToLower().Contains(_ComputerSchema.ToLower())) {
            _ComputerNames.Add(_PCNameEntry.Name);
            }
        }
    }
    return _ComputerNames;
}

Upvotes: 3

SaravananArumugam
SaravananArumugam

Reputation: 3720

Depends on the user's permission, the application may or may not get those information.

Try using ActiveDirectory. This should get you precise information about the local network.

Use System.DirectoryServices.

Upvotes: 2

Related Questions