.NETのIPAddressクラスを使ったアドレスクラスの調べ方を考えた。
IPAddressクラスのGetAddressBytes()
を使えばアドレスのバイト配列が取得できるのでそれを利用する。
今回はマルチキャストアドレスをターゲットにしてあるが、同様の方法で他のアドレスクラスもチェックできる。
以下のコードを組んで実行した。
using System; // Console
using System.Net; // IPAddress
namespace AddressTestProject
{
class Test
{
static void Main()
{
IPAddress address;
string addrstr;
byte[] addrbytes;
// IPアドレス入力
Console.Write("Input IP address -> ");
addrstr = Console.ReadLine();
// IPAddress変換
address = IPAddress.Parse(addrstr);
addrbytes = address.GetAddressBytes();
// 変換したbyte配列をダンプしてみる
Console.Write("dump array:");
for(int i = 0; i < addrbytes.Length; i++)
Console.Write(addrbytes[i].ToString("X2") + " ");
// マルチキャストに使えるか検査
if((addrbytes[0] & 0xF0) == 0xE0) Console.WriteLine("\nMulticast Address.");
else Console.WriteLine("\nNot Multicast Address.");
}
}
}
◆実行結果
Input IP address ->; 239.0.0.1
dump array: EF 00 00 01
Multicast Address.
マルチキャストアドレスは範囲が224.0.0.0〜239.255.255.255なので、先頭の1バイトの上位4ビットが1110(0xE)であることが条件となる。
先頭の1バイトに対してまず11110000(0xF0)との論理積をとる事で上位4ビットをマスクして取り出せる。
次に1110(0xE0)との比較が一致すればマルチキャストアドレスであると判断できる。
コメント