2012-04-19 4 views
3

C#을 사용하여 네트워크 환경에 나타나는 모든 컴퓨터 이름을 가져 오는 방법이 있는지 궁금합니다.내 네트워크 환경에서 컴퓨터 이름 가져 오기

+1

중복 질문 : http://stackoverflow.com/questions/5581140/in-c-sharp-how-do-i-get-the-list-of-local-computer-names-like-what-one- gets-view –

+0

심지어 분명히 http://stackoverflow.com/questions/2557551/how-get-list-of-local-network-computers/2562302#2562302에서 속은 것으로 보입니다. –

답변

3

NetServerEnum() API를 사용하는 것이 좋습니다. http://www.codeproject.com/Articles/16113/Retreiving-a-list-of-network-computer-names-using

참고 : 내가 시험 또는 철저하게 CodeProject의 코드를 검토하지 않은하지만 난 거기에 기본 .NET 라이브러리에서 이것에 대한 관리되는 래퍼는하지만 빠른 구글 검색에 이것을 발견 할 수 있었다 생각하지 말아 어떤 문제가있는 경우 필요한 것의 출발점으로 충분해야합니다.

EDIT : 도메인 환경이 확실하지 않은 경우 DirectoryServices를 사용하지 마십시오.. System.DirectoryServices 클래스는 쿼리 할 Active Directory없이 작업을 수행하는 ADSI 래퍼입니다. NetServerEnum()은 작업 그룹 및 도메인에서 작동하지만 가장 신뢰할 수있는 데이터를 보장하지는 않습니다 (일부 시스템이 표시되지 않을 수도 있음). 그것은 컴퓨터 브라우저 서비스에 의존합니다.

가장 좋은 방법은 아마 결과를 모두 가능성을 감싸고 병합 ​​클래스 될 것이다 :/

+0

이것은 매우 어리석은 질문 일지 모르지만, 'net view> computerListing.txt'를 실행하는 것이 더 쉽지 않을까요? StreamReader를 사용하여 읽기 만하면됩니다. –

+0

정말 고마워요! 당신의 설명은 제가 이해하는 데 정말로 도움이되었습니다! –

3

이 방법은 효과가 있지만 시간이 오래 걸립니다. :/

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; 
} 
2

는 사용자의 허가에 따라 다름, 응용 프로그램 또는 그 정보를 얻을 수도 있고 그렇지 않을 수도 있습니다.

ActiveDirectory를 사용해보십시오. 이렇게하면 로컬 네트워크에 대한 정확한 정보를 얻을 수 있습니다.

System.DirectoryServices를 사용하십시오.

관련 문제