1

Iv'e は最近 ICT 技術者として新しい仕事を始め、毎日のツールに役立つもので構成されるコンソール アプリケーションを作成しています。

私の最初のツールはネットワーク スキャナーです。私たちのシステムは現在 Vanilla および Asset タグで実行されていますが、ホスト名/IP アドレスを見つける唯一の方法は、Windows コンソール ツールと nslookup にアクセスすることです。

6 桁の数字を入力すると、アプリケーションが DNS 全体を検索して一致する可能性があるアプリケーションを作成したいと考えています。

私たちのホスト名はそうです

ICTLN-D006609-edw.srv.internald 006609は、そのコンピューターの資産タグになります。

それをコンソール アプリケーションに入力すると、すべてのホスト名が検索され、文字列内に入力された資産タグを含むホスト名が、VNC/リモート デスクトップ用の IP および完全なコンピューター名と共に返されます。

まず、これを構築するにはどうすればよいでしょうか。コンソール アプリまたは 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 に答える