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 ; } |
} |
} |