Problem: Große Anzahl von IP-Adressen verwalten!

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
elLobo

Dienstag 3. Januar 2006, 20:54

gerold hat geschrieben:
elLobo hat geschrieben:Es sollen aus einer Liste von gültigen IPs und Ports entsprechende Tupel gebildet werden und diese einem "anderem System" zur Verfügung gestellt werden.
Hi elLobo!

Du schreibst nur, wie du an die Sache ran gehen würdest, aber nicht, wofür du es wirklich brauchst. So können wir dir keinen besseren Vorschlag geben.

mfg
Gerold
:-)
Naja... das steckt nix tieferes hinter... letzendes soll halt ein bestehendes Programm um die Fähigkiet erweitert werden, wie oben beschrieben, IP-Adressen zu verwalten...

Eure Tips schaue ich mir morgen an und wenn ich dann noch Fragen habe, schreib ich nochmal.... was am Ende daraus geworden ist, erfahrt ihr dann auch noch. :wink:

mfg elLobo
BlackJack

Dienstag 3. Januar 2006, 23:48

Die Frage bleibt: Warum? Was ist der Sinn und Zweck? Wie werden die Adressen "erzeugt"? In welcher Reihenfolge? Werden überhaupt alle Möglichkeiten erzeugt? Was heisst einem anderem System zur Verfügung stellen?

Das jemand wirklich alle IP-Adressen + Portnummern einfach so als Daten haben möchte klingt zumindest komisch.

Ansonsten würde ich das ganze "Klassenweise" als Bitset auf der Platte verwalten. Für ein einzelnes Klasse A Netz wären das "nur" ca. 128 Gigabyte. Platten in der Grössenordnung sind ja nicht mehr sooo exotisch. Wenn Du 256 Stück davon einbaust, dann kannst Du das gesamte Netz erfassen. Naja IPv4 zumindest. :twisted:
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 3. Januar 2006, 23:55

BlackJack hat geschrieben:Naja IPv4 zumindest. :twisted:
Das hast du aber schön gesagt. :P
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 4. Januar 2006, 09:53

elLobo hat geschrieben:1. Ich bilde aus allen gültigen IPs und Ports ein Tupel und kontrolliere, ob dieses schon benutzt wurde, falls nicht, wird es in eine "Blacklist" eingetragen. Der Vorteil hierbei wäre, dass die Datenmenge recht lansgam steigt, aber mit der Zeit es immer schwieriger wird, ein noch nicht benutztes Tupel zu finden, also steigt auch der Aufwand...
Mir ist auch unklar, was du eigentlich machen willst... Aber generell finde ich diesen Ansatz schon ganz gut.
Vielleicht solltest du allerdings jede IP mit einem timestamp versehen. Wenn du eine echte Datenbank benutzt ist es eine Kleinigkeit automatisch veraltete IP-Adressen zu löschen. Ich meine IP-Adressen sind in der Regel relativ flüchtig.
Außerdem kannst du dir die letzte Freie IP-Adresse seperat festhalten und von da an, die nächste freie Suchen... Macht ja keinen Sinn ständig von Null an zu fangen ;)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Sonntag 15. Januar 2006, 19:55

Hi OP!

Ich hab für mein Projekt PyFWBuilder eine Set-Klasse geschrieben die für Integers gedacht ist, und ich hab auch eine kleine Erweiterung für IP-Ranges oben drauf. Das Ding ist unter:

http://aspn.activestate.com/ASPN/Cookbo ... ipe/466298

und

http://aspn.activestate.com/ASPN/Cookbo ... ipe/466286

zu finden. Was genau Du willst ist denke ich nicht implementiert, aber wenn Du effizient port/ip paare speichern willst ist es sicherlich ein einfaches die IP4Range-Klasse soweit zu ändern dass sie noch <ip>:<port> akzeptiert. Daraus erstellst Du dann eine Zahl in der Form:

<port><ip>

Zum Beispiel (in Hex-Notation):

172.22.162.250:50

würde zu

0x0032ac16a2fa

Diese Zahl speicherst Du dann im integer set.

Du ein ganzes Subnet mit einem Port hast würde dass zum Beispiel für:

172.22.162.0/24:50

folgende Zahlen bedeuten:

0x0032ac16a200 - 0x0032ac16a2ff

Das lässt sich natürlich sehr effizient in einem Integer set speichern, und es ist sogar halbwegs sinnvoll darüber Mengen-Relationen zu bilden. Und: die Klasse hat ein einfaches iterator-Protokoll in IntSet bereits vorimplementiert. Du könntest also einfach über das set iterieren, und so alle Hosts die zu fragen sind rauskriegen.

Wenn noch Fragen sind, frag!

--- Heiko.
Antworten