6

この回答でコード スニペットを見つけました:コンソール アプリケーションで IP アドレスを取得する

using System; 
using System.Net; 


namespace ConsoleTest 
{ 
    class Program 
    { 
        static void Main() 
        { 
            String strHostName = string.Empty; 
            // Getting Ip address of local machine... 
            // First get the host name of local machine. 
            strHostName = Dns.GetHostName(); 
            Console.WriteLine("Local Machine's Host Name: " + strHostName); 
            // Then using host name, get the IP address list.. 
            IPHostEntry ipEntry = Dns.GetHostEntry(strHostName); 
            IPAddress[] addr = ipEntry.AddressList; 

            for (int i = 0; i < addr.Length; i++) 
            { 
                Console.WriteLine("IP Address {0}: {1} ", i, addr[i].ToString()); 
            } 
            Console.ReadLine(); 
        } 
    } 
} 

このコードをローカルで実行してコンピューターの IP アドレスを取得すると、問題なく動作します。私がやろうとしているのは、コードを使用してネットワーク上のサーバーの IP アドレスを取得することです。だから基本的に私は strHostName = Dns.GetHostName(); を置き換えてみました。with strHostName = "myServerName"; ただし、返される IP は 1 つだけです。サーバー自体でプログラムを実行すると、そのサーバーに割り当てられたすべての IP が取得されます。目標は、私のコンピューターでプログラムを実行し、データベース テーブルからサーバー名を読み取って、100 以上のサーバーの IP アドレスを取得することです。各サーバーにログオンして、各サーバーでプログラムを実行して IP アドレスを取得する必要がないようにしています。

興味深いことに、「www.google.com」のコードは正常に機能します。このサーバーは関連しているのでしょうか、それともセキュリティの問題でしょうか?

データベースからデータを取得する前に、1 つのサーバーでコードを動作させる必要があります:) ありがとう!

4

2 に答える 2

3

これらの方法を使用して解決しようとしている名前についてDNSが言うことと、関心のある特定のマシンで実行されているTCP / IPプロトコルスタックに実際にバインドされているIPアドレスを見つけることの違いを混同していませんか?DNSに登録されているかどうかに関係なく、マシンが実際に構成されているIPアドレスを知りたい場合は、マシンに構成されているアドレスを列挙するためにWMIを使用することを検討してください。

記事を参照してください:IPアドレス、ドメイン名、OSバージョンを取得するためのWMIクエリ

上記のコードでは、コードが実行されているローカルマシンに、構成済みのDNSリゾルバーを使用して、クエリに使用している名前のDNSレコードとして存在するエントリを通知するように要求しているだけです。そのため、www.google.comなどのクエリを実行すると値を取得できます。これは、DNSで名前を検索しているだけであり、それが公に認識可能な名前であるため、正しくセットアップされたDNSサーバーは有効な値を報告できるためです。

これは、サーバーにバインドされる可能性のあるIPアドレスとは大きく異なります。たとえば、ファイアウォールの背後にあるサーバーについて考えてみます。サーバーは実際には、ファイアウォール上の公的にアクセス可能なIPアドレスにマップされている内部ネットワークにローカルなIPアドレスを使用している可能性があります。その場合、サーバーが認識しているIPアドレスは、対応するDNSエントリに表示されるパブリックIPアドレスとは完全に異なります。

于 2012-10-10T22:55:00.880 に答える
0

サーバーによって意図的に他の IP が DNS から除外されている可能性があります。この機能の良い例は、この KB 記事 (975808)にあります。

GetHostAddress()同じ結果が得られることを確認してください。MSDN を参照してください: gethostaddress()

それができない場合は、IP アドレスを照会するための他の方法を検討することをお勧めします。

于 2012-10-10T18:46:21.370 に答える