Сканирование имени хоста в C # - PullRequest
1 голос
/ 29 июня 2010

Iv'e недавно начал новую работу в качестве специалиста по ИКТ, и я создаю консольное приложение, которое будет состоять из материала, который поможет нашим ежедневным инструментам!

Мой первый инструмент - это сетевой сканер. Наша система в настоящее время работает на тегах Vanilla и Asset, но единственный способ определить имя хоста / IP-адрес - это перейти в инструменты Windows Console и nslookup, которые мне могут быть улучшены

Я хочу создать приложение, в котором я ввожу 6-значный номер, и приложение будет искать во всем DNS возможное совпадение!

Наши имена хостов такие же,

ICTLN-D006609-edw.srv.internal тег d 006609 будет тегом актива для этого компьютера.

Я хочу ввести это в консольное приложение, и оно будет искать по каждому имени хоста, и будут возвращены те, которые содержат введенный тег актива в строке вместе с ip и полным именем компьютера, готовым для VNC / Remote Desktop.

Во-первых, как бы мне построить это, начать проект как консольное приложение или WPF. Можете ли вы привести пример того, как я могу сканировать имена хостов через C #, или, если есть версия opensource C #, можете предоставить ссылку.

Любая информация будет очень полезна, поскольку она устранит множество проблем на рабочем месте, так как мы должны попросить клиента перейти к свойствам «Мой компьютер» и т. Д., А затем прочитать имя компьютера, чтобы использовать его, который я считаю бессмысленным. .

Привет.

Обновление: * 1 C # Версия, которую я сделал: http://pastebin.com/wBWxyyuh

Ответы [ 2 ]

3 голосов
/ 29 июня 2010

Я бы на самом деле пошел на это с 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 }
}
0 голосов
/ 29 июня 2010

Вот способ, которым вы можете сделать это, хотя это не самый лучший. Возможно, вы захотите нажать Active Directory, чтобы найти законные машины в вашей сети. Приведенный ниже код показывает, как вы можете разрешить имя компьютера, и показывает, как его проверить:

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

Надеюсь, это поможет ...

...