ฉันจะรับชื่อคอมพิวเตอร์ใน. NET ได้อย่างไร


285

ฉันจะรับชื่อคอมพิวเตอร์ใน. NET c # ได้อย่างไร

c#  .net 


1
@ Malachi คำถามนั้นเกี่ยวกับบริการของ Windows
Sam

2
@ Sam บริการ windows เป็นเพียงโปรแกรม windows ที่ทำงานในพื้นหลังดังนั้นจริงๆมันเป็นสิ่งเดียวกัน
มาลาคี

@ Malachi ใช่ฉันรู้ว่าคุณหมายถึงอะไร อย่างไรก็ตามฉันคิดว่าการอ้างอิงถึงวิธีการเฉพาะของ ASP.NET และ Winforms เฉพาะในการทำสิ่งนี้ในคำตอบของคำถามนี้อาจใช้ไม่ได้กับคำถามนั้น
Sam

1
@ Malachi ฉันคิดว่าคุณเข้าใจผิดว่าฉันหมายถึง ASP.NET อะไร ฉันไม่ได้อ้างถึงแอปพลิเคชัน ASP.NET เพื่อรับชื่อคอมพิวเตอร์ของลูกค้าแม้ว่าการทำเช่นนั้น (สำหรับชื่อ DNS) อาจเป็นเรื่องง่ายเนื่องจากแอปพลิเคชันจะได้รับที่อยู่ IP ของลูกค้า ฉันอ้างถึงแอพพลิเคชั่น ASP.NET เพื่อรับชื่อโฮสต์คอมพิวเตอร์ของพวกเขา ดูตัวอย่างคำตอบที่ได้รับคะแนนสูงสุดที่นี่
Sam

คำตอบ:


400

ดูวิธีการหา FQDN ของเครื่องโลคอลใน C # /. NET หากสุดท้ายไม่ได้ให้ FQDN แก่คุณและคุณต้องการ

ดูรายละเอียดเกี่ยวกับความแตกต่างระหว่าง SystemInformation.ComputerName, Environment.MachineName และ Net.Dns.GetHostName


3
@tvanfosson: ความแตกต่างคืออะไร? ฉันหมายความว่าฉันควรใช้อันไหนดี? สิ่งนี้มีผลกระทบด้านความปลอดภัยหรือไม่?
PK

26
ฉันจะใช้ตัวแรกจากแอปคอนโซลหรือ winforms ตัวที่สองจากเว็บแอปและตัวที่สามถ้าฉันต้องการรับ FQDN ดูเอกสารอ้างอิงสำหรับข้อมูลเกี่ยวกับสิทธิ์ที่จำเป็น
tvanfosson

1
@tvanfosson ทั้งหมดสามข้อนี้ทำให้ฉันได้รับชื่อเซิร์ฟเวอร์ไม่ใช่เครื่องไคลเอ็นต์ที่ใช้เข้าถึงหน้านี้ มันเป็นวิธีการทำงานหรือไม่ หรือฉันกำลังทำอะไรผิดพลาด ฉันต้องการรับเครื่องลูกค้าไม่ใช่เซิร์ฟเวอร์ ฉันกำลังใช้เว็บฟอร์มกับ asp.NET 4.0
Ryan S

2
ฉันเพิ่งทดสอบสิ่งนี้และพบDns.GetHostName() ว่าไม่ได้ให้ชื่อที่ผ่านการรับรองครบถ้วน
Sam

5
โปรดทราบว่า System.Enviornment.MachineName จะให้ชื่อ NetBIOS เท่านั้นดังนั้นหากชื่อโฮสต์ยาวกว่า 15 ตัวอักษรคุณจะประสบปัญหาหากคุณต้องการชื่อเต็ม ฉันไม่สามารถพูดเพื่อคนอื่นได้
RandomInsano

78

System.Environment.MachineName

หรือถ้าคุณกำลังใช้ Winforms คุณสามารถใช้ซึ่งผลตอบแทนที่ว่าค่าเช่นเดียวกับSystem.Windows.Forms.SystemInformation.ComputerNameSystem.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

มีอีกวิธีหนึ่งคือ 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 และชื่อคอมพิวเตอร์อาจแตกต่างกัน เขาขอชื่อคอมพิวเตอร์!
มาร์ชกระดิก

4

ฉันตั้งค่า. InnerHtml ของ<p>วงเล็บสำหรับโปรเจ็กต์เว็บของฉันเป็นชื่อคอมพิวเตอร์ของผู้ใช้ที่ทำสิ่งต่อไปนี้:

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

2 วิธีที่เป็นประโยชน์เพิ่มเติม: System.Environment.GetEnvironmentVariable ("ComputerName")

System.Environment.GetEnvironmentVariable ("ClientName") เพื่อรับชื่อพีซีของผู้ใช้หากพวกเขาเชื่อมต่อผ่าน Citrix XenApp หรือ Terminal Services (aka RDS, RDP, Remote Desktop)


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 (). ชื่อโฮสต์?
osexpert
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.