5 Stimmen

Wie finde ich am einfachsten freie IP-Adressen im aktuellen Subnetz?

Wie findet man am einfachsten die nächste ungenutzte IP-Adresse im Subnetz eines lokalen Adapters?

IPAddress GetNextFreeIP(NetworkInterface intface)
{
    ...?
}

Update
Ich habe einen BOOTP/TFTP-Server geschrieben, der in vielen verschiedenen Szenarien eingesetzt werden kann (Cross-over-Kabel, kleines privates Netzwerk, großes Unternehmensnetzwerk). Ich muss dem kleinen eingebetteten System, das ich aktualisiere, eine IP-Adresse geben und würde gerne eine Ersatzadresse finden, die es verwenden kann...

1voto

Thorsten79 Punkte 9872

Wenn Sie DHCP-verwaltete IP-Bereiche haben, haben Sie eine Instanz, mit der Sie sprechen können - den DHCP-Server (wie von David empfohlen)

Wenn Sie keine verwalteten IP-Bereiche und keine andere Instanz haben, mit der Sie kommunizieren können, gibt es keine zuverlässige Methode, um festzustellen, ob eine IP verwendet wird oder nicht. IP selbst bietet einen solchen Dienst nicht an.

1voto

Martin Wickman Punkte 19017

Abgesehen davon, dass Sie den DHCP-Server fragen, könnten Sie einen Broadcast-Ping im Subnetz durchführen, die Antworten aller Computer sammeln und einfach die IP-Adressen sortieren, um die nächste Adresse zu finden. Dies setzt natürlich voraus, dass alle Geräte online sind und auf Broadcasts reagieren. In einer ziemlich kontrollierten Umgebung könnte dies also funktionieren.

0voto

Tuinstoelen Punkte 1211

Die kurze Antwort ist, dass man das nicht kann, wie Thorsten79 gerade sagte.

Eine etwas längere Antwort:

Das hängt von der Konfiguration Ihres Netzes ab: wie der Administrator die IP-Adressen zugewiesen hat. Normalerweise gibt es eine Mischung aus manuell zugewiesenen IP-Adressen für Server, Router usw. und eine Reihe von dhcp-zugewiesenen IP-Adressen für Arbeitsstationen und dergleichen.

Wenn Sie mit dem DHCP-Server sprechen können, erfahren Sie vielleicht, welche Adressen im reservierten Bereich frei sind, aber für den Rest der Adressen können Sie nichts herausfinden.

Die interessantere Frage ist, was Sie zu erreichen versuchen? Vielleicht lässt es sich auf andere Weise verwirklichen?

0voto

Robert Deml Punkte 11970

Nach dem, was ich von eingebetteten Geräten mit einem TFTP-Server gesehen habe, booten sie mit einer fest kodierten IP-Adresse, die dokumentiert ist. Nach einer bestimmten Zeit (~3-10 Sekunden) überträgt der Bootloader die Kontrolle an die Anwendung, die die Konfiguration liest und die IP-Adresse festlegt.

Wenn jemand den Bootloader zum Laden einer neuen Firmware verwenden möchte, muss er die Dokumentation lesen, sicherstellen, dass die IP-Adresse erreichbar ist (im selben Subnetz), das Gerät neu starten und die Anwendung per TFTP auf das Gerät übertragen.

0voto

Tim Punkte 7017

Sie haben alle technisch gesehen Recht, wenn Sie sagen, dass es keine Möglichkeit gibt, sicherzustellen, dass eine IP nicht verwendet wird. Aber ich habe beschlossen, mich im Moment darauf zu verlassen...

    public static IPAddress FindNextFree(this IPAddress address)
    {
        IPAddress workingAddress = address;
        Ping pingSender = new Ping();

        while (true)
        {
            byte[] localBytes = workingAddress.GetAddressBytes();

            localBytes[3]++;
            if (localBytes[3] > 254)
                localBytes[3] = 1;

            workingAddress = new IPAddress(localBytes);

            if (workingAddress.Equals(address))
                throw new TimeoutException("Could not find free IP address");

            PingReply reply = pingSender.Send(workingAddress, 1000);
            if (reply.Status != IPStatus.Success)
            {
                return workingAddress;
            }
        }
    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X