1. ホーム
  2. c#

[解決済み] C#で文字列が有効なIPv4またはIPv6アドレスであるかどうかを判断するにはどうすればよいですか?

2023-06-12 08:53:59

質問

私は正規表現が 危険 というのは、IP アドレスにはさまざまな形式があるためです。

C や C++ でも同様の質問を見たことがありますが、それらは C# には存在しない関数で解決されました。 inet_ntop()

私が見つけた .NET ソリューションは、標準の "ddd.ddd.ddd" フォームを処理するだけです。何か提案はありますか?

どのように解決するのですか?

これを使って解析してみることができます。

 IPAddress.TryParse

次に AddressFamily という

IPv4ではSystem.Net.Sockets.AddressFamily.InterNetwork、IPv6ではSystem.Net.Sockets.AddressFamily.InterNetworkV6を返します。

EDIT: サンプルコードです。必要に応じて変更してください。

    string input = "your IP address goes here";

    IPAddress address;
    if (IPAddress.TryParse(input, out address))
    {
        switch (address.AddressFamily)
        {
            case System.Net.Sockets.AddressFamily.InterNetwork:
                // we have IPv4
                break;
            case System.Net.Sockets.AddressFamily.InterNetworkV6:
                // we have IPv6
                break;
            default:
                // umm... yeah... I'm going to need to take your red packet and...
                break;
        }
    }