ipliste in sql

Dieses Thema im Forum "SQL und Datenbanken" wurde erstellt von Nemesis, 15.11.2008.

  1. #1 Nemesis, 15.11.2008
    Nemesis

    Nemesis N3RD

    Dabei seit:
    28.01.2005
    Beiträge:
    2.165
    Zustimmungen:
    0
    hi,
    ich habe eine liste von netzwerkgeräten in einer datenbank und möchte mir nun ein script schreiben, das mir ausliest, welches die erste freie ip-adresse in diesem bereich ist.
    gedacht habe ich mir das wie folgt:

    Tabelle Geräte {Bezeichnung, IP}
    Hilfstabelle Count{IP(Autoincrement)}

    nun lässt man mittels einer abfrage Geräte.IP mit Count.IP vergleichen, und wenn die erste nicht-übereinstimmung kommt, dann bedeutet dies ja, dass diese IP nicht belegt ist.

    oder wie würdet ihr herausfinden, welches die niedrigste freie ip ist?
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. daboss

    daboss Keine Macht für niemand!

    Dabei seit:
    05.01.2007
    Beiträge:
    1.294
    Zustimmungen:
    0
    Ort:
    sydney.australia.world
    Ich würd's mit "select max(IP) from Geräte" probieren....
     
  4. #3 sim4000, 15.11.2008
    sim4000

    sim4000 Lebende Foren Legende

    Dabei seit:
    12.04.2006
    Beiträge:
    1.933
    Zustimmungen:
    0
    Ort:
    In meinem Zimmer
    Das wird nicht gehen, da die IP ja als varchar gespeichert sein wird, und er ja nicht die letzte belegte IP Adresse haben will, sondern die erste freie.

    @Nemesis
    Könntest du bitte mal die Tabelle mit samt den Datentypen (Zb als SQL Script) mit ein paar Beispieldaten posten?
    Das würde die Sache erleichtern.
     
  5. daboss

    daboss Keine Macht für niemand!

    Dabei seit:
    05.01.2007
    Beiträge:
    1.294
    Zustimmungen:
    0
    Ort:
    sydney.australia.world
    ah ja, stimmt, die erste freie....

    Naja, warum dann nicht die freien in die Hilfstabelle, statt der belegten (die ja schon in der anderen stehen)?
     
  6. #5 Nemesis, 15.11.2008
    Nemesis

    Nemesis N3RD

    Dabei seit:
    28.01.2005
    Beiträge:
    2.165
    Zustimmungen:
    0
    jetzt komm ich noch gar vollens durcheinander ^^

    ich hatte das so gedacht:

    es gibt eine tabelle in der die netzwerkgeräte mit ip stehen, und eine in der die von mir reservierten ips stehen.
    wenn ich nun ein neues gerät habe, möchte ich die erste freie und nicht reservierte ip zurückgegeben bekommen und diese soll dann in die tabelle mit den reservierten ips eingetragen werden, so dass wenn ich gleich noch eine ip benötige mir die nächste freie ausgegeben wird.

    mein lösungsansatz ist:

    tabellen:
    Geräte(IP, Bezeichnung ...)
    ReservierteIPs(IP)
    HilfstabelleIPs( IP(Autoincrement) )

    abfrage:
    SELECT IP FROM Geräte UNION SELECT IP FROM ReservierteIPs left join HilfstabelleIPs

    oder so ähnlich ...
     
  7. daboss

    daboss Keine Macht für niemand!

    Dabei seit:
    05.01.2007
    Beiträge:
    1.294
    Zustimmungen:
    0
    Ort:
    sydney.australia.world
    Wenn du in der Hilfstabelle die freien IP-Adressen reinschreibst, (und aktuell hältst) kannst du doch aus der einfach die kleinste rauslesen... (Weiss ja nicht, über wie viele Adressen hier geredet wird...)
     
  8. #7 Nemesis, 16.11.2008
    Nemesis

    Nemesis N3RD

    Dabei seit:
    28.01.2005
    Beiträge:
    2.165
    Zustimmungen:
    0
    genau das möchte ich aber automatisiert haben.
     
  9. #8 sim4000, 16.11.2008
    sim4000

    sim4000 Lebende Foren Legende

    Dabei seit:
    12.04.2006
    Beiträge:
    1.933
    Zustimmungen:
    0
    Ort:
    In meinem Zimmer
    Die freien IP Adressen in die Datenbank schreiben ist quatsch.
    Bei einem Class C Netz sind es ja schon allein 254 (oder 253?) Adressen pro Netz. Wenn man die alle in die Datenbank packt, schreibt man sich ja tot!

    Ich sehe als einzige Möglichkeit das über ein externes Script zu machen. Also zB alle belegten IP Adressen aus der DB auslesen, und dann mit einem Bash, PHP, or what ever Script rechnen.
     
  10. #9 Nemesis, 16.11.2008
    Nemesis

    Nemesis N3RD

    Dabei seit:
    28.01.2005
    Beiträge:
    2.165
    Zustimmungen:
    0
    das geht auch mit sql ... wie gesagt die liste der vorhandenen ips mit einer liste in der von 1 bos 254 durchgezählt wird vergleichen und die erste die frei ist ausgeben.
    ich will ja keine liste von freien ips, sondern immer wenn ich eine anfordere soll mir nur die niedrigste freie ausgegeben werden.
     
  11. #10 sim4000, 16.11.2008
    sim4000

    sim4000 Lebende Foren Legende

    Dabei seit:
    12.04.2006
    Beiträge:
    1.933
    Zustimmungen:
    0
    Ort:
    In meinem Zimmer
    hm. Irgentwie checke ich das noch nicht so ganz...
    Mach mal bitte nen Dump von deiner Datenbank und Poste mal hier.
    Es müssen nicht die richtigen Daten sein, aber n paar Beispiel Daten zum Experimentieren wäre gut.
     
  12. #11 Nemesis, 16.11.2008
    Zuletzt bearbeitet: 16.11.2008
    Nemesis

    Nemesis N3RD

    Dabei seit:
    28.01.2005
    Beiträge:
    2.165
    Zustimmungen:
    0
    nimm doch einfach ne liste von ips in 2 tabellen und versuch da herauszubekommen welches die erste freie ist.
    achja, die liste ligt als string, nicht als integer vor.
     
  13. daboss

    daboss Keine Macht für niemand!

    Dabei seit:
    05.01.2007
    Beiträge:
    1.294
    Zustimmungen:
    0
    Ort:
    sydney.australia.world
    Wieso, was ist da Aufwand? Des eintragen erledigt doch 'n Script, oder? und afair funktoiniert min(blub) doch auch auf varchar's, oder nicht? Des ganze andere mit 10x belegte IP's speichern find ich aufwendig......
     
  14. #13 Nemesis, 16.11.2008
    Nemesis

    Nemesis N3RD

    Dabei seit:
    28.01.2005
    Beiträge:
    2.165
    Zustimmungen:
    0
    und selbst wenn min auf varchars funktioniert, was es nicht tut, denn da nimmt es nicht die wertigkeit der gesammten zahl sondern jeder einzelnen nacheinander, ichwill nicht die kleinste haben, sondern die kleinste die frei ist.
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 floyd62, 17.11.2008
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    Keine Ahnung, welche Datenbank du verwendest, aber in Oracle könntest du evtl. etwa so die nächste freie Adresse im 192.168.1.*-Netz bekommen:
    Code:
    with byte4 as (select level "b" from dual connect by level < 255)
    select '192.168.1.'||min(b) "IP"
    from byte4 
    where '192.168.1.'||b not in (select ip from geraete)
    
    Im Prinzip erzeugst du also über eine "select level ... connect by"-Pseudoabfrage eine Liste möglicher Adressen, und überprüfst, ob die in der "geraete"-Tabelle bereits erfasst sind. Damit das funktioniert, müssen die IP-Adressen in der "geraete"-Tabelle natürlich entsprechend normiert/formatiert sein (keine führenden Nullen in den Adressbytes).

    ... das Ganze wie immer nur als Denkanstoss, ungetestet, ohne Rücksicht auf Performance etc. :)

    Grüsse
     
  17. #15 Nemesis, 17.11.2008
    Nemesis

    Nemesis N3RD

    Dabei seit:
    28.01.2005
    Beiträge:
    2.165
    Zustimmungen:
    0
    also, ich habs heut realisiert, es funktioniert, in dem man mittels left join die beiden spalten der tabellen vergleicht und sich das erste ergebnis (sofern aufsteigend geordnet) ausgeben lässt.
     
Thema:

ipliste in sql