In einer Schleife mögliche IPs durchlaufen?

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

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Niko Ortner.

    In einer Schleife mögliche IPs durchlaufen?

    Morgen erstmal.
    Ich hab mir überlegt dass es ja ein wenig mühsam ist, beim Chatten (TCP-Multiserver) jedes Mal allen Usern die Server-IP durchzugeben.
    Mit NO-IP oder wie die alle heißen kann ich nichts anfangen, da wir keine Internetverbindung haben.
    Daher frage ich mich ob es möglich ist, dass der Client alle IPs des aktuellen Netzwerkes (vllt. sind die ja irgendwo geispeichert?) durchläuft, bis er die Server-IP gefunden hat.
    Klar kannste.
    Wenn du die IPs aller Clients in deinem "Netzwerk" dir merkst, speicher sie in einer generischen List(Of IPAddress)(in C#: List<IPAddress>). Die kannste dann mit ner ForEach durch :D
    Oder du machst dir eine verschachtelte For-Schleife, in der du von 0 bis 255 hochzählst,

    VB.NET-Quellcode

    1. For a = 0 To 255
    2. For b = 0 To 255
    3. For c = 0 To 255
    4. For d = 0 To 255
    5. strList.Add(a & "." & b & "." & c & "." & d)
    6. Next
    7. Next
    8. Next
    9. Next


    Des Snippet geht halt von 0.0.0.0 bis 255.255.255.255, kannste ja anpassen :D

    Lg Radinator
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    @Radinator
    Das macht aber nicht wirklich Sinn. Denn niemand ist unter der IP 127.0.0.1 oder 255.255.255.255 zu erreichen.
    Und von diesen IPs gibt's eine ganze Menge.
    Und davon abgesehen dauert's eine Weile, bis 2^32 IP-Adressen angepingt sind. (Dauert schon mit 256 lange genug.)

    @radio-ffk
    Ich hab sowas mal für ein Multiplayer-Spiel gebastelt.
    Mit einem UDP-Client kann der Server über einen vorher festgelegten Port und auf der Broadcast-Adresse ein UDP-Paket versenden, in dem drin steht, dass es sich um Deinen Chat handelt, und unter welcher IP Dein Chat-Server erreichbar ist. Alle Clients hören auf dem Port und warten auf so ein Paket (ebenfalls mit dem UdpClient). Wenn eins rein kommt, wird die IP-Adresse rausgeholt und in einer Liste gespeichert. Hin und wieder mal hinpingen kann nicht schaden, um festzustellen, ob der Server noch läuft. Wenn der Ping fehlschlägt, aus der Liste entfernen.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    @Niko Ortner Aber geht das denn nicht bei TCP? Darauf basiert ja der ganze Chat.

    Ich benutze zur Zeit diese Funktion um die IP des Servers in dessen Konsole anzuzeigen.

    VB.NET-Quellcode

    1. serverip = Dns.GetHostEntry(Dns.GetHostName()).AddressList.ToList().Find(Function(ip) ip.AddressFamily = System.Net.Sockets.AddressFamily.InterNetwork).ToString()

    Wobei ip vom Typ System.Net.IPAddress ist.

    Was ist das

    Quellcode

    1. Dns.GetHostEntry(Dns.GetHostName()).AddressList.ToList()
    eigentlich für eine Liste?
    Du kannst die TCP Verbindung komplett unabhängig von den UDP-Packets handhaben. Es muss nur ein anderer Port sein. (Siehe Post #8)

    Was ist das [...] eigentlich für eine Liste?

    Präzisiere "diese Liste".
    Du findest alles, was da steht, in der MSDN dokumentiert. Ich könnte das jetzt alles für Dich nachschlagen, aber am einfachsten ist es, wenn Du nach msdn Dns Class googelst. und dort die Funktionen anguckst. Bzw. halt alles andere, was Du wissen möchtest.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

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

    Niko Ortner schrieb:

    Das macht aber nicht wirklich Sinn. Denn niemand ist unter der IP 127.0.0.1 oder 255.255.255.255 zu erreichen.

    *Hust hust*:

    Radinator schrieb:

    Des Snippet geht halt von 0.0.0.0 bis 255.255.255.255, kannste ja anpassen

    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Ich lese jetzt die ersten 3 Zahlen der eignen IP als Anfang der Subnetzmaske aus und lasse die letzte Zahl von 0 bis 255 durchlaufen. Dann findet er den Server ziemlich schnell. Danke für die Ideen @Radinator und @Niko Ortner

    Niko Ortner schrieb:

    Du kannst die TCP Verbindung komplett unabhängig von den UDP-Packets handhaben. Es muss nur ein anderer Port sein.
    Nein, du kannst TCP- und UDP-Anwendungen über die selbe Portnummer laufen lassen. Ports sind protokollspezifisch, daher stören die sich nicht gegenseitig.
    Mit freundlichen Grüßen,
    Thunderbolt
    @Thunderbolt
    Danke dafür. Ich hatte bisher immer gedacht, Ports wären Teil des IP-Protokolles. Eine kleine Recherche hat ergeben, dass die Ports tatsächlich je Teil von TCP und UDP sind und eigentlich unabhängig voneinander sind.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils