From owner-freebsd-net@FreeBSD.ORG Fri Aug 9 23:07:13 2013 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 03707681 for ; Fri, 9 Aug 2013 23:07:13 +0000 (UTC) (envelope-from kpaasial@gmail.com) Received: from mail-qe0-x232.google.com (mail-qe0-x232.google.com [IPv6:2607:f8b0:400d:c02::232]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id B56FE2860 for ; Fri, 9 Aug 2013 23:07:12 +0000 (UTC) Received: by mail-qe0-f50.google.com with SMTP id q19so2639248qeb.37 for ; Fri, 09 Aug 2013 16:07:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=FWzFTnMVXDSovQOoeqDorPCAqVWRDc+x3PhqckI/Nm4=; b=X7c7BdFx2P1tvkDPy8LHvDoO5UZDGU4rhgcWb0HXEdsJG4jWFV+22bOREz0+RLDgUH vXD0CdZZ24ruCEaXmHMnFOjRXyA2bQxfzT9LGb+ARWQGIykUdNZqfoNxgAXIhCVvlvIi iBCJhd8Hm3Sbx2PQR/B8S4oCVYdUyZ7haDj7MP3kFUEdr983sJOm5bIq13WfGQ4XP3+u y/PfiEUEdzPYJt9AxheBpHLQmX/dDzTOu1a+4e/hsuMFZAQmekDsRGsSYPXwkVSy9v9B pU9yVu2TKJrQyXiPGhyRw+KF/7Tu9FIkMYvZ7CF7x5Fp504cauYmQ2HNByzBq0hQrwo/ CDvQ== MIME-Version: 1.0 X-Received: by 10.224.3.197 with SMTP id 5mr13538443qao.25.1376089631701; Fri, 09 Aug 2013 16:07:11 -0700 (PDT) Received: by 10.224.5.195 with HTTP; Fri, 9 Aug 2013 16:07:11 -0700 (PDT) In-Reply-To: References: <8B53C542-5CC3-45E6-AA62-B9F52A735EE5@my.gd> Date: Sat, 10 Aug 2013 02:07:11 +0300 Message-ID: Subject: Re: how calculate the number of ip addresses in a range? From: Kimmo Paasiala To: Peter Wemm Content-Type: text/plain; charset=UTF-8 Cc: FreeBSD Net , Fleuriot Damien , s m X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 09 Aug 2013 23:07:13 -0000 On Sat, Aug 10, 2013 at 1:44 AM, Peter Wemm wrote: > On Fri, Aug 9, 2013 at 9:34 AM, Fleuriot Damien wrote: >> >> On Aug 8, 2013, at 10:27 AM, Peter Wemm wrote: >> >>> On Thu, Aug 8, 2013 at 12:04 AM, s m 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