.NETでコンピューター名を取得する方法


285

.NET C#でコンピューター名を取得する方法

c#  .net 

質問のリンクの
マラキ

1
@Malachi、その質問はWindowsサービスに関するものです。
Sam

2
@Sam Windowsサービスは、バックグラウンドで実行される単なるWindowsアプリケーションなので、実際には同じです。
Malachi

@マラキ、ええ、私はあなたの意味を知っています。ただし、この質問への回答でこれを行うASP.NET固有およびWinforms固有の方法への参照は、その質問には適用されない可能性があると思います。
Sam

1
@マラキ、私はASP.NETの意味を誤解していると思います。ASP.NETアプリケーションがクライアントのコンピューター名を取得することについては言及していませんでしたが、アプリケーションがクライアントのIPアドレスを取得するため(DNS名の場合)はおそらく簡単です。ホストコンピューターの名前を取得するASP.NETアプリケーションを参照していました。例については、ここで最高評価の回答を参照してください。
サム・

回答:


400

C#/。NETでローカルマシンのFQDNを見つける方法を参照してください最後がFQDNを提供せず、必要な場合。

SystemInformation.ComputerName、Environment.MachineName、Net.Dns.GetHostNameの違いについての詳細をご覧ください。


3
@tvanfosson:違いは何ですか?つまり、どちらを使用すればよいですか?これはセキュリティに影響しますか?
PK

26
1つ目はコンソールまたはwinformsアプリから、2つ目はWebアプリから、3つ目はFQDNを取得する必要がある場合に使用します。必要な権限については、参照ドキュメントを参照してください。
tvanfosson 2009年

1
@tvanfossonこれら3つはすべて、ページにアクセスしているクライアントマシンではなく、サーバー名を取得します。これはどのように機能しますか?または私は何かを間違ってやっていますか?サーバーではなくクライアントマシンを取得します。asp.NET 4.0でWebフォームを使用しています
Ryan S

2
私はこれをテストしたところ、完全修飾名が与えられてDns.GetHostName() いないことがわかりました。
サム

5
System.Enviornment.MachineNameはNetBIOS名のみを提供することに注意してください。したがって、ホスト名が15文字を超える場合、フルネームが必要になると問題が発生します。他の人のために話すことはできません。
RandomInsano 2014年

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");

詳細については、私のブログを参照してください




15

もう1つの方法があります。WindowsManagement 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>して、Webプロジェクトのブラケットの.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>

C#:

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

さらに2つの役立つメソッド:System.Environment.GetEnvironmentVariable( "ComputerName")

System.Environment.GetEnvironmentVariable( "ClientName")は、ユーザーのPCがCitrix XenAppまたはターミナルサービス(別名RDS、RDP、リモートデスクトップ)経由で接続されている場合に、その名前を取得します


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 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.