Die Berechnung aller Adressen in einem Subnetz für IPv6...
Ich habe gesehen, viele große C# - Beispiele, die zeigen, wie konvertieren von IPv4-Adressen im CIDR-notation (z.B. 192.168.0.1/25) in Ihre jeweiligen Bereiche (192.168.0.1 - 192.168.0.126). Mein Programm muss in der Lage sein, dies zu tun (zum berechnen der Adressen in meinem lokalen Subnetz) aber ich will auch IPv6 unterstützen.
Wenn mein C# - Programm hat alle meine typische ipconfig Informationen (IPv4-Adresse, Subnetzmaske IPv6-Adresse link-local-v6-Adresse, Standard-gateway) - wie würde ich mich über eine generierte Liste aller IPv6-Adressen in meinem lokalen Subnetz und Ausgabe diese auf der Konsole?
- Müssen Sie wahrscheinlich zu überdenken Sie Ihre Funktionalität. Vom design fast jedem Subnetz sehen Sie auf IPv6 werden /64 oder (2^64)-1 beherbergt eine große.
- Das ist richtig, ich möchte alle 18,446,744,073,709,551,616 IP-Adressen 😉
- Und was werden Sie tun mit Ihnen? Selbst bei 10 Millionen pro Sekunde, die Sie bräuchte, 58,000 Jahre, um durch Sie gehen alle.
- Bei einem früheren job, wo wir haben eine Menge von Netzwerk-Scannen, stellten wir schnell fest, dass jede Art von address-space-scan-für IPv6 ist im wesentlichen Sisyphus, und dass wir angreifen mussten einige unserer problem Raum, in einer anderen Weise.
- Ich denke, er will einfach nur zu nehmen
2001:DB8::/48
und konvertieren, dass zu2001:DB8:0:0:0:0:0:0 - 2001:DB8:0:FFFF:FFFF:FFFF:FFFF:FFFF
bekommen nicht jede mögliche Adresse. - alles, was ich habe zu gehen auf ist, "erzeugt eine Liste von allen IPv6-Adressen in meinem lokalen Subnetz"...
- Ja, ich bin Annahmen auf der Grundlage der
;)
Teil von seinem Kommentar 🙂 - Danke Jungs. Emiswelt hat geschrieben code, die bietet tatsächlich beides...es wird mir das reicht oder (wenn ich mich selbstmörderisch) die einzelnen IP-Adressen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die eExNetworkLibrary.IP.IPAddressAnalysis Klasse aus der eExNetworkLibrary.
Der folgende code funktioniert mit IPv4 und IPv6 (gerade getestet).
ich bin mir nicht ganz sicher, ob ich getan habe, die Umstellung von der Präfix-Länge ein byte-array, in dem die Subnetz-Maske in Ordnung, aber dieser code sollte Ihnen einen guten Ausgangspunkt.Bearbeiten: Aktualisiert das bit-Biege-Teil des Codes. Vielleicht hässlich, aber funktioniert für dieses Beispiel. Ich denke, Sie werden in der Lage zu finden eine bessere Lösung, wenn Sie benötigen. Diese BitArrays sind ein Schmerz im Nacken.
Sich bewusst sein, dass die Generierung einer IPv6-Netzwerk-Bereich kann eine sehr Speicher - /cpu-anstrengende Aufgabe, wenn das Netzwerk groß ist.
exNetworkLibrary ist ein tolles Werkzeug, aber wenn Sie nicht können es verwenden in Ihrem Projekt, dann können Sie nur wollen, finden Sie in diesem Artikel:
http://www.codeproject.com/Articles/112020/IP-Address-Extension
Es skizziert, wie die Adresse, die Masken sind berechnet für den Einsatz in IPv4.
Ihre Frage ist im Zusammenhang mit IPv6 sehe ich Da .Net 4.5 gibt es eine
IPAddress.MapToIPv6
Methode.https://msdn.microsoft.com/en-us/library/system.net.ipaddress.maptoipv6(v=vs. 110).aspx
Können Sie nutzen, dass mit den Prüfungen in den Artikel zu produzieren, die diesen code:
Ich würde empfehlen die Verwendung von IPNetwork Bibliothek https://github.com/lduchosal/ipnetwork.
Ab der version 2, unterstützt IPv4 und IPv6 als auch.
IPv6
Ausgabe
Enumeration
Ausgabe
Spaß haben !
<subnet>::
zu<subnet>:ffff:ffff:ffff:ffff
. Es gibt keine Reservierung für das Subnetz (<subnet>::
) und IPv6 hat nicht das Konzept der Sendung, also keine broadcast-Adresse vorhanden ist, an<subnet>:ffff:ffff:ffff:ffff
.Ich weiß, dieser post ist 5yr alt, aber angesichts der Google-Funktionen kann es ebenso aktualisiert wurden diesem morgen. So, ich werde fügen Sie ein wenig Klärung aus dem Netz engineering-Perspektive.
Es hängt davon ab, welche Art von Adressen. Wenn du meinst jeder Adresse des Bereichs, dann ist die obige Diskussion richtig ist. Wenn du meinst-Adressen können eindeutig zugeordnet werden, um einen Knoten in das Subnetz ("unicast" - Adressen), werden Sie sich bewusst, dass in IPv6 - (a) es gibt keine Sendung, und (b) es gibt eine umfangreiche multicast-Bereich.
Grundsätzlich: [Subnetz]:ff:: ist reserviert für multicast. Wenn Sie nicht mit dem ein /64 Subnetz-Maske, die Sie WIRKLICH wollen, vorsichtig zu sein, denn es geht gegen eine grundlegende Annahme ist, viele IPv6-bezogene RFCs. Es gibt auch noch andere RFCs hin, dass Vorsicht gegen die Verwendung des all-Nullen-host-Adresse ein (aber ich bin mir nicht bewusst eine bestimmte Anforderung zu diesem Effekt).
Also ein /64 Subnetz, das bedeutet, dass die Auswahl von unicast-Adressen ::0:0:0:1 bis ::feff:ffff:ffff:ffff.
Sehen hier zur Diskussion:
http://www.tcpipguide.com/free/t_IPv6MulticastandAnycastAddressing.htm
weylin