2013-08-27 52 views
-6

我如何從IP /掩碼(例如:190.200.22.32/255.255.255.224)找到主機的數量?Php找到來自IP /掩碼的主機數量

我已經檢查的所有功能:http://php.net/manual/en/ref.network.php

,但我不能夠去實現它。

請幫忙。

感謝, 腰帶

+0

@putvande請檢查問題,謝謝 – sash

+0

@AmalMurali請檢查問題,謝謝 – sash

+0

@sash。這只是一個鏈接,我不看你的任何代碼。所以請提供一些你已經嘗試過的代碼。 – putvande

回答

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地址的二進制表示,做一個按位布爾值,而且它與子網掩碼的二進制表示。這會給你子網號碼。然後反轉掩碼(將全部1全部更改爲0,全部全部更改爲1),然後按子網編號(在上一步中找到)執行按位布爾或。結果是廣播地址。所有可用的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。希望這可以幫助。

+0

真棒,謝謝1 – sash

+0

是否有可能從IP /掩碼(例如:190.200.22.32/255.255.255.224) – sash

+0

@sash看到我的編輯請 – idipous