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; } |
} |
} |
浙公网安备 33010602011771号