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;