Avatar billede bigo Nybegynder
04. november 2010 - 21:55 Der er 17 kommentarer og
1 løsning

Find nærmeste Netværk (med Cidr)

Hejsa.

Endnu en lille ip relateret ting.

Jeg har to ipadresser:

f.eks. 192.168.2.4 og 192.168.2.25

Jeg vil gerne ud fra de to adresser kunne finde det nærmeste valide segment med / notation.
f.eks.
192.168.2.8/29
og efterfølgende
192.168.2.16/29
Avatar billede mcb2001 Nybegynder
05. november 2010 - 08:07 #1
jeg tror du er nød til at uddybe hvad ud mener.

For 192.168.2.4 er IKKE indeholdt i 192.168.2.8/29
Avatar billede bigo Nybegynder
05. november 2010 - 12:35 #2
Nej, netop.. ;-)

Det er det nærmeste segment der skal findes (jeg ved jeg angav to segmenter, men jeg tænker at det måske også kunne lade sig gøre..)
Avatar billede bigo Nybegynder
05. november 2010 - 12:37 #3
Nej, netop.. ;-)

Det er det nærmeste segment der skal findes (jeg ved jeg angav to segmenter, men jeg tænker at det måske også kunne lade sig gøre..)
Avatar billede mcb2001 Nybegynder
05. november 2010 - 12:54 #4
men vil du finde det nærmeste segment der indeholder de to adresser?
Avatar billede bigo Nybegynder
05. november 2010 - 13:01 #5
jeps. men så tæt på som muligt. så det gør ikke noget at følgende kan gøre sig gældende (tager lige udgangspunkt i ovenstående ipadresser.)

192.168.2.4 og 192.168.2.25

Jeg vil gerne ud fra de to adresser kunne finde det nærmeste valide segment med / notation.
f.eks.
192.168.2.8/29
og efterfølgende
192.168.2.16/29

Men det kan også være 192.168.2.0/27 (da det også nærmest er 32 adresser vi taler om)

Så jeg mener at det er en principiel beslutning pt. Men det kan også være kode mæssigt at det kun kan være den "største" der vinder..
Avatar billede mcb2001 Nybegynder
05. november 2010 - 13:07 #6
når du skriver 192.168.2.8/29 så vil jeg gerne have dig til at forklare hvor du får det fra???

For du kunne jo også have valgt 192.168.2.4/29 eller 192.168.2.3/29 som begge to indeholde 192.168.2.4
Avatar billede mcb2001 Nybegynder
05. november 2010 - 13:08 #7
Avatar billede bigo Nybegynder
05. november 2010 - 13:15 #8
192.168.2.4/29 - er ikke korrekt angivet.

hvis vi er i 8 adresser spektret (/29) ser det ud som følger:
192.168.2.0/29
192.168.2.8/29
192.168.2.16/29
192.168.2.24/29
192.168.2.32/29
osv..

/30 (4 adresser - bare for at give eks.)
192.168.2.0/30
192.168.2.4/30
192.168.2.8/30
192.168.2.12/30
192.168.2.16/30
osv..

Derfor.
Men, du har ret i (hvis jeg vælger - kan jeg nu se - at forstå det på en anden måde)
at man kan se 192.168.2.3/29 som en valid fordi .3 er en del af .0/29 segmenteringen.

Men det jeg ønsker (jeg kan se at jeg ikke har tilkendegivet den korrekt) er at hvis jeg f.eks. angiver 192.168.2.4 og 192.168.2.25 som adresser. Så er det jeg ønsker en angivelse af det nærmeste der er muligt - og jeg kan nu se at det i dette tilfælde ville være 192.168.2.0/27 og ikke som jeg tidligere har angivet f.eks. 192.168.2.8/29 og 192.168.2.16/29
Avatar billede mcb2001 Nybegynder
05. november 2010 - 13:28 #9
/29 betyder at de første 29 bit i adressen er faste og derfor er de resterende 3 bit afgørende for adressen.

Så hvis jeg skriver 192.168.2.4/29 betyder det at jeg vil have 192.168.2.4 indeholdt, og at jeg vil have de adresser dermed denne indehold kun adskiller sig på de sidste tre bit (8 adresser som du selv skriver).

Det betyder at basen er 192.168.2.0, første ip er 192.168.2.1, sidste ip er 192.168.2.6 og broadcast er 192.168.2.7.

Og ja, det er det samme som at skrive 192.168.2.0/29
Avatar billede bigo Nybegynder
05. november 2010 - 13:59 #10
Vi er enige. Men hvordan kan en løsning være php mæssigt.. hmmm.. is nice..
Avatar billede mcb2001 Nybegynder
05. november 2010 - 14:15 #11
men så lad os tage dit eksempel.

Du har

$a = x.4
$b = x.25

Da x er ens, kan du bruge:

$a = 4
$b = 25

så bruger du noget a'la
max($a, $b) - min($a, $b) = 25 - 4 = 21.

$val = ln(21)/ln(2) = 4.39....
ceil($val) = ceil(4.39) = 5

Så kan du se at du skal bruge et 2^5 netværk (32 adresser), altså et /27. og så konstruerer du følgende:

så skal du løse denne ligning:
n <= min($a, $b)
-->
n <= min($a, $b) / (2**$val)
n = 0

og det giver så:
x.0/27

eller
192.168.2.0/27
Avatar billede mcb2001 Nybegynder
05. november 2010 - 14:16 #12
$val = ln(21)/ln(2) = 4.39....

det skulle være

$val = log(21) / log(2) = 4.39....
Avatar billede bigo Nybegynder
05. november 2010 - 14:25 #13
x = 192.168.2.
n=0
val=27
udfra ovenstående beregninger?
(bare så jeg forstår korrekt)
Avatar billede bigo Nybegynder
05. november 2010 - 14:51 #14
og.. sorry.. men det med ligningen.. der tabte du mig.. det ved jeg skisme ikke lige hvordan jeg gør..
Avatar billede mcb2001 Nybegynder
05. november 2010 - 16:01 #15
Jeg skriver lidt mere i aften
Avatar billede mcb2001 Nybegynder
08. november 2010 - 10:19 #16
Det du bare skal se er at du skal bruge:
$n = min($a, $b) / (2**$val)
og så få $n ud af det
Avatar billede bigo Nybegynder
08. november 2010 - 11:14 #17
Smukt.. det virker jo..
Smid et svar.. det fortjener du sg trods alt ;-)
Avatar billede mcb2001 Nybegynder
08. november 2010 - 11:27 #18
hahaha
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester