.NET에서 컴퓨터 이름을 얻는 방법


285

.NET C #에서 컴퓨터 이름을 얻는 방법

c#  .net 

중복 질문 링크
말라기

1
@Malachi, 그 질문은 Windows 서비스에 관한 것입니다.
Sam

2
@Sam a windows service는 백그라운드에서 실행되는 Windows 응용 프로그램이므로 실제로는 동일합니다.
말라 치

@ 말라 치, 네, 무슨 말인지 알 겠어요. 그러나이 질문에 대한 답변 에서이 작업을 수행하는 ASP.NET 관련 및 Winforms 관련 방법에 대한 언급은 해당 질문에 적용되지 않을 것이라고 생각합니다.
Sam

1
@Malachi, ASP.NET에 대해 내가 무엇을 의미했는지 오해 한 것 같습니다. 클라이언트의 컴퓨터 이름을 가져 오는 ASP.NET 응용 프로그램을 언급하지는 않았지만 응용 프로그램이 클라이언트의 IP 주소를 가져 오기 때문에 DNS 이름의 경우 그렇게 쉽습니다. 호스트 컴퓨터 이름을 얻는 ASP.NET 응용 프로그램을 언급하고있었습니다. 예를 보려면 여기에서 가장 높은 등급의 답변을 참조하십시오.
Sam

답변:


400

C # /. NET에서 로컬 컴퓨터의 FQDN을 찾는 방법을 참조하십시오 . 마지막으로 FQDN을 제공하지 않고 필요한 경우.

SystemInformation.ComputerName, Environment.MachineName 및 Net.Dns.GetHostName의 차이점에 대한 자세한 내용을 참조하십시오.


3
@ tvanfosson : 차이점은 무엇입니까? 언제 어떤 것을 사용해야합니까? 보안에 영향이 있습니까?
PK

26
첫 번째는 콘솔 또는 winforms 앱에서, 두 번째는 웹 앱에서, 세 번째는 FQDN을 받아야하는 경우 사용합니다. 필요한 권한에 대한 정보는 참조 문서를 참조하십시오.
tvanfosson

1
@tvanfosson이 세 가지 모두 페이지에 액세스하는 클라이언트 컴퓨터가 아닌 서버 이름을 얻습니다. 이것이 작동하는 방법입니까? 아니면 내가 잘못하고 있습니까? 서버가 아닌 클라이언트 컴퓨터를 얻고 싶습니다. asp.NET 4.0에서 Web Forms를 사용하고 있습니다
Ryan S

2
방금 이것을 테스트 하고 완전한 이름을 제공 Dns.GetHostName() 하지 않는 것으로 나타났습니다 .
Sam

5
System.Enviornment.MachineName은 NetBIOS 이름 만 제공하므로 호스트 이름이 15자를 초과하면 전체 이름이 필요한 경우 문제가 발생합니다. 나는 다른 사람들을 위해 말할 수 없습니다.
RandomInsano

78

System.Environment.MachineName

또는 Winforms를 사용하는 경우을 사용할 수 있습니다. 이는와 System.Windows.Forms.SystemInformation.ComputerName정확히 동일한 값을 반환합니다 System.Environment.MachineName.



23

컴퓨터 이름 또는 컴퓨터 이름을 얻기 위해 아래에 몇 가지 방법이 제공됩니다.

방법 1 :-

string MachineName1 = Environment.MachineName;

방법 2 :-

string MachineName2 = System.Net.Dns.GetHostName();

방법 3 :-

string MachineName3 = Request.ServerVariables["REMOTE_HOST"].ToString();

방법 4 :-

string MachineName4 = System.Environment.GetEnvironmentVariable("COMPUTERNAME");

자세한 내용 은 내 블로그 를 참조 하십시오


22
string name = System.Environment.MachineName;


15

한 가지 더 방법이 있습니다 : Windows Management Instrumentation

using System.Management;

try
        {
            ManagementObjectSearcher searcher =
                new ManagementObjectSearcher("root\\CIMV2",
                "SELECT Name FROM Win32_ComputerSystem");

            foreach (ManagementObject queryObj in searcher.Get())
            {
                Console.WriteLine("-----------------------------------");
                Console.WriteLine("Win32_ComputerSystem instance");
                Console.WriteLine("-----------------------------------");
                Console.WriteLine("Name: {0}", queryObj["Name"]);
            }
        }
        catch (ManagementException e)
        {
            // exception handling
        }

MSDN

WMI

WMI 코드 작성자

자주 묻는 질문


4

이 시도:

string[] computer_name = System.Net.Dns.GetHostEntry(System.Web.HttpContext.Current.Request.ServerVariables["remote_addr"]).HostName.Split(new Char[] { '.' });
return computer_name[0].ToString();

1
DNS 이름과 컴퓨터 이름이 다를 수 있습니다. 그는 컴퓨터 이름을 요구하고 있습니다!
marsh-wiggle

4

<p>웹 프로젝트에 대한 .InnerHtml을 다음과 같이 사용자의 컴퓨터 이름으로 설정했습니다.

HTML :

    <div class="col-md-4">
       <h2>Your Computer Name Is</h2>
       <p id="pcname" runat="server"></p>
       <p>
           <a class="btn btn-default" href="#">Learn more &raquo;</a>
       </p>
    </div>

씨#:

using System;
using System.Web.UI;

namespace GetPCName {
   public partial class _Default : Page {
    protected void Page_Load(object sender, EventArgs e) {            
        pcname.InnerHtml = Environment.MachineName;
    }
   }
}

1

더 유용한 두 가지 방법 : System.Environment.GetEnvironmentVariable ( "ComputerName")

사용자가 Citrix XenApp 또는 터미널 서비스 (일명 RDS, RDP, 원격 데스크톱)를 통해 연결된 경우 사용자 PC의 이름을 가져 오는 System.Environment.GetEnvironmentVariable ( "ClientName")


1

이거 한번 해봐.

public static string GetFQDN()
{
    string domainName = NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName;
    string hostName = Dns.GetHostName();
    string fqdn;
    if (!hostName.Contains(domainName))
        fqdn = hostName + "." +domainName;
    else
        fqdn = hostName;

    return fqdn;
}

그러나 왜 System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties (). HostName을 사용하지 않습니까?
osexpert
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.