how calculate the number of ip addresses in a range?

Kimmo Paasiala kpaasial at gmail.com
Fri Aug 9 23:07:13 UTC 2013


On Sat, Aug 10, 2013 at 1:44 AM, Peter Wemm <peter at wemm.org> wrote:
> On Fri, Aug 9, 2013 at 9:34 AM, Fleuriot Damien <ml at my.gd> wrote:
>>
>> On Aug 8, 2013, at 10:27 AM, Peter Wemm <peter at wemm.org> wrote:
>>
>>> On Thu, Aug 8, 2013 at 12:04 AM, s m <sam.gh1986 at gmail.com> wrote:
>>>> hello guys,
>>>>
>>>> i have a question about ip addresses. i know my question is not related to
>>>> freebsd but i googled a lot and found nothing useful and don't know where i
>>>> should ask my question.
>>>>
>>>> i want to know how can i calculate the number of ip addresses in a range?
>>>> for example if i have 192.0.0.1 192.100.255.254 with mask 8, how many ip
>>>> addresses are available in this range? is there any formula to calculate
>>>> the number of ip addresses for any range?
>>>>
>>>> i'm confusing about it. please help me to clear my mind.
>>>> thanks in advance,
>>>
>>> My immediate reaction is.. is this a homework / classwork / assignment?
>>>
>>> Anyway, you can think of it by converting your start and end addresses
>>> to an integer.  Over simplified:
>>>
>>> $ cat homework.c
>>> main()
>>> {
>>> int start =  (192 << 24) | (0 << 16) | (0 << 8) | 1;
>>> int end =  (192 << 24) | (100 << 16) | (255 << 8) | 254;
>>> printf("start %d end %d range %d\n", start, end, (end - start) + 1);
>>> }
>>> $ ./homework
>>> start -1073741823 end -1067122690 range 6619134
>>>
>>> The +1 is correcting for base zero. 192.0.0.1 - 192.0.0.2 is two
>>> usable addresses.
>>>
>>> I'm not sure what you want to do with the mask of 8.
>>>
>>> You can also do it with ntohl(inet_addr("address")) as well and a
>>> multitude of other ways.
>>
>>
>> Hold on a second, why would you correct the base zero ?
>> It can be a valid IP address.
>
> There is one usable address in a range of 10.0.0.1 - 10.0.0.1.
> Converting to an integer and subtracting would be zero.  Hence +1.
>
> --

To elaborate on this, for every subnet regardless of the address/mask
combination there are two unusable addresses: The first address aka
the "network address" and the last address aka the "broadcast
address". There may be usable address in between the two that end in
one of more zeros but those addresses are still valid. Some operating
systems got this horribly wrong and marked any address ending with a
single zero as invalid, windows 2000 was one of them.

-Kimmo


More information about the freebsd-net mailing list