0

問題:ユーザーがホスト名またはIPアドレスのいずれかを入力できる入力フィールドがアプリケーションにあります。入力したアドレスが実際のホストに対応しているかどうかを確認する必要があります。

単純な正規表現チェックやIPAddress.TryParseまたはUri.CheckHostNameについて話しているのではありません。ホスト名を確認するのに問題はありません。IPアドレスに解決できない場合、Dns.GetHostEntryは例外をスローします。それは簡単なことです。

ただし。IPアドレスを入力すると、Dns.GetHostAddresses呼び出しを行うと、「1.1.1.1」(「1.1.1.1」はIANAの予約済みIPアドレス)のような愚かなIPを入力しても、常に成功します。 DNSサーバーは「存在しないホスト/ドメイン」を報告します)。Dns.GetHostAddressesは、すべてが問題ないように、渡したIPをすぐに吐き出します。

Dns.GetHostEntryも使用できません。DNSホスト名が関連付けられていないIPアドレス(ローカルネットワーク上の仮想マシンなど)がありますが、それらには有効なIPアドレスとDns.GetHostEntryがあります。それらに例外をスローします(私はそれがそれらのホスト名を解決しようとしていると思いますか?)。

(Uri.CheckHostNameによる)適切なIPアドレスのように見えても、それが偽のIPであるかどうかを実際に通知するメソッド呼び出しが必要ですが、対応するDNSホスト名がありません。

4

1 に答える 1

2

あなたが行うことができる唯一の合理的なチェックは、IPが何らかの予約済みIPであるかどうかです。そうでなければ、できることはあまりありません。「ping」(ICMP)応答がなく、既知のポート(HTTP-80など)で応答がない場合でも、何の意味もありません。

次のように予約されています:

  • 127.0.0.0/8-ループバック(「有効なホスト」と見なされる場合と見なされない場合があります)
  • 224.0.0.0-239.255.255.255-マルチキャスト(「有効なホスト」とは見なされない)
  • サブネット内のすべてのゼロ/すべての1(つまり、192.168.1.0 / 24サブネットの場合は192.168.1.0と192.168.1.255)はすべて/ブロードキャストです-明らかに特定の方法に関連付けられていません。

特別な範囲/IPの詳細については、IP4サブネット化とリンクされたRFCを確認してください。

于 2013-03-20T21:20:18.390 に答える