teratail header banner
teratail header banner
質問するログイン新規登録
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

Q&A

解決済

1回答

2877閲覧

DNSサーバーが自動取得なのか、手動取得なのかを知るには?

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

0グッド

1クリップ

投稿2020/04/27 08:43

0

1

C#でネットワークアダプターごとにIPアドレスを設定するソフトを作成しています。
最初に現在の設定状況を取得しているのですが、IPアドレスに関しては、自動か手動かは識別するためのプロパティがあり、わかります。
ところが、DNSサーバーの認識については、自動取得か手動設定かについてはないように思われます。
この区別はどうやって行えばいいのでしょうか?

現状はDNSサーバーのIPアドレスを取得してみて何も取得できなければ自動取得、取得できれば手動設定と判定していますが、Wi-FiアダプターではどちらのばあいもIPアドレスが取得できるため、結果、手動取得と判定されてしまいます。

以下の現状のコードを記載します。

NetworkInterface[] nis = NetworkInterface.GetAllNetworkInterfaces();

foreach (NetworkInterface ni in nis) // アダプターごとに判定
{

if (ni.GetIPProperties().GetIPv4Properties().IsDhcpEnabled)
{
~DHCP自動取得の場合の処理~
}
else
{
//IPアドレス固定割付
foreach (UnicastIPAddressInformation ip3 in ipips.UnicastAddresses)
{
if (ip3.Address.ToString().IndexOf("%") > 0) continue;

string[] stAdrs = ip3.Address.ToString().Split('.'); if(stAdrs.Length == 4) { ~IPアドレスを画面に表示~ } string[] stMask = ip3.IPv4Mask.ToString().Split('.'); if (stMask.Length == 4) { ~サブネットマスクを画面に表示~ } //break; } //ゲートウェイ foreach (GatewayIPAddressInformation ip in ipips.GatewayAddresses) { if (ip.Address.ToString().IndexOf("%") > 0) continue; string[] stAdrs = ip.Address.ToString().Split('.'); if (stAdrs.Length == 4) { ~ゲートウェイを画面に表示~ } break; } // Gateway取り出し string stGateWay = string.Empty; foreach (GatewayIPAddressInformation ip in ipips.GatewayAddresses) { if (ip.Address.ToString().IndexOf("%") > 0) continue; stGateWay = ip.Address.ToString() + " "; break; }

}

// DNSサーバー
int nDNSSvr = 0;
foreach (IPAddress ip in ipips.DnsAddresses)
{
if (ip.ToString().IndexOf("%") > 0) continue;

string[] stAdrs = ip.ToString().Split('.'); if (stAdrs.Length == 4) { if (nDNSSvr == 0) { ~最初のDNSサーバーを画面に表示~ nDNSSvr++; } else if (nDNSSvr == 1) { ~次のDNSサーバーを画面に表示~ break; } }

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

これが参考になるかも。
レジストリですね。

投稿2020/04/27 08:57

gentaro

総合スコア8947

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/04/28 05:42

解答ありがとうございます。 いただいたHPだけでは無理でしたが、アダプターのIDを取得する方法がわかれば完全に解決しました。 ありがとうございました。
gentaro

2020/04/28 05:48

直接の回答になってなくてすみません。 ご自身で方法がわかって解決されたのであれば、自己解決としてその方法を記載した回答を作成されると、後でこの質問を見た人の役に立つと思います。
退会済みユーザー

退会済みユーザー

2020/05/12 23:38

確かにそうですね。失礼しました。 教えていただいたHPではアダプターのIPアドレス設定状況がわかりますが、LANデバイスとレジストリとの対応ができませんでした。LANデバイスとアダプターのIDの対応するには以下のレジストリの参照が必要でここを検索することで目的のパラメータが取得できました。 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問