【问题标题】:Get a list of all computers on a network w/o DNS获取没有 DNS 的网络上所有计算机的列表
【发布时间】:2010-09-11 11:09:15
【问题描述】:

您好,

我需要一种方法(通过 C# 或在 .bat 文件中)来获取给定网络上所有计算机的列表。通常,我使用“网络视图”,但这往往只在您的域内起作用(据我的理解)。我需要网络上所有可用计算机的名称(或至少是 IP 地址)。

能够获取不属于我的域中的所有计算机(在这种情况下,我会使用 WORKGROUP,或者任何默认值)也可以。

【问题讨论】:

标签: c# .net networking batch-file


【解决方案1】:

Nmap 对此很有用 - 使用 -O 选项进行操作系统指纹识别,使用 -oX "filename.xml" 将 output 作为 xml,然后您可以从 c# 解析。

合适的命令行是(其中 192.168.0.0/24 是要扫描的子网):

nmap -O -oX "filename.xml" 192.168.0.0/24

如果您对猜测操作系统不感兴趣,请忽略 -O - 如果您只想进行 ping 扫描,请使用 -sP,或者阅读文档以了解无数其他选项。

【讨论】:

  • 这看起来很有希望。命令行界面是否足够强大,可用于以编程方式获取组合列表?
  • 是的,当然 - 我已经更新了我的答案,并提供了更多细节
  • 谢谢!我会看看这是否对我们有用(安全原因,引入额外的第三方应用程序等),但这确实是最好的答案。完整的命令是什么?从读取 cmets 来看,它似乎是 nmap -sL -O -oX "filename.xml" - 听起来对吗?
  • 如果您不介意使用 nmap,这是一个很好的解决方案,我在回答中假设您想自己构建它。
  • 我们会看到 - 我确实想自己构建它,也想为未来的观众留下一个现成的“只需使用这些参数”,希望他们能够下载和复制-粘贴而不进入文档。不过,我明白你的意思。
【解决方案2】:

扩展 Unkwntech 所说的内容 -

您还可以进行“广播”ping,以避免必须单独 ping 每个 IP 地址。

之后,您可以立即使用“arp”检查 ARP 缓存并获取哪些 IP 地址在哪个 MAC 地址上的列表。

【讨论】:

    【解决方案3】:

    Ping 愤怒的一切,然后您可以从响应识别其名称的系统获取 netbios 信息。

    【讨论】:

    • 两个问题: 1. 如果范围很大怎么办?有什么选择吗? 2. netbios 到底是怎么做的?
    • 我不知道如何做netbios,但我知道它会起作用,其次如果范围很大,那么只在每个目的地等待一个数据包,并使用相当低的超时时间。
    • 要在 IP 上获取主机名,您可以使用 nslookup
    【解决方案4】:

    在我的一个网络应用程序中,我使用 NetApi32 功能进行网络浏览。

    代码: http://gist.github.com/11668

    【讨论】:

    猜你喜欢
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 2015-03-29
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多