C#에서 도메인 이름 가져오기

Syed Hassan Sabeeh Kazmi 2023년10월12일
  1. ManagementObjectSearcher 클래스를 사용하여 C#에서 도메인 이름 가져오기
  2. System.Net.NetworkInformation 네임스페이스를 사용하여 C#에서 도메인 이름 가져오기
  3. System.Environment.UserDomainName을 사용하여 C#에서 도메인 이름 가져오기
  4. System.DirectoryServices.ActiveDirectory를 사용하여 C#에서 도메인 이름 가져오기
C#에서 도메인 이름 가져오기

이 자습서에서는 다양한 유형의 도메인 이름을 설명하고 C#의 특정 사용자에 대해 도메인 이름을 가져오는 방법을 보여줍니다. 도메인 이름은 Active Directory 도메인의 사용자/컴퓨터 보안 주체, 네트워크의 스택 기본 DNS 또는 네트워크에서 컴퓨터/사용자 IP 주소를 확인하는 DNS 이름일 수 있습니다.

C#에는 이러한 도메인 이름을 가져오고 요구 사항을 충족하고 작업에 크게 의존하는 이름을 선택하는 네 가지 기본 방법이 있습니다. 컴퓨터의 Active Directory 도메인을 찾는 경우 컴퓨터의 보안 주체와 사용자의 주체가 속한 도메인을 가져오거나 액세스하려고 합니다.

일반적으로 이 정보는 Active Directory와 안정적인 연결을 만들기를 원합니다. 사용자와 컴퓨터의 주체가 반드시 동일한 도메인에 있는 것은 아닙니다. 반면에 로컬 네트워크 스택의 기본 DNS 접미사도 얻고자 하는 도메인 이름이 될 수 있으며 대부분의 경우 액세스하거나 가져오는 것은 아마도 컴퓨터의 보안 주체와 현재 인증된 사용자의 주체가 속해 있습니다.

장치가 Active Directory와 관련이 있는 경우에도 LAN을 통해 성공적으로 연결하려면 로컬 네트워크의 스택 기본 DNS 접미사를 도메인 이름으로 원할 수 있습니다.

마지막 옵션은 사용자 IP 주소를 도메인 이름으로 사용하려는 경우 DNS 레코드가 0에서 무한대 사이일 수 있으며 현재 처리 중인 요청을 보내는 HTTP_HOST일 수 있습니다. 또한 Microsoft의 Active Directory와 관련이 없습니다.

ManagementObjectSearcher 클래스를 사용하여 C#에서 도메인 이름 가져오기

이는 System.Management 네임스페이스에 속하며 사용자가 특정 쿼리를 기반으로 관리 개체(도메인 이름이 관리 개체임)를 검색하도록 도와줍니다. 사용하기 쉽고 C# 초보자가 관리 정보 또는 도메인 이름을 검색하는 데 적합합니다.

디스크 드라이브, 네트워크 어댑터, 프로세스, 시스템 정보, 네트워크 연결, 일시 중지된 서비스 등에 대한 관리 정보를 열거할 수 있습니다. WMI 쿼리(ObjectQuery에 표시됨)를 인스턴스화할 때 입력으로 사용하고 ManagementScope는 WMI 네임스페이스를 나타냅니다. 사용자 쿼리를 실행합니다.

using System;
using System.Management;  // essential namespace
using System.Windows.Forms;

namespace domain_name {
  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e) {
      SelectQuery query = new SelectQuery("Win32_ComputerSystem");
      using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query)) {
        foreach (ManagementObject mo in searcher.Get()) {
          label1.Text = mo.ToString();
        }
      }
    }

    private void label1_Click(object sender, EventArgs e) {}
  }
}

출력:

ManagementObjectSearcher

C# 베테랑 및 숙련된 개발자는 EnumerationOptions에서 추가 고급 옵션을 활용할 수도 있습니다. ManagementObjectSearcher 클래스를 이해하는 것은 쉽습니다. 지정된 범위에서 주어진 쿼리를 실행하고 클래스 개체의 Get() 메서드가 호출될 때 ManagementObjectCollection의 쿼리와 일치하는 도메인 이름을 반환합니다.

컴퓨터가 관리자를 위해 Active Directory에 있을 때 도메인 이름을 동적으로 가져오는 완벽한 예입니다. SelectQuery를 사용하여 쿼리를 생성하고 이를 클래스 개체에 할당하고 해당 개체에 Get() 메서드를 적용하여 도메인 이름을 가져옵니다.

System.Net.NetworkInformation 네임스페이스를 사용하여 C#에서 도메인 이름 가져오기

System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName을 사용하여 네트워크 스택의 기본 DNS 접미사를 도메인 이름으로 가져오고 컴퓨터/사용자 IP 주소를 확인하는 DNS 이름을 가져올 수 있습니다.

IPGlobalProperties.DomainName 속성은 System.Net.NetworkInformation 네임스페이스에 속하며 로컬 컴퓨터가 등록된 도메인 이름을 가져올 수 있습니다.

IPGlobalProperties 개체에는 로컬 컴퓨터에 대한 도메인 정보(시스템 제공 유형)가 포함되며 System.Net.NetworkInformation 네임스페이스는 네트워크 트래픽 데이터 및 네트워크 주소 정보에 대한 액세스를 제공합니다.

그러나 로컬 컴퓨터의 네트워크 인터페이스에 대한 정보가 필요한 경우 NetworkInterface 클래스를 사용할 수 있습니다.

using System;
using System.Net.NetworkInformation;  // essential namespace
using System.Windows.Forms;

namespace domain_name {
  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e) {
      IPGlobalProperties properties = IPGlobalProperties.GetIPGlobalProperties();
      string domain_name = properties.DomainName.ToString();
      label1.Text = domain_name;
    }

    private void label1_Click(object sender, EventArgs e) {}
  }
}

출력:

네트워크 정보

System.Environment.UserDomainName을 사용하여 C#에서 도메인 이름 가져오기

System 네임스페이스의 일부인 Environment.UserDomainName 속성은 네트워크 도메인 이름 또는 현재 사용자와 연결된 보안 주체의 도메인을 가져옵니다.

OS가 도메인 정보 검색을 지원하지 않거나 네트워크 도메인 이름에 액세스할 수 없는 경우 서버, 로컬 네트워크 또는 컴퓨터에서 도메인 이름을 검색하는 데 문제가 발생할 수 있습니다.

사용자 도메인 이름 또는 도메인 계정 자격 증명은 \ 문자와 사용자 이름으로 형식이 지정됩니다. UserDomainName 속성의 도움으로 사용자 이름 없이 사용자의 도메인 이름을 얻을 수 있고 UserName 속성의 도움으로 도메인 이름 없이 사용자 이름을 얻을 수 있습니다.

using System;
using System.Windows.Forms;

namespace domain_name {
  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e) {
      label1.Text = Environment.UserDomainName;
    }

    private void label1_Click(object sender, EventArgs e) {}
  }
}

출력:

사용자 도메인 이름

UserDomainName 속성의 기본 목적은 현재 사용자(귀하를 지칭함)에 대한 Windows 계정 이름의 도메인 이름을 가져오는 것입니다.

이 속성을 통해 도메인 이름을 가져오려는 시도가 실패하는 경우 UserName 속성에 언급된 사용자와 연결된 도메인 이름을 자동으로 검색/가져오려고 시도할 수 있습니다.

System.DirectoryServices.ActiveDirectory를 사용하여 C#에서 도메인 이름 가져오기

System.DirectoryServices.ActiveDirectory.Domain.GetComputerDomain() 메서드를 사용하여 Active Directory에 속하는 현재 컴퓨터 보안 원칙의 도메인을 가져올 수 있습니다.

로컬 컴퓨터 또는 시스템이 정보를 검색하려는 도메인의 일부가 아니거나 도메인 컨트롤러가 연결되지 않은 경우 ActiveDirectoryObjectNotFoundException 예외가 발생합니다.

GetComputerDomain 메서드는 System.DirectoryServices.ActiveDirectory 네임스페이스의 일부인 Domain 클래스에 속합니다. Domain.GetComputerDomain 메서드를 사용하여 네임스페이스에 대한 참조를 제공하여 C#에서 도메인 이름을 가져올 수 있습니다.

도메인 이름을 나타내는 도메인 개체를 반환하며 애플리케이션이 실행되는 도메인 자격 증명과 독립적입니다.

using System;
using System.DirectoryServices;
using System.DirectoryServices.ActiveDirectory;
using System.Windows.Forms;

namespace domain_name {
  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e) {
      label1.Text = Domain.GetComputerDomain().ToString();
    }

    private void label1_Click(object sender, EventArgs e) {}
  }
}

출력:

ActiveDirectory

신뢰할 수 있거나 승인된 계정 도메인 자격 증명에 관계없이 GetCurrentDomain 방법을 사용하여 컴퓨터의 도메인 이름을 쉽게 검색할 수 있습니다. 상위 수준 추상화 도메인의 개체 모델에 액세스하여 Microsoft Active Directory 서비스의 일부로 도메인 정보를 가져올 수 있습니다.

이 자습서에서는 C#에서 도메인 이름을 가져오는 방법을 설명했습니다. AD 도메인 이름, 네트워크 도메인 이름, 로컬 컴퓨터의 도메인 이름 또는 C# 애플리케이션의 성능을 유지하면서 언급된 접근 방식으로 얻을 수 있는 기타 이름이 될 수 있습니다.

Syed Hassan Sabeeh Kazmi avatar Syed Hassan Sabeeh Kazmi avatar

Hassan is a Software Engineer with a well-developed set of programming skills. He uses his knowledge and writing capabilities to produce interesting-to-read technical articles.

GitHub