我如何從IP /掩碼(例如:190.200.22.32/255.255.255.224)找到主機的數量?Php找到來自IP /掩碼的主機數量
我已經檢查的所有功能:http://php.net/manual/en/ref.network.php
,但我不能夠去實現它。
請幫忙。
感謝, 腰帶
我如何從IP /掩碼(例如:190.200.22.32/255.255.255.224)找到主機的數量?Php找到來自IP /掩碼的主機數量
我已經檢查的所有功能:http://php.net/manual/en/ref.network.php
,但我不能夠去實現它。
請幫忙。
感謝, 腰帶
你不需要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
。希望這可以幫助。
@putvande請檢查問題,謝謝 – sash
@AmalMurali請檢查問題,謝謝 – sash
@sash。這只是一個鏈接,我不看你的任何代碼。所以請提供一些你已經嘗試過的代碼。 – putvande