3

IPアドレスを解析するためにIPAddress.TryParse()を使用しています。ただし、それは少し寛容すぎます(「1」を解析すると0.0.0.1が返されます)。入力を点線のオクテット表記に制限したいと思います。これを行うための最良の方法は何ですか?

(注:私は.NET 2.0を使用しています)


編集

明確にしましょう:

さまざまなIPをスキャンして特定のデバイス(基本的にはポートスキャナー)を探すアプリを作成しています。ユーザーが開始アドレスとして「192.168.0.1」を入力すると、終了アドレスとして「192.168.0.255」を自動的に入力したいと思います。問題は、「1」と入力すると、「0.0.0.1」として解析され、終了アドレスが「0.0.0.255」として入力されることです。これは間抜けに見えます。

4

2 に答える 2

8

フォーマットの解析に興味がある場合は、正規表現を使用します。これが良いものです(ソース):

bool IsDottedDecimalIP(string possibleIP)
{
    Regex R = New Regex(@"\b(?:\d{1,3}\.){3}\d{1,3}\b");
    return R.IsMatch(possibleIP) && Net.IPAddress.TryParse(possibleIP, null);
}

その正規表現は無効なIPをキャッチしませんが、パターンを強制します。TryParseはそれらの有効性をチェックします。

于 2008-12-18T19:52:07.270 に答える
0

IPアドレスは実際には32ビットの数値であり、xxx.xxx.xxx.xxxではありません。これは人間が読める形式です。したがって、IPアドレス1は実際には0.0.0.1です。

編集:説明があれば、提案されているように正規表現を使用するか、ショートカットを好みに合わせてフォーマットすることができます。したがって、「1」を「1.0.0.0」として表示する場合。これを追加しても、解析メソッドを使用できます。

于 2008-12-18T19:50:46.727 に答える