Avatar billede joe_dalton Nybegynder
14. april 2009 - 15:39 Der er 2 kommentarer og
1 løsning

Convertering af IP Range til CIDR

Hej Experter! :D

Jeg har et problem som jeg håber i kan hjælpe mig med. Jeg har en textfil som indeholder data i følgende orden:

1. 62.27.6.64 62.27.6.127
2. 62.44.128.0 62.44.191.255
3. 62.61.128.0 62.61.159.255
..
...

Jeg skal have konverteret hver eneste linie til CIDR f.eks til '62.27.6.64/26' hvis vi tager udgangspunkt i linie 1. Det jeg skal gøre, er at læse fra textfilen (hvilket jeg kan) og derefter subnette (hvilket jeg ikke er god til). Håber der er nogen der kan hjælpe.

På forhånd tak!

Mvh

Kalle
Avatar billede CCodam Nybegynder
14. april 2009 - 16:14 #1
Jeg kunne slet ikke komme i tanke om en god måde at kode det på, men har er i hvert fald et bud der virker :) dog skal den første ip være netværks adressen i subnettet og den anden ip være broadcast adressen...som dine 3 eksempler også er...

Den udskriver /999 i det nye dokument, hvis det ikke er et gyldigt subnet...

Kopier og gem som filnavn.vbs - ændrer lokationen for readfile og writefile :)


Dim FSO, readfile, writefile
Dim arrIP, arrFirstIP, arrSecondIP
Dim subnet, err

Set FSO = CreateObject("Scripting.FileSystemObject")
Set readfile = FSO.OpenTextFile("c:\ip\ip.txt", 1, false)
Set writefile = FSO.CreateTextFile("c:\ip\ipny.txt", true)


Do While Not readfile.AtEndOfStream
  subnet = 0
  arrIP = Split(readfile.ReadLine, " ")
  arrFirstIP = Split(arrIP(1), ".")
  arrSecondIP = Split(arrIP(2), ".")
 
  If arrSecondIP(0) = arrFirstIP(0) Then
    subnet = subnet + 8
  Elseif (arrSecondIP(0)-arrFirstIP(0)) = 1 Then
    subnet = subnet + 7
  Elseif (arrSecondIP(0)-arrFirstIP(0)) = 3 Then
    subnet = subnet + 6
  Elseif (arrSecondIP(0)-arrFirstIP(0)) = 7 Then
    subnet = subnet + 5
  Elseif (arrSecondIP(0)-arrFirstIP(0)) = 15 Then
    subnet = subnet + 4
  Elseif (arrSecondIP(0)-arrFirstIP(0)) = 31 Then
    subnet = subnet + 3
  Elseif (arrSecondIP(0)-arrFirstIP(0)) = 63 Then
    subnet = subnet + 2
  Elseif (arrSecondIP(0)-arrFirstIP(0)) = 127 Then
    subnet = subnet + 1
  Elseif (arrSecondIP(0)-arrFirstIP(0)) = 255 Then
    subnet = subnet + 0
  Else
    err = True
  End If
 
  If arrSecondIP(1) = arrFirstIP(1) Then
    subnet = subnet + 8
  Elseif (arrSecondIP(1)-arrFirstIP(1)) = 1 Then
    subnet = subnet + 7
  Elseif (arrSecondIP(1)-arrFirstIP(1)) = 3 Then
    subnet = subnet + 6
  Elseif (arrSecondIP(1)-arrFirstIP(1)) = 7 Then
    subnet = subnet + 5
  Elseif (arrSecondIP(1)-arrFirstIP(1)) = 15 Then
    subnet = subnet + 4
  Elseif (arrSecondIP(1)-arrFirstIP(1)) = 31 Then
    subnet = subnet + 3
  Elseif (arrSecondIP(1)-arrFirstIP(1)) = 63 Then
    subnet = subnet + 2
  Elseif (arrSecondIP(1)-arrFirstIP(1)) = 127 Then
    subnet = subnet + 1
  Elseif (arrSecondIP(1)-arrFirstIP(1)) = 255 Then
    subnet = subnet + 0
  Else
    err = True
  End If
   
  If arrSecondIP(2) = arrFirstIP(2) Then
    subnet = subnet + 8
  Elseif (arrSecondIP(2)-arrFirstIP(2)) = 1 Then
    subnet = subnet + 7
  Elseif (arrSecondIP(2)-arrFirstIP(2)) = 3 Then
    subnet = subnet + 6
  Elseif (arrSecondIP(2)-arrFirstIP(2)) = 7 Then
    subnet = subnet + 5
  Elseif (arrSecondIP(2)-arrFirstIP(2)) = 15 Then
    subnet = subnet + 4
  Elseif (arrSecondIP(2)-arrFirstIP(2)) = 31 Then
    subnet = subnet + 3
  Elseif (arrSecondIP(2)-arrFirstIP(2)) = 63 Then
    subnet = subnet + 2
  Elseif (arrSecondIP(2)-arrFirstIP(2)) = 127 Then
    subnet = subnet + 1
  Elseif (arrSecondIP(2)-arrFirstIP(2)) = 255 Then
    subnet = subnet + 0
  Else
    err = True
  End If
   
  If arrSecondIP(3) = arrFirstIP(3) Then
    subnet = subnet + 8
  Elseif (arrSecondIP(3)-arrFirstIP(3)) = 1 Then
    subnet = subnet + 7
  Elseif (arrSecondIP(3)-arrFirstIP(3)) = 3 Then
    subnet = subnet + 6
  Elseif (arrSecondIP(3)-arrFirstIP(3)) = 7 Then
    subnet = subnet + 5
  Elseif (arrSecondIP(3)-arrFirstIP(3)) = 15 Then
    subnet = subnet + 4
  Elseif (arrSecondIP(3)-arrFirstIP(3)) = 31 Then
    subnet = subnet + 3
  Elseif (arrSecondIP(3)-arrFirstIP(3)) = 63 Then
    subnet = subnet + 2
  Elseif (arrSecondIP(3)-arrFirstIP(3)) = 127 Then
    subnet = subnet + 1
  Elseif (arrSecondIP(3)-arrFirstIP(3)) = 255 Then
    subnet = subnet + 0
  Else
    err = True
  End If
 
  If err = True Then
  subnet = 999
  End If
 
  writefile.WriteLine(arrIP(1) & "/" & subnet)
Loop

readfile.close
writefile.close
Avatar billede joe_dalton Nybegynder
14. april 2009 - 18:23 #2
Super! Husk dog lige at 'err' skal sættes til False igen. :-) Men det virker fint. Smid et svar og du får point!
Avatar billede CCodam Nybegynder
14. april 2009 - 18:34 #3
Ups ja, det var en misser :P
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