1

我最近开始了一份 ICT 技术员的新工作,我正在创建一个控制台应用程序,该应用程序将包含有助于我们日常工具的东西!

我的第一个工具是网络扫描仪,我们的系统目前在 Vanilla 和 Asset 标签上运行,但我们可以找到主机名/IP 地址的唯一方法是进入 Windows 控制台工具和 nslookup,这对我来说可以改进

我想创建一个应用程序,在其中输入一个 6 位数字,该应用程序将搜索整个 DNS 以寻找可能的匹配项!

我们的主机名是这样的

ICTLN-D006609-edw.srv.internald 006609将是该计算机的资产标签。

我希望将它输入到控制台应用程序中,它会搜索每个主机名,并且在字符串中包含输入的资产标签的主机名将与 IP 和完整的计算机名称一起返回,以供 VNC / 远程桌面使用。

首先,我将如何构建它,我应该将项目作为控制台应用程序还是 WPF 启动。您能否提供一个示例,说明我如何通过 C# 扫描主机名,或者如果有开源C# 版本,您能否提供链接。

任何信息都会有很大帮助,因为它将解决工作场所中的很多问题,因为我们必须要求客户进入我的电脑和属性等,然后将计算机名称读回以使用,我认为这毫无意义。

问候。

更新:*1 我制作的 C# 版本:http: //pastebin.com/wBWxyyuh

4

2 回答 2

3

我实际上会使用 PowerShell 来解决这个问题,因为自动化任务有点像它的东西。事实上,这是一个 PowerShell 脚本,用于列出网络上可见的所有计算机。如果你真的想要它,这很容易翻译成 C#。

function Find-Computer( [string]$assetTag ) {

    $searcher = New-Object System.DirectoryServices.DirectorySearcher;
    $searcher.SearchRoot = New-Object System.DirectoryServices.DirectoryEntry;
    $searcher.SearchScope = 'Subtree';
    $searcher.PageSize = 1000;
    $searcher.Filter = '(objectCategory=computer)';

    $results = $searcher.FindAll();
    $computers = @();
    foreach($result in $results) {
        $computers += $result.GetDirectoryEntry();
    }
    $results.Dispose(); #Explicitly needed to free resources.

    $computers |? { $_.Name -match $assetTag }
}
于 2010-06-28T21:55:33.440 回答
0

这是一种可以实现此目的的方法,尽管它不是最好的。您可能会考虑使用 Active Directory 来查找网络上的合法机器。下面的代码展示了如何解析机器名称,并展示了如何 ping 它:

static void Main()
{

    for (int index = 0; index < 999999; index++)
    {
        string computerName = string.Format("ICTLN-D{0:000000}-edw.srv.internal", index);
        string fqdn = computerName;

        try
        {
            fqdn = Dns.GetHostEntry(computerName).HostName;
        }
        catch (SocketException exception)
        {
            Console.WriteLine(">>Computer not found: " + computerName + " - " + exception.Message);
        }

        using (Ping ping = new Ping())
        {
            PingReply reply = ping.Send(fqdn);
            if (reply.Status == IPStatus.Success)
            {
                Console.WriteLine(">>Computer is alive: " + computerName);
            }
            else
            {
                Console.WriteLine(">>Computer did not respond to ping: " + computerName);
            }
        }
    }
}

希望有帮助...

于 2010-06-28T21:57:56.767 回答