【问题标题】:list all computers on a network with cmd or C#使用 cmd 或 C# 列出网络上的所有计算机
【发布时间】:2013-04-14 21:54:55
【问题描述】:

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

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

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

我知道有像 nmap 这样的应用程序可以做到这一点,但我希望能够使用内置的 Windows 功能,如“网络视图”或自己编写一些东西。

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

【问题讨论】:

  • 旁注:推送模型(当您尝试使用 psExec 构建时)可能无法满足原始要求,为什么使用 pull 完成...虽然这样做很有趣,但首先检查官方要求可能是个好主意...

标签: c# networking ip psexec subnet


【解决方案1】:

查找网络上所有活动/使用的 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, 1, 254) 在这里做什么?
  • 这是一个 cmd 的 FOR 循环。第一个“1”是起点,下一个“1”是增量,“254”是循环停止的点。换句话说:for(int i=0; i<=254; i++)
  • 问题:可以用电脑自己的IP获取网络掩码吗?
  • "或者更糟糕的是,单独 ping 每个 IP 地址。"从技术上讲,这不是单独ping每个地址吗?我相信您的意思可能是“手动从 1-254 ping 每个地址”。您发布的代码分别对每一个进行 ping,只是 for 循环为您完成了它。除此之外,每次 ping 大约需要 3 秒才能完成,因此需要将近 13 分钟才能到达最终地址。在这种情况下(火警),13 分钟是完全不可接受的。虽然这是对问题的有效答案,但它不适合问题的上下文
【解决方案2】:

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

【讨论】:

  • 在大型网络上,这不一定会为您提供所有可用的计算机。我从大约 200 台本地网络中获得了大约 53 台计算机......通常只有那些以特定方式配置的计算机。如果不进行 ping 扫描,您实际上无法全面了解本地设备。
  • 它确实有可能成为问题。 (我从未如此仔细地研究过)我认为在域上它会非常可靠。
  • 不幸的是,它依赖于广播浏览器消息等的计算机,而我的大多数机器都没有设置这样做。根据配置,您可以获得更好或更差的结果,包括结果中不包含任何内容(包括本地机器):(
  • 您好 user2301728,我正在尝试将所有代码保存在一个地方,以便任何追随我的人更容易,但我想我可能会做一些类似于你建议的事情不是任何其他方式。嗨科里,感谢有关网络视图不一定提供所有计算机的警告,我原以为它返回的列表似乎比我预期的要短一些,所以我将对其进行测试并将它给我的列表与列出当前提供的服务。如果它没有给出正确的列表,那么我将尝试 ping 每个可能的 ip...
  • 随时!如果这是我的项目,我会认为您在原始帖子中提到的 NMAP ping 扫描将是我前进的方向。您仍然可以使用计划任务或您选择的任何其他方式来安排它。重新发明轮子没有意义:)
【解决方案3】:

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

List of computers in Active Directory that are online

【讨论】:

    【解决方案4】:

    你可以试试这个吗?

    代码 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);
    }
    

    【讨论】:

    • 这不符合他的要求,这是获取他自己计算机的 ips 列表。他想获取网络中所有其他计算机的列表
    【解决方案5】:

    你可以试试这个:- 使用 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

    【讨论】:

      猜你喜欢
      • 2012-06-08
      • 2015-03-29
      • 1970-01-01
      • 1970-01-01
      • 2010-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多