プライベートIPを除外する C#編
※ .NET 6での実装したので、バージョンによって書き方が変わっていたらすいません。
何かしらで渡されたIPアドレス郡からプライベートIPアドレスを除外しないといけない場合。
もっと効率の良いやり方があるかもしれないのですが、調べ方が悪いのか参考になる記事がなかったのでメモとして残しておきます。
一応、問題なく動いてはいますが、改善点などありましたらコメントお願いします。
var ipList= new List<string>() {何かしらのIPアドレス郡};
//プライベートIP範囲
var classA = new IPNetwork(IPAddress.Parse("10.0.0.0"), 8);
var classB = new IPNetwork(IPAddress.Parse("172.16.0.0"), 12);
var classC = new IPNetwork(IPAddress.Parse("192.168.0.0"), 16);
//プライベートIPとIPアドレスでない文字列を除外
ipList = ipList
.Select(x => ExtractIPv4.GetIp(x))
.Where(x => !string.IsNullOrEmpty(x))
.Where(x => !classA.Contains(IPAddress.Parse(x)) && !classB.Contains(IPAddress.Parse(x)) && !classC.Contains(IPAddress.Parse(x)))
.ToArray();