IP-Bereiche analysieren

    • VB.NET

      IP-Bereiche analysieren

      Eine IP kennt manja in dieser Schreibweise, zB: "127.0.0.64"
      Dahinter verbirgt sich schlicht ein Integer, also eine Zahl mit 32 Bits. Obige Schreibweise stellt eben die 4 Bytes eines Unsigned Int32 dar.

      Also bekommt man alle IPs in einem durch 2 IPs definierten Range, indem man obige Darstellung in einen UInt32 konvertiert, und dann kann man hochzählen.
      Bzw. die Anzahl der in einem Range enthaltenen IPs ergibt sich aus der Subtraktion der höheren von der niedrigeren.

      Mein Sample:

      VB.NET-Quellcode

      1. Imports System.ComponentModel
      2. Public Class Form1
      3. Private _IPs As New BindingList(Of String)
      4. Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
      5. ListBox1.DataSource = _IPs
      6. End Sub
      7. Private Function IP2Int(ByVal ip As String) As UInt32
      8. 'split zerteilt ip in 4 strings, die je eine Zahl darstellen
      9. 'Byte.Parse wandelt je ein Segment in ein Byte um
      10. 'Select sammelt diese Bytes in ein IEnumerable(Of Bytes)
      11. 'ToArray macht daraus ein Byte-Array
      12. Dim bytes = (From s In ip.Split("."c) Select Byte.Parse(s)).ToArray
      13. Array.Reverse(bytes) 'dreht die Reihenfolge um
      14. Dim integers(0) As UInt32 'ein Array von UInt32 mit nur einem Element
      15. ' (ein Integer ist genauso groß wie 4 Bytes)
      16. 'BlockCopy kann ein Array des einen Typs byte-weise umkopieren in ein Array eines anderen Typs
      17. 'kopiert also die 4 Bytes auf den UInt32
      18. Buffer.BlockCopy(bytes, 0, integers, 0, 4)
      19. Return integers(0) 'den UInt32 returnen
      20. End Function
      21. Private Function Int2IP(ByVal n As UInt32) As String
      22. Dim integers = New UInt32() {n} 'ein Array von UInt32 mit nur dem einem Element
      23. Dim bytes(3) As Byte 'Array mit 4 Bytes
      24. Buffer.BlockCopy(integers, 0, bytes, 0, 4) 'den UInt32 auf die 4 Bytes kopieren
      25. Array.Reverse(bytes) 'reihenfolge umdrehen
      26. 'Byte-Array in ein String-Array konvertieren
      27. Dim strings = bytes.Select(Function(b) b.ToString)
      28. 'Strings verketten und returnen
      29. Return String.Join(".", strings.ToArray)
      30. End Function
      31. Private Sub btStart_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btStart.Click
      32. Dim ip0 = txtStartIP.Text
      33. Dim ip1 = txtEndIP.Text
      34. 'Zur Geschwindigkeitsoptimierung wird das Databinding temporär ausgesetzt
      35. _IPs.RaiseListChangedEvents = False
      36. _IPs.Clear()
      37. 'Die Schleife zählt von der einen ip-Repräsentation zur anderen
      38. For i = IP2Int(ip0) To IP2Int(ip1)
      39. _IPs.Add(Int2IP(i)) 'zurückgewandelte ip-Repräsentationen ausgeben
      40. Next
      41. _IPs.RaiseListChangedEvents = True
      42. _IPs.ResetBindings()
      43. End Sub
      44. End Class
      Dateien
      • IPConverter.zip

        (14,72 kB, 291 mal heruntergeladen, zuletzt: )