2011-02-01 4 views
0

この質問は、Given a Uri value how can one check whether it refers the local machine?に関連しており、満足のいく解決策はありませんでした。単一のネットワーククエリを使用せずにローカルWindowsボックスのすべてのIPアドレスとホスト名を検出するにはどうすればよいですか?

私はネットワークの往復をせずに、ローカルマシンのホスト名だけでなくIPアドレス(複数のネットワークカードがある場合は複数)を検出したいと思っています。ローカルテーブルに表示される情報のみを意味し、DNSクエリはありません。ところで、ドメイン名も発見されなければならない。

考え直しで

、私は次の方法で行うことができます:

IP、ホスト名またはホスト+ドメイン名を受け入れ、アドレス場合はtrueを返し
bool IsLocalAddress(string address); 

は、ローカルマシンを指します。再度、複数のNICとドメインを考慮してください。

ありがとうございます。

P.S.

私はC#のコードサンプルが好きです。任意の言語が同様のコードを使用することができるように、WindowsのAPIが、同じ名前の二つの機能が含まれていることをグーグルでのショーの

import socket 
socket.gethostname() # hostname 
socket.gethostbyname(gethostname()) # host ip addr 

ビット:あなたがこれを行うことがPythonの使用

+0

DNSを持ち込むと、すべてのベットがオフになります。マシンは登録されているすべてのDNSエントリを知ることができません。 –

+0

そうですが、マシン自体にローカルキャッシュがあるはずです。私はこのキャッシュを調べることが可能かどうか疑問に思っています。 – mark

答えて

0

Windows固有のコードを記述している場合は、WMIクラスを使用する必要があります。たとえば、Win32_NetworkAdapterConfigurationは、複数のインターフェイスとインターフェイスごとに複数のIPアドレスに関する情報を提供します。

+0

複数のNICの質問にどのように答えますか?マシンに複数のネットワークカードがある場合、ホスト名が複数ある可能性のある複数のIPアドレスが存在します。 – mark

1

興味深い外観のサンプルがあります。hereです。

+0

リンクの+1。ただし、ネットワーククエリを使用せずに、指定したIPをそれぞれのホスト名に変換できますか? IPはローカルなので、私はそうすべきだと私は思うが、わからない。また、ドメインの問題もあります。アドレスはhost + domainでもかまいません。また、ローカルマシンを参照することもできます。 – mark

+0

.NET同等のものが見つかりました - http://msdn.microsoft.com/en-us/library/system.net.networkinformation.networkinterface.getallnetworkinterfaces.aspx – mark

+0

さらに良い - Dns.GetHostAddresses(string.Empty) – mark

関連する問題