c#(WinForm)遍历局域网计算机(电脑)获取IP和计算机名称

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.NetworkInformation;
using System.IO;
using System.Collections;
using System.Diagnostics;
using System.DirectoryServices;
using System.Management;
  
namespace SocketTransferFile
{
    /// <summary>
    ///
    /// </summary>
    public partial class Form1 : Form
    {
        //局域网计算机列表
        List<LocalMachine> machineList = new List<LocalMachine>();
  
        //Form构造函数
        public Form1()
        {
            InitializeComponent();
            InitData();
        }
  
        /// <summary>
        /// 初始化数据
        /// </summary>
        private void InitData()
        {
            lvLocalMachine.Items.Clear();
            machineList.Clear();
  
            //获取当前域的计算机列表
            label4.Text = DateTime.Now.ToString();
            GetAllLocalMachines();
  
            foreach (LocalMachine machine in machineList)
            {
                ListViewItem item = new ListViewItem(new string[] { machine.Name, machine.IP });
                lvLocalMachine.Items.Add(item);
            }
            label5.Text = DateTime.Now.ToString();
  
            //获取Active Directory中的计算机节点
            //label4.Text = DateTime.Now.ToString();
            //EnumComputers();
            //label5.Text = DateTime.Now.ToString();
  
            //获取指定IP范围内的计算机
            //label4.Text = DateTime.Now.ToString();
            //EnumComputersByPing();
            //label5.Text = DateTime.Now.ToString();
        }
  
        /// <summary>
        /// Handles the Click event of the button1 control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
        private void button1_Click(object sender, EventArgs e)
        {
            InitData();
        }
  
        /// <summary>
        /// 获取指定IP范围内的计算机
        /// </summary>
        private void EnumComputersByPing()
        {
            try
            {
                for (int i = 1; i <= 254; i++)
                {
                    Ping myPing;
                    myPing = new Ping();
                    myPing.PingCompleted += new PingCompletedEventHandler(_myPing_PingCompleted);
  
                    string pingIP = "192.168.1." + i.ToString();
                    myPing.SendAsync(pingIP, 1000, null);
                }
            }
            catch
            {
            }
        }
  
        /// <summary>
        /// Handles the PingCompleted event of the _myPing control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="System.Net.NetworkInformation.PingCompletedEventArgs"/> instance containing the event data.</param>
        private void _myPing_PingCompleted(object sender, PingCompletedEventArgs e)
        {
            if (e.Reply.Status == IPStatus.Success)
            {
                LocalMachine localMachine = new LocalMachine();
                localMachine.IP = e.Reply.Address.ToString();
                //localMachine.Name = Dns.GetHostByAddress(IPAddress.Parse(e.Reply.Address.ToString())).HostName;
                localMachine.Name = Dns.Resolve(e.Reply.Address.ToString()).HostName;
  
                ListViewItem item = new ListViewItem(new string[] { localMachine.Name, localMachine.IP });
                lvLocalMachine.Items.Add(item);
            }
        }
  
        /// <summary>
        /// 获取Active Directory中的计算机节点
        /// </summary>
        private void EnumComputers()
        {
            using (DirectoryEntry root = new DirectoryEntry("WinNT:"))
            {
                foreach (DirectoryEntry domain in root.Children)
                {
                    foreach (DirectoryEntry computer in domain.Children)
                    {
                        if (computer.Name == "Schema")
                        {
                            continue;
                        }
  
                        try
                        {
                            LocalMachine localMachine = new LocalMachine();
                            localMachine.IP = Dns.GetHostEntry(computer.Name).AddressList[0].ToString();
                            localMachine.Name = computer.Name;
  
                            ListViewItem item = new ListViewItem(new string[] { localMachine.Name, localMachine.IP });
                            lvLocalMachine.Items.Add(item);
                        }
                        catch
                        {
  
                        }
                    }
                }
            }
        }
  
        /// <summary>
        /// 获取当前域的计算机列表
        /// </summary>
        /// <returns></returns>
        private void GetAllLocalMachines()
        {
            Process p = new Process();
            p.StartInfo.FileName = "net";
            p.StartInfo.Arguments = "view";
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardInput = true;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.RedirectStandardError = true;
            p.StartInfo.CreateNoWindow = true;
            p.Start();
            p.StandardInput.WriteLine("exit");
  
            StreamReader reader = p.StandardOutput;
  
            for (string line = reader.ReadLine(); line != null; line = reader.ReadLine())
            {
                line = line.Trim();
                if (line.StartsWith(@"\\"))
                {
                    string name = line.Substring(2).Trim();
  
                    //如果有路由器,会列出路由器,但是获取不到IP地址,会报错
                    try
                    {
                        LocalMachine localMachine = new LocalMachine();
  
                        localMachine.IP = Dns.GetHostEntry(name).AddressList[0].ToString();
                        localMachine.Name = name;
  
                        machineList.Add(localMachine);
                    }
                    catch
                    {
                    }
                }
            }
        }
    }
  
public class LocalMachine
{
    public string IP { get; set; }
    public string Name { get; set; }
}
}
原文地址:https://www.cnblogs.com/hyruur/p/2252760.html