-7

IP/マスク (例: 190.200.22.32/255.255.255.224) からホストの数を確認するにはどうすればよいですか?

すべての機能をチェックしました: http://php.net/manual/en/ref.network.php

しかし、私はそれを達成することができません。

助けてください。

ありがとう、サッシュ

4

1 に答える 1

2

そのために PHP は必要ありません。マスクは、サブネット内のホストで使用できるビット数を示します。マスクの最大数は 32 です。255.255.255.0 は 24 ビットです (競合する各オクテットは 8 ビットです)。したがって、2^(32-24) -2 ホストがあります。したがって、この場合、254 個のホストがあります。

PHPでできることは、次のようなものです

$octets = explode(".",$mask);
$i=0;
 while($octets[$i]==255){
    $i++;
 }
 $interestingOctet=$octets[$i];
 //count the number of bits in the interesting part. 
 $maskbits = ($i+1)*8 + substr_count(decbin($interestingOctet),1);
 echo pow(2,$maskbits)-2; //this is the number of hosts for this subnet mask

すべての IP の範囲を見つけるには、IP アドレスのバイナリ表現を見つけ、サブネット マスクのバイナリ表現でビット単位の BOOLEAN AND を実行する必要があります。これにより、サブネット番号が得られます。次に、マスクを反転し (すべての 1 を 0 に、すべての 0 を 1 に変更します)、サブネット番号 (前の手順で見つけたもの) でビット単位の BOOLEAN OR を実行します。結果はブロードキャスト アドレスです。使用可能なすべての IP は、サブネット番号とブロードキャスト アドレスの間の IP アドレスです。(たとえば、サブネット番号 192.168.1.0 とブロードキャスト アドレス 255.255.255.0 の場合、範囲は 192.168.1.1 から 192.168.1.254 までです)。

PHPでこれを取得するには、基本的に上記の興味深いオクテットで行ったことを(1をカウントせずに)実行しhttp://php.net/manual/en/language.operators.bitwise.php、それぞれのオクテットでビット単位の演算子を使用する必要があります。お役に立てれば。

于 2013-08-27T19:06:35.740 に答える