I have an IP like this: 12.12.12.12
I'm looping through different IP ranges (in 12.12.12.0/24 (example)) format, and trying to see if the IP is in the range.
I have tried various methods such as inet_addr and comparing but I can't seem to get it.
Is there an easy way to do this? I'm using Windows.
相关问题
- Sorting 3 numbers without branching [closed]
- Multiple sockets for clients to connect to
- How to compile C++ code in GDB?
- Why does const allow implicit conversion of refere
- thread_local variables initialization
Take the binary representation and zero out what is not matching your network mask.
Clarification: Let's say you have the IP
a.b.c.d
and want to match it toe.f.g.h/i
then, you can throw the IP into one unsigned integer,uint32_t ip = a<<24 + b<<16 + c<<8 + d
and do the same withuint32_t range = e<<24 + f<<16 + g<<8 + h
. Now you can use your network mask:uint32_t mask = (~0u) << (32-i)
. Now, you can simply check ifip
"is in"range
by comparing them:ip & mask == range & mask
.Just test whether:
You can determine the netmask from the CIDR parameters
range/netbits
as follows: