使用cmd或C#列出网络上的所有计算机

时间:2013-04-22 04:50:00

标签: c# networking ip psexec subnet

我需要获取网络上所有计算机的列表

网络分为两个本地网络。管理网络和教育网络,然后在每个管理和教育网络下,每个校园都有子网。因此,每个校区都有一个管理员和一个教育域控制器。

我可以运行" net view"在每个子网的命令提示符下获取所有计算机的列表,但我希望能够在一台服务器上运行它,或者如果我需要两台服务器(一台用于管理网络,一台用于教育网络)

我知道像nmap这样的应用程序可以做到这一点,但我希望能够使用内置的Windows功能,例如" net view"或者写点我自己的东西。

其他细节: 我有一个程序(由以前的开发人员编写)作为后台服务运行,并在每台计算机上启动弹出窗口并在启动火警时播放.mp3文件。我希望得到这个程序,并使用PsExec启动弹出窗口并播放消息,而不是在每台计算机上安装该服务。我有PsExec工作,但需要获得所有计算机的列表。

5 个答案:

答案 0 :(得分:9)

查找网络上的所有活动/已用IP地址 有一种非常简洁的方法,您可以轻松找到网络上所有活动/使用的IP地址,而无需任何第三方应用程序,或者更糟糕的是,单独ping每个IP地址。

打开命令提示符并输入以下内容:

FOR / L%i IN(1,1,254)DO ping -n 1 192.168.10。%i | FIND / i“回复”>> c:\ ipaddresses.txt

更改192.168.10以匹配您自己的网络。

答案 1 :(得分:0)

您可以拥有一个运行Net View的批处理文件,并将其转储到文本文件中。从那以后,您可以使用该数据做任何您想做的事情。这可以每天作为计划任务运行,也可以在添加新计算机时手动运行。

答案 2 :(得分:0)

我不知道您工作的网络有多大,但您可以尝试查询Active Directory。请查看下面的链接,了解更多信息。

List of computers in Active Directory that are online

答案 3 :(得分:0)

你能试试吗?

代码C#:

// Get host name from current network
String strHostName = Dns.GetHostName();
List<string> machinesName = new List<string>();    

// Find host by name
IPHostEntry iphostentry = Dns.GetHostByName(strHostName);

// Enumerate IP addresses from current network
int nIP = 0;
foreach(IPAddress ipaddress in iphostentry.AddressList)
{
    host = Dns.GetHostByAddress(ipaddress);//ip Address is to be specified machineName
    //Add machine name into the list        
    machinesName.Add(host.HostName);
}

答案 4 :(得分:0)

你可以试试这个: - 使用C#代码: - / *必须包含这些库* /

using System.Net;
using System.Net.Sockets; 

 private void GetIP()
    {
        Process netUtility = new Process();

        netUtility.StartInfo.FileName = "net.exe";

        netUtility.StartInfo.CreateNoWindow = true;

        netUtility.StartInfo.Arguments = "view";

        netUtility.StartInfo.RedirectStandardOutput = true;

        netUtility.StartInfo.UseShellExecute = false;

        netUtility.StartInfo.RedirectStandardError = true;

        netUtility.Start();



        StreamReader streamReader = new StreamReader(netUtility.StandardOutput.BaseStream, netUtility.StandardOutput.CurrentEncoding);



        string line = "";

        while ((line = streamReader.ReadLine()) != null)
        {

            if (line.StartsWith("\\"))
            {

                listBox1.Items.Add(line.Substring(2).Substring(0, line.Substring(2).IndexOf(" ")).ToUpper());

            }

        }

        streamReader.Close();
        netUtility.WaitForExit(1000);

    }

有关详细信息,我已经制作了一个Windows聊天应用程序,我正在使用此代码获取网络中系统名称的列表。你可以检查它是如何工作的。链接是https://github.com/akki9c/wifi-chating/blob/master/chatSample/chatSample/Form1.cs