Gibt es einen Code für Bitwise und IPv6-Adresse und Netzwerkmaske (Präfix)?

9

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?

    
iyasar 23.08.2011, 09:01
quelle

5 Antworten

1

Jungs, ich löste mein Problem den Quellcode ist unten verwenden Sie es und gehen Sie auf Codierung: D: Warnung, die Funktion davon ausgehen, dass die IPv6-Adresse gültig ist., Mein Typ ist:

%Vor%     
iyasar 26.08.2011, 06:56
quelle
2

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%     
Steve-o 23.08.2011 13:16
quelle
1

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.

    
Sander Steffann 23.08.2011 09:35
quelle
1

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%     
benofbrown 28.03.2012 08:55
quelle
0

Bedrohe die IP wie ein 16 Bytes Array, überspringe die masked/8 Bytes in der nächsten Byte Maske die höheren masked%8 Bits, setze die anderen auf 0

%Vor%

Habe den Code hier geschrieben, also wurde er nicht getestet, aber ich denke, du könntest so etwas verwenden

    
Djole 23.08.2011 09:54
quelle

Tags und Links