8.8.8.0/24: Yani böyle bir alt ağ ile bir IP
Nasıl (aslında onların ip2long bileşkesi) 8.8.8.0 ve 8.8.8.255 için bu dönüştürebilirsiniz
PHP ve JavaScript
Ben, aynı zamanda 8,16 gibi diğer maske için ihtiyacınız olacak üstlenecek ...
ip="8.8.8.0/24"
Her bölümlerini ayıklamak ip_array=ip.match(/(\d+)\.(\d+)\.(\d+)\.(\d+)\/(\d+)/)
/ / js regex
numarası ip_num = (ip[1]<<24)+(ip[2]<<16)+(ip[3]<<8)+(+ip[4])
/ / # 0x08080800 dönüştürmek
mask=(1<<(32-ip[5]))-1
/ / # 0xFF
ip_num | mask
8.8.8.255 olan 0x080808FF olacak
ip_num & (0xffffffff ^ mask)
8.8.8.0 olan 0x08080800 olacak
geri ip dizesi ip_num
geri dönüştürmek gerekiyor
Çizgi gösterimde IP adreslerinin bir listesini oluşturmak için:
$range = "8.8.8.0/24";
$addresses = array();
@list($ip, $len) = explode('/', $range);
if (($min = ip2long($ip)) !== false) {
$max = ($min | (1<<(32-$len))-1);
for ($i = $min; $i < $max; $i++)
$addresses[] = long2ip($i);
}
var_dump($addresses);
Bir IP adresi aralığında olup olmadığını kontrol etmek için:
$checkip = "8.8.8.154";
$range = "8.8.8.0/24";
@list($ip, $len) = explode('/', $range);
if (($min = ip2long($ip)) !== false && !is_null($len)) {
$clong = ip2long($checkip);
$max = ($min | (1<<(32-$len))-1);
if ($clong > $min && $clong < $max) {
// ip is in range
} else {
// ip is out of range
}
}
Sadece 4 basamaklı bir taban-256 numarası gibi her IP davranın. Örneğin,
8.8.8.0 == 8 * 256^3 + 8 * 256^2 + 8 * 256^1 + 0 * 256^0 == 134744064
8.8.8.1 == 8 * 256^3 + 8 * 256^2 + 8 * 256^1 + 1 * 256^0 == 134744065
8.8.8.1 == 8 * 256^3 + 8 * 256^2 + 8 * 256^1 + 2 * 256^0 == 134744066
...
8.8.8.255 == 8 * 256^3 + 8 * 256^2 + 8 * 256^1 + 255 * 256^0 == 134744319
Ben bu size alıyoruz ne tür olabilir düşünüyorum. Bu, belirli bir aralıktaki tüm IP belirleyecektir.
$ip = '8.8.8.0';
$mask = 24;
$ip_enc = ip2long($ip);
# convert last (32-$mask) bits to zeroes
$curr_ip = $ip_enc | pow(2, (32-$mask)) - pow(2, (32-$mask));
$ips = array();
for ($pos = 0; $pos < pow(2, (32-$mask)); ++$pos) {
$ips []= long2ip($curr_ip + $pos);
}