Nutzbare IP-Adressen-Bereich ausgeben

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Takafusa.

    Nutzbare IP-Adressen-Bereich ausgeben

    Hallo,

    ich würde mir gerne die theoretisch verfügbaren Adressen zusätzlich anzeigen lassen wollen.
    Bisher habe ich geschafft mir die Netzwerkadresse, Broadcast-Adresse und die maximale Anzahl an Hosts anzeigen zu lassen.
    Als Eingabe ist immer etwas wie "192.168.1.1/30" gegeben.

    Könnt ihr mir bitte helfen, dass die theoretisch verfügbaren Adressen zusätzlich angezeigt werden?

    So sieht mein Code bisher aus :

    VB.NET-Quellcode

    1. 'Bsp 192.168.1.1/30
    2. Dim Eingabe() As String = TXTIP.Text.Split("/"c)
    3. If Eingabe.Length <> 2 Then Exit Sub
    4. Dim IPAddresse As IPAddress = IPAddress.Parse(Eingabe(0))
    5. Dim NetzMaskeInt As Integer = 0
    6. Dim SubNetSuffix As Integer = CInt(Eingabe(1))
    7. For i = 31 To 32 - SubNetSuffix Step -1
    8. NetzMaskeInt = NetzMaskeInt Or (1 << i)
    9. Next
    10. Dim NetzMaske() As Byte = BitConverter.GetBytes(NetzMaskeInt).Reverse.ToArray()
    11. Dim NetzWerk(3) As Byte
    12. For i = 0 To 3
    13. NetzWerk(i) = IPAddresse.GetAddressBytes()(i) And NetzMaske(i)
    14. Next
    15. Dim BroadCast(3) As Byte
    16. For i = 0 To 3
    17. BroadCast(i) = IPAddresse.GetAddressBytes()(i) Or Not NetzMaske(i)
    18. Next
    19. Dim NetzWerkAdresse As New Net.IPAddress(NetzWerk)
    20. Dim broadCastIp As New Net.IPAddress(BroadCast)
    21. Debug.WriteLine("Netzwerk-Adresse = " & NetzWerkAdresse.ToString()) 'Ergebnis muss sein : 192.168.1.0
    22. Debug.WriteLine("BroadCast-Adresse = " & broadCastIp.ToString()) 'Ergebnis muss sein : 192.168.1.3
    23. Debug.WriteLine("Anzahl verfügbare IPs = " & NetzMaskeInt * -1 - 2) 'Ergebnis muss sein : 2
    24. '??????????????????????
    25. Debug.WriteLine("Nutzbare IPs = " & NetzMaskeInt * -1 - 2) 'Ergebnis muss sein : 192.168.1.1 - 192.168.1.2
    Der Code sieht absolut so aus wie von einem Kollegen der bei mir umme Ecke wohnt, dem hab ich beim schreiben unter die Arme gegriffen(hab ihm das erkärt), nur mit deutschen Variablen-Namen. Haste den von ihm gemopst und auf deustch übersetzt? Hast sogar ein Problem drin, hat er damals auch gemacht, gib mal 1 als Suffix an, gibt nen Overflow, du solltest prüfen ob Suffix < 2 ist um nen Crash zu vermeiden.

    Du hast also die NetzwerkAdresse, wie auch die BroadCastAdresse, musst also nur noch von NetzwerkAdresse + 1 bis BroadCastAdresse -1 einen loop erstellen,(beide zu UINT) mit den Wert der Loopvariable eine IPAddress instanzieren, davon wieder die Bytes hohlen, umdrehen, von den Bytes wieder ein IP Instanzieren, das denn ToString. Kannste so realiseren:

    (Geht sicher eleganter, aber es tuts)
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Net
    2. Module Module1
    3. Sub Main()
    4. 'Bsp 192.168.1.1/30
    5. Dim IPAddresse As IPAddress = IPAddress.Parse("192.168.1.1")
    6. Dim NetzMaskeInt As Integer = 0
    7. Dim SubNetSuffix As Integer = 2
    8. For i = 31 To 32 - SubNetSuffix Step -1
    9. NetzMaskeInt = NetzMaskeInt Or (1 << i)
    10. Next
    11. Dim NetzMaske() As Byte = BitConverter.GetBytes(NetzMaskeInt).Reverse.ToArray()
    12. Dim NetzWerk(3) As Byte
    13. For i = 0 To 3
    14. NetzWerk(i) = IPAddresse.GetAddressBytes()(i) And NetzMaske(i)
    15. Next
    16. Dim BroadCast(3) As Byte
    17. For i = 0 To 3
    18. BroadCast(i) = IPAddresse.GetAddressBytes()(i) Or Not NetzMaske(i)
    19. Next
    20. Dim NetzWerkAdresse As New Net.IPAddress(NetzWerk)
    21. Dim broadCastIp As New Net.IPAddress(BroadCast)
    22. Console.WriteLine("Netzwerk-Adresse = " & NetzWerkAdresse.ToString()) 'Ergebnis muss sein : 192.168.1.0
    23. Console.WriteLine("BroadCast-Adresse = " & broadCastIp.ToString()) 'Ergebnis muss sein : 192.168.1.3
    24. Console.WriteLine("Anzahl verfügbare IPs = " & NetzMaskeInt * -1 - 2) 'Ergebnis muss sein : 2
    25. Dim start As UInteger = BitConverter.ToUInt32(NetzWerkAdresse.GetAddressBytes().Reverse.ToArray(), 0)
    26. Dim ende As UInteger = BitConverter.ToUInt32(broadCastIp.GetAddressBytes().Reverse.ToArray(), 0)
    27. For i = start + 1 To ende - 1
    28. Dim ipBytes = New IPAddress(i).GetAddressBytes().Reverse.ToArray()
    29. Console.WriteLine(New IPAddress(ipBytes).ToString)
    30. Next
    31. Console.ReadKey()
    32. End Sub
    33. End Module


    Edit:
    Lol, yeah, dachte mir schon fast er hat das hier gepostet, google Suche nach site:vb-paradise.de noide ip lieferte:Ip-Berechnung

    broadCastIp haste aber vergessen zu Übersetzen, die Schreibweise ist sogar identisch.


    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Takafusa“ ()

    Hi,
    ja das stimmt, das ich es aus dem Thread habe. aber da mir mal geschrieben wurde, ich soll nicht auf einen alten thread antworten, habe ich einen neuen aufgemacht.

    Soweit so gut, in der Console werden jetzt auch tatsächlich alle nutzbaren IPs aufgelistet. Danke.

    Mein Ziel ist es jedoch ein "von - bis" in einer TextBox auszugeben.
    Mit ​TextBox20.Text = New IPAddress(ipBytes).ToString bekomme ich aber dann "nur" die höchste verfügbare IP angezeigt. Wie kann ich zusätzlich die niedrigste mit angeben?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „zauber777“ ()

    Richtig, haste IMO auch nicht falsch gemacht. Hatte erst die Vermutung du kennst ihn auch, weil ich den Code kannte, nur jetzt war er übersetzt. Ich weiss er wollte noch weiter dran arbeiten, haben aber nicht mehr drüber gesprochen. Hab auf doof einfach mal gesucht weil ich weiss das er hier auch angemeldet ist.

    Edit @zauber777
    Hast glück das ich dein Edit gelesen hab, neuer Post wäre vorteilhafter gewesen.

    In dem Fall, sparste den Loop.

    VB.NET-Quellcode

    1. Dim start As UInteger = BitConverter.ToUInt32(NetzWerkAdresse.GetAddressBytes().Reverse.ToArray(), 0) + 1
    2. Dim ende As UInteger = BitConverter.ToUInt32(broadCastIp.GetAddressBytes().Reverse.ToArray(), 0) - 1
    3. Dim ipBytes = New IPAddress(start).GetAddressBytes().Reverse.ToArray()
    4. dim ipStart as IPAddress = New IPAddress(ipBytes)
    5. ipBytes = New IPAddress(ende).GetAddressBytes().Reverse.ToArray()
    6. dim ipEnde as IPAddress = New IPAddress(ipBytes)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Takafusa“ ()