Jump to content

Recommended Posts

Hello All,

I am trying to determine if an ip-address with a notation like 192.168.1.312
is in a network described with a notation like this 192.168.1.0/22

I use an online tool IP calculator from
[a href=\"http://jodies.de/ipcalc?host=192.168.1.0&mask1=22&mask2=\" target=\"_blank\"]http://jodies.de/ipcalc?host=192.168.1.0&mask1=22&mask2=[/a]
this is the output:
[code]
Address:   192.168.1.0           11000000.10101000.000000 01.00000000
Netmask:   255.255.252.0 = 22    11111111.11111111.111111 00.00000000
Wildcard:  0.0.3.255             00000000.00000000.000000 11.11111111
=>
Network:   192.168.0.0/22        11000000.10101000.000000 00.00000000 (Class C)
Broadcast: 192.168.3.255         11000000.10101000.000000 11.11111111
HostMin:   192.168.0.1           11000000.10101000.000000 00.00000001
HostMax:   192.168.3.254         11000000.10101000.000000 11.11111110
Hosts/Net: 1022                  (Private Internet)
[/code]

This shows that my example ip address is indeed in the network.
To do this dynamically, all I can think of now is to put all 1022 ipaddresses in my db, and do a select where ... query.
There must be a better way.

Thanks very much in advance for any help or suggestions,


node142e4
Link to comment
https://forums.phpfreaks.com/topic/12809-is-ipaddress-in-network/
Share on other sites

First step: translate 192.168.1.0/22 into something you can use as a mask. 192.168.1.0/22 means that the first 22 bits of the IP in question must be identical to the first 22 bits in the base IP.

BTW, each octet of the IP can be at most 255, so your sample IP of 192.168.1.312 was invalid.

Untested code:
[code=php:0]
// Expects $base_ip and $ip to be in dotted format
function in_network( $base_id, $bit, $ip)
{
$base_ip = ip2long( $base_ip );
$test1 = $base_ip >> ( 32 - $bits )
$ip = ip2long($ip);
$test2 = $ip >> (32 - $bits );
return $test1 == $test2;
}

if ( in_network('192.168.1.0', 22, '192.168.1.212') )
{
echo "Same network!";
}
else
{
echo "Different network!";
}
[/code]
This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.