Ich möchte über die Berechnung von IPv6-Netzwerk und Host-Seite fragen.
Ich habe zum Beispiel die IPv6-Adresse 2001:470:1f15:1bcd:34::41
und das Präfix 96
.
Kennen Sie einen einfachen Weg, bitweise and
zwischen IPv6-Adresse und Präfix zu machen?
Gemäß IPv4:
%Vor%So einfach.
Ich möchte dasselbe mit der IPv6-Adresse machen. Die IPv6-Adresse ist jedoch 16 Byte, daher können Sie unsigned int
nicht dafür verwenden.
Gibt es eine API dafür? Oder sollte ich Arrays verwenden?
Berechne die Maske aus der Präfixlänge:
%Vor%Wenden Sie die Netzmaske auf die Adresse an, die ich von % abgeleitet habe. co_de% .
%Vor%Sie können die Adresse mit inet_pton in die Netzwerk-Byte-Reihenfolge in binär konvertieren. Setzen / löschen Sie dann die Bits jeweils um ein Byte.
OK, ich habe das in C und nicht in C ++ gemacht, aber es sollte funktionieren. Außerdem verwendet es bswap_64, was AFAIK eine GNU-Erweiterung ist, also kann nicht alles funktionieren.
Bei amd64 scheint es sehr schnell zu sein und schneller als die aktuelle Lösung, die Yasar entwickelt hat:
%Vor%Tags und Links c c++ networking ipv6