.net でのネットワーク エイリアスの検索
-
09-06-2019 - |
質問
.net 2.0 で、コードが実行されているマシンのネットワーク エイリアスを検出する方法はありますか?具体的には、ワークグループが私のマシンを //jekkedev01 として認識している場合、その名前をプログラムで取得するにはどうすればよいでしょうか?
解決
複数のネットワーク インターフェイスを使用でき、それぞれに複数の IP を設定でき、単一の IP には解決できる複数の名前を付けることができるため、複数のネットワーク インターフェイスが存在する可能性があります。
DNS サーバーがマシンを認識するためのすべての名前を知りたい場合は、次のようにすべての名前をループできます。
public ArrayList GetAllDnsNames() {
ArrayList names = new ArrayList();
IPHostEntry host;
//check each Network Interface
foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces()) {
//check each IP address claimed by this Network Interface
foreach (UnicastIPAddressInformation i in nic.GetIPProperties().UnicastAddresses) {
//get the DNS host entry for this IP address
host = System.Net.Dns.GetHostEntry(i.Address.ToString());
if (!names.Contains(host.HostName)) {
names.Add(host.HostName);
}
//check each alias, adding each to the list
foreach (string s in host.Aliases) {
if (!names.Contains(s)) {
names.Add(s);
}
}
}
}
//add "simple" host name - above loop returns fully qualified domain names (FQDNs)
//but this method returns just the machine name without domain information
names.Add(System.Net.Dns.GetHostName());
return names;
}
他のヒント
コンピュータの説明が必要な場合は、レジストリに保存されます。
- 鍵:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters
- 値の名前:
srvcomment
- データ・タイプ:
REG_SZ (string)
私の知る限り、これはドメインサーバーやPCが接続されているネットワークとは何の関係もありません。
ネットワークに関連するものについては、次のものを使用しています。
- NETBIOS名:
System.Environment.MachineName
- ホスト名:
System.Net.Dns.GetHostName()
- DNS名:
System.Net.Dns.GetHostEntry("LocalHost").HostName
PC に複数の NETBIOS 名がある場合、解決先の IP アドレスに基づいて名前をグループ化する以外に方法がありません。PC に複数のネットワーク インターフェイスがある場合、これでも信頼できません。
私は .NET プログラマーではありませんが、 System.Net.DNS.GetHostEntry メソッドは必要なもののようです。のインスタンスを返します。 IPホストエントリ を含むクラス 別名 財産。
使用 システム.環境 クラス。これには、NetBios から取得されるマシン名を取得するためのプロパティがあります。私があなたの質問を誤解していない限り。
または My.Computer.Name
所属していません StackOverflow