CEzIPv4 Version 1.0 リファレンス
REFERENCE
CEzIPv4.pm
概要
EZ-NET 区分 | Base2 Collection |
---|---|
依存モジュール | CEzObject.pm |
テキストで指定された IP アドレス情報を判定するためのモジュールです。
基本情報
Date | 2004/06/10 |
---|---|
File Name | CEzIPv4.pm |
Version | 1.0.0 |
Type | Class |
実装
コンストラクタ
$own = new($address)
$own | 自分自身への参照が返されます。 |
---|---|
$address | IP アドレスを示す値を指定します。 |
モジュールを初期化します。$address にアドレス情報列を指定した場合、それを IP アドレスとして設定します。内部的には、それが CEzIPv4 クラスであれば Copy メソッドが、ドットを含む文字列であれば SetAddress メソッドが呼び出されます。単純な数値であれば、そのまま属性へ保存されます。
DESTROY()
- | - |
---|
デストラクタです。
メソッド
Copy($obj)
$obj | CEzIPv4 オブジェクトです。 |
---|
指定された CEzIPv4 オブジェクトの内容を複製します。
SetAddress($address)
$address | IP アドレスを示す文字列です。 |
---|
指定された文字列を IP アドレスとして登録します。IP アドレスは、次の書式で指定します。
- 192.168.0.0
- 192.168.0.0/0
- 192.168.0.0/255.255.255.0
- 192.168.0.0/24
マスク指定を行わなかった場合は、IP アドレスのクラスからマスクを割り出します。
ドットを区切りとしたマスクを指定した際に、それが不適切なものであったとしても、初めてビットに 0 が現れる直前までを、ネットワークアドレスとみなします。マスクを 0.0.0.0 すなわちそのホストのみと表現したい場合には、明示的に /0.0.0.0 または /0 をつける必要があります。
$result = GetAddress($type = $CEzIPv4::ADDRTYPE_STRING)
$result | IP アドレスを示す文字列です。引数によって形式が変わります。 |
---|---|
$type = $CEzIPv4::ADDRTYPE_STRING | 取得するアドレス文字列の形式です。 |
設定されている IP アドレス情報を取得します。引数にて取得する形式を指定することが出来ます。
$CEzIPv4::ADDRTYPE_STRING では 192.168.0.1 という文字列形式で、$CEzIPv4::ADDRTYPE_NUMERIC ならば 3232235521 という 32 ビット整数で、$CEzIPv4::ADDRTYPE_FULL ならば 192.168.0.1/24 というマスク情報も含めた文字列で取得できます。
$result = GetMask($type = $CEzIPv4::ADDRTYPE_NUMERIC)
$result | アドレスマスクを示す文字列です。引数によって形式が変わります。 |
---|---|
$type = $CEzIPv4::ADDRTYPE_NUMERIC | 取得するアドレス文字列の形式です。 |
設定されているアドレスマスク情報を取得します。引数にて取得する形式を指定することが出来ます。
$CEzIPv4::ADDRTYPE_STRING では 255.255.255.0 という文字列形式で、$CEzIPv4::ADDRTYPE_NUMERIC ならば 24 というマスク長で取得できます。
Clear()
- | - |
---|
アドレス情報を 0.0.0.0/0 に設定します。
SetLocalhost()
- | - |
---|
アドレス情報を 127.0.0.1/0 に設定します。
$bool = IsSameAddress($address)
$bool | 指定されたアドレス部分について、自身と同等である場合は 1 を、そうでなければ undef を返します。 |
---|---|
$address | 比較の対象となるアドレスです。 |
指定されたアドレスが、自分自身と同じであるかを調べます。ネットマスクは考慮されません。指定できるアドレスは、ドットで区切られた文字列や、32 ビット整数、CEzIPv4 型で指定します。
$bool = IsSameMask($mask)
$bool | 指定されたマスク部分について、自身と同等である場合は 1 を、そうでなければ undef を返します。 |
---|---|
$mask | 比較の対象となるアドレスマスクです。 |
指定されたアドレスマスクが、自分自身と同じであるかを調べます。指定できるアドレスマスクは、ドットで区切られた文字列や、マスク長、CEzIPv4 型で指定します。
$bool = IsSameNetwork($address, $check_mask = undef)
$bool | 指定されたアドレスについて、自身と同等のネットワークである場合は 1 を、そうでなければ undef を返します。 |
---|---|
$address | 比較の対象となるアドレスです。 |
$check_mask | 1 ならばマスク情報も一致していないと不一致とみなします。 |
指定されたアドレスが、自分自身と同じネットワーク内にあるかを調べます。指定できるアドレスは、ドットで区切られた文字列や、マスク長、CEzIPv4 型で指定します。ディフォルトではネットマスクは考慮しませんが、それも考慮に入れたい場合は $check_mask に 1 を指定します。
$bool = IsNetworkAddress()
$bool | 自身がネットワークアドレスならば 1 を、そうでなければ undef を返します。 |
---|
自分自身に設定されている IP アドレスとマスク情報から、それがネットワークアドレスに該当するかを調べます。
$bool = IsBroadcastAddress()
$bool | 自身がブロードキャストアドレスならば 1 を、そうでなければ undef を返します。 |
---|
自分自身に設定されている IP アドレスとマスク情報から、それがブロードキャストアドレスに該当するかを調べます。
$result = GetNetworkAddress($type = $CEzIPv4::ADDRTYPE_STRING)
$result | 自身の情報から、該当するネットワークアドレスを算出します。 |
---|---|
$type = $CEzIPv4::ADDRTYPE_STRING | 取得するアドレス文字列の形式です。 |
自分自身に設定されている IP アドレスとマスク情報から、所属する空間のネットワークアドレスを取得します。
取得される値は $type で形式が変わり、$CEzIPv4::ADDRTYPE_NUMERIC ならば 32 ビットで構成された整数値で、$CEzIPv4::ADDRTYPE_STRING ならば 192.168.0.0 といった文字列です。
$result = GetBroadcastAddress($type = $CEzIPv4::ADDRTYPE_STRING)
$result | 自身の情報から、該当するブロードキャストアドレスを算出します。 |
---|---|
$type = $CEzIPv4::ADDRTYPE_STRING | 取得するアドレス文字列の形式です。 |
自分自身に設定されている IP アドレスとマスク情報から、所属する空間のブロードキャストアドレスを取得します。取得される値は 32 ビットで構成された整数値です。
取得される値は $type で形式が変わり、$CEzIPv4::ADDRTYPE_NUMERIC ならば 32 ビットで構成された整数値で、$CEzIPv4::ADDRTYPE_STRING ならば 192.168.255.255 といった文字列です。
プロパティ
イベント
関数
$address32= &CEzIPv4::Encode($address)
$address32 | 変換後の 32 ビット整数値 |
---|---|
$address | ドットを含んだ IP アドレス文字列 |
指定されたアドレス文字列を 32 ビットの整数値に変換します。
$address= &CEzIPv4::Decode($address32)
$address | ドットを含んだ IP アドレス文字列 |
---|---|
$address32 | 変換後の 32 ビット整数値 |
指定された 32 ビット整数値を、ドットで区切られたアドレス文字列に変換します。
$address32= &CEzIPv4::EncodeAddress($address)
$address32 | 変換後の 32 ビット整数値 |
---|---|
$address | ドットを含んだ IP アドレス文字列 |
指定された IP アドレス文字列を 32 ビットの整数値に変換します。内部的には純粋に Encode 関数を呼び出しています。
$result = &CEzIPv4::EncodeMask($mask)
$result | ビットマスク長 |
---|---|
$mask | ビットマスク長、またはドットを含んだマスク文字列 |
指定されたマスク情報からマスク長を取得します。不正なマスクであった場合でも、頭から調べて初めてビットが 0 になった部分からをホスト部分として解釈します。適切に判断できない場合は 0 を返します。なお、$mask の先頭に "/" が含まれていても正常に動作します。
$result = &CEzIPv4::EncodeMaskFromAddress($address32)
$mask | ビットマスク長 |
---|---|
$address32 | 32 ビット整数での IP アドレス |
IP アドレス情報からそのアドレスがどのクラスに該当するかを調べ、それに適切なビットマスクを返します。適切に判断できない場合は 0 を返します。
演算子
"" | 文字列に変換します。 | GetAddress($CEzIPv4::ADDRTYPE_FULL) |
---|---|---|
0+ | 数値に変換します。 | GetAddress($CEzIPv4::ADDRTYPE_NUMERIC) |
属性
$address | IP アドレスを、1桁で記憶します。 |
---|---|
$mask | マスクビットを、ビット数で記録します。 |
定数
■ アドレス定数
$CEzIPv4::ADDRESS_ZERO | 0.0.0.0/0 | 0 を示すアドレス文字列です。 |
---|---|---|
$CEzIPv4::ADDRESS_LOCALHOST | 127.0.0.1/ | localhost を示すアドレス文字列です。 |
■ アドレス種別定数
$CEzIPv4::ADDRTYPE_NUMERIC | 'numeric' | 32 ビット数値でのアドレスを意味します。 |
---|---|---|
$CEzIPv4::ADDRTYPE_STRING | 'string' | ドットを含んだ文字列でのアドレスを意味します。 |
$CEzIPv4::ADDRTYPE_FULL | 'full' | 192.168.0.1/24 といった形式でのアドレスを意味します。 |
実験スクリプト
動作実験などで使用するスクリプトの一部です。ただ一応載せているだけなのですけど、もしかすると使い勝手の雰囲気は汲み取れるかもしれません。
use lib '../EzObject';
use lib '.';
use CEzIPv4;
my $addr1 = '192.168.0.0';
my $addr2 = '192.168.0.3';
my $addr3 = '192.167.3.40';
my $addr4 = '192.168.4.23/22';
my $mask1 = '255.255.255.0';
my $mask2 = '255.255.0.0';
# my $obj = new CEzIPv4();
# my $obj = new CEzIPv4($CEzIPv4::ADDRESS_LOCALHOST);
# my $obj = new CEzIPv4('192.168.0.0');
my $obj = new CEzIPv4('192.168.0.0/255.255.0.0');
print $obj->GetClassInfo() . "\n";
print "GetAddress(): " . $obj->GetAddress($CEzIPv4::ADDRTYPE_FULL) .
"\n";
print "GetMask(): " . $obj->GetMask() . "\n";
print "GetNetworkAddress(): " . $obj->GetNetworkAddress() . "\n";
print "GetBroadcastAddress(): " . $obj->GetBroadcastAddress() . "\n";
print "IsNetworkAddress(): " . ($obj->IsNetworkAddress() ? 'yes' : 'no')
. "\n";
print "IsBroadcastAddress(): " . ($obj->IsBroadcastAddress() ? 'yes' :
'no') . "\n";
print "IsSameAddress($addr1): " . ($obj->IsSameAddress($addr1) ? 'yes' :
'no') . "\n";
print "IsSameAddress($addr2): " . ($obj->IsSameAddress($addr2) ? 'yes' :
'no') . "\n";
print "IsSameMask($mask1): " . ($obj->IsSameMask($mask1) ? 'yes' : 'no')
. "\n";
print "IsSameMask($mask2): " . ($obj->IsSameMask($mask2) ? 'yes' : 'no')
. "\n";
print "IsSameNetwork($addr1): " . ($obj->IsSameNetwork($addr1) ? 'yes' :
'no') . "\n";
print "IsSameNetwork($addr2): " . ($obj->IsSameNetwork($addr2) ? 'yes' :
'no') . "\n";
print "IsSameNetwork($addr3): " . ($obj->IsSameNetwork($addr3) ? 'yes' :
'no') . "\n";
print "IsSameNetwork($addr4): " . ($obj->IsSameNetwork($addr4) ? 'yes' :
'no') . "\n";
my $obj2 = new CEzIPv4();
print "obj2: " . ($obj2->GetAddress($CEzIPv4::ADDRTYPE_FULL)) . "\n";
$obj2->Copy($obj);
print "obj2->Copy(obj): " . ($obj2->GetAddress($CEzIPv4::ADDRTYPE_FULL))
. "\n";
print "obj2: $obj2\n";
print "int(obj2): " . int($obj2) . "\n";
undef $obj;