Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

IP-Range berechnen

2 views
Skip to first unread message

Nicolas Mittelmaier

unread,
Jan 5, 2004, 7:46:14 PM1/5/04
to
Hallo,

ich versuche die Anzahl der möglichen IP-Adressen eines Providers zu
berechnen. Das hat sich inzwischen als wesentlich komplizierter
herausgestellt als zunächst angenommen!

Beispiel: Provider XY verfügt über den IP-Raum 192.84.216.50 bis
192.84.280.26!

Mit welchem Algorithmus könnte mein Skript nun die Anzahl der einzelnen
IP-Adressen darin berechnen? Das hat doch bestimmt schon mal jemand vor mir
gelöst, oder?

Besten Dank,
Nico

PS: Soweit ich weiss muss im letzten Oktett sowohl die 255 als auch die 0
ausgeschlossen sein, da diese nicht vergeben werden. Daran soll sich die
Berechnung aber nicht unbedingt stören. Wenn sowas auch berücksichtigt wird,
umso besser!


Florian L. Klein

unread,
Jan 5, 2004, 9:18:22 PM1/5/04
to
Nicolas Mittelmaier wrote:
>
> ich versuche die Anzahl der möglichen IP-Adressen eines Providers zu
> berechnen. Das hat sich inzwischen als wesentlich komplizierter
> herausgestellt als zunächst angenommen!

So schlimm ist es auch wieder nicht.


>
> Beispiel: Provider XY verfügt über den IP-Raum 192.84.216.50 bis
> 192.84.280.26!

^^^ bissl viel... mit 8 Bit lassen sich 256 Werte darstellen.

> Mit welchem Algorithmus könnte mein Skript nun die Anzahl der einzelnen
> IP-Adressen darin berechnen?

Üblicherweise werden einem ISP nicht wahllos ein paar IP-Adressen
zugeteilt, sondern Netzblöcke, etwa 192.84.216.0 - 192.84.216.63.

Diese stellen wir nun binär dar:


192 = 0xC0 = binär 1100 0000
84 = 0x54 = binär 0101 0100
216 = 0xd8 = binär 1101 1000
63 = 0x3f = binär 0011 1111


192.84.216.0 = 11000000 01010100 11011000 00000000
192.84.216.63 = 11000000 01010100 11011000 00111111

Wie man sieht, unterscheiden sich die kleinste und die größte Adresse
nur in den hinteren Bits, die in ersterem Fall alle auf 0 stehen
(kleinster Wert) und in letzterem Fall auf 1 (größter Wert). Da die
innerhalb dieses Netzblocks angeschlossenen Hosts nicht riechen können,
wo das Netz aufhört und das benachbarte Netz anfängt, definiert die
Netzmaske die Grenze zwischen Netz- und Hostadresse. Dazu werden von
links nach rechts alle Bits auf 1 gesetzt, deren Adressteil zur
Netzadresse gehört. In diesem Fall:

192.84.216.0 = 11000000 01010100 11011000 00-Host-
11111111 11111111 11111111 11000000
= 255 . 255 . 255 . 192

Zur Vereinfachung der Schreibweise wird die Anzahl der Einsen als Zahl
angegeben, in diesem Fall 26. Schreibweise: 192.84.216.0/26.

Der Hostadressenteil verwendet hier die übrigen sechs Bit, was 64
mögliche Adressen ergibt.

Kennt man nun die Adresse eines Hosts und die Netzmaske, lassen sich
die kleinste und größte Adresse berechnen:

Beispiel 132.155.212.13, Netzmaske /19 (255.255.224.0)
Netzbasisadresse = Adresse UND Netzmaske
= 132.155.21.213 & 255.255.224.0
= 0x84 9b 15 d5 & 0xff ff e0 00

= 10000100 10011011 00010101 11010101
& 11111111 11111111 11100000 00000000

= 10000100 10011011 00000000 00000000
= 0x84 9b 00 00
= 132.155.0.0

Größte Adresse = Adresse ODER NICHT Netzmaske

= 10000100 10011011 00010101 11010101
& 00000000 00000000 00011111 11111111

= 10000100 10011011 00011111 11111111
= 0x84 9b 1f ff
= 132.155.31.255

Die Anzahl Hostadressen beträgt dabei 2^(Anzahl Nullen in der Netzmaske)
= hier 2^13 = 8192.

> PS: Soweit ich weiss muss im letzten Oktett sowohl die 255 als auch die 0
> ausgeschlossen sein, da diese nicht vergeben werden.

Die kleinste (Basisadresse) und die größte (Broadcast) Adresse werden
nicht vergeben bzw. haben eine spezielle Bedeutung.

/.
DocSnyder.

--
Friss, Spammer: <webm...@medz4less.biz> <sup...@medz4less.biz>
<in...@medz4less.biz> <sa...@medz4less.biz> <or...@medz4less.biz>
<rem...@medz4less.biz> <ma...@medz4less.biz> <a...@medz4less.biz>
<off...@medz4less.biz> <ne...@medz4less.biz> <b...@medz4less.biz>

Claus Färber

unread,
Jan 5, 2004, 8:28:00 PM1/5/04
to
Nicolas Mittelmaier <Usene...@gmx.net> schrieb/wrote:

> Beispiel: Provider XY verfügt über den IP-Raum 192.84.216.50 bis
> 192.84.280.26!

Das wäre extrem ungewöhnlicht. Es werden normalerweise immer ganze
Blöcke vergeben, wobei eine feste Anzahl an Bits gleich ist, also z.B.
192.84.216.0 bis 192.84.216.255 (erste 24 Bits) oder 192.84.216.0 bis
192.84.217.255 (erste 25 Bits).

Abgesehen davon sind mit 8 Bits nur Werte von 0 bis 255 möglich. Eine
Adresse mit "280" ist nicht möglich.

Claus
--
http://www.faerber.muc.de

me_pr...@nospam.arcornews.de

unread,
Jan 6, 2004, 11:07:14 AM1/6/04
to
Nicolas Mittelmaier <Usene...@gmx.net> schrieb:

> Beispiel: Provider XY verfügt über den IP-Raum 192.84.216.50 bis
> 192.84.280.26!

> Mit welchem Algorithmus könnte mein Skript nun die Anzahl der einzelnen
> IP-Adressen darin berechnen? Das hat doch bestimmt schon mal jemand vor mir
> gelöst, oder?

Das ist recht einfach. Zuerst umwandeln in eine Integerzahl:

a.b.c.d ==> (a * 2^24) + (b * 2^16) + (c * 2^8) + d

Danach lassen sich die Werte subtrahieren. Abzüglich der Netzwerk- und Broadcastadresse erhältst Du die Anzahl der verfügbaren Adressen.
--
Das Recht auf Anonymität: http://www.realname-diskussion.info/anonheft.htm
Pseudonym? Aber sicher! http://www.realname-diskussion.info/pseudo.htm
Kein Bock auf blöde Anmache? http://www.realname-diskussion.info/hinweis.htm
Kein Bock auf Spam? http://usenet.noemails.net/email-adressen.html

Nicolas Mittelmaier

unread,
Jan 6, 2004, 11:25:52 AM1/6/04
to
> So schlimm ist es auch wieder nicht.

Nun, trivial war es für mich nicht :-)

Besten Dank!

Nicolas Mittelmaier

unread,
Jan 6, 2004, 2:24:26 PM1/6/04
to
> Das ist recht einfach. Zuerst umwandeln in eine Integerzahl:
>
> a.b.c.d ==> (a * 2^24) + (b * 2^16) + (c * 2^8) + d
>
> Danach lassen sich die Werte subtrahieren. Abzüglich der Netzwerk- und
Broadcastadresse erhältst Du die Anzahl der

Besten Dank! :-)


0 new messages