printf-Befehl gesucht

29/01/2015 - 18:29 von Paul Muster | Report spam
Hallo,

ich hàtt' da gern' mal ein Problem. Mit

printf "2002:%02x%02x:%02x%02x::1" `echo 111.222.33.44 | tr "." " "`

baut man eine IPv4-Adresse in eine IPv6-Adresse für einen _6to4_-Tunnel
um. Dazu werden die vier Oktette der IPv4 in Hex-Format umgesetzt und an
den richtigen Stellen in den String eingefügt:

2002:6fde:212c::1

Nun brauche ich allerdings die Umsetzung in eine IPv6-Adresse für einen
_6rd_-Tunnel, die sieht in diesem meinen Fall so aus:

2a00:012A:BCDE:FGH0::1

wobei A-H die Oktette der IPv4 darstellen.

Beispiel:

Für die IPv4-Adresse 111.222.33.44 soll

2a00:0126:fde2:12c0::1

herauskommen.

Wie muss denn der entsprechende printf-Befehl lauten? Ich habe auch nach
intensiver Lektüre der man-Page und von Beispielen im Netz leider nichts
brauchbares hinbekommen...


Viele Dank & viele Grüße

Paul
 

Lesen sie die antworten

#1 Stefan Reuther
29/01/2015 - 19:26 | Warnen spam
Paul Muster wrote:
ich hàtt' da gern' mal ein Problem. Mit



Probleme gibt's z.B. hier: https://projecteuler.net/

Nun brauche ich allerdings die Umsetzung in eine IPv6-Adresse für einen
_6rd_-Tunnel, die sieht in diesem meinen Fall so aus:

2a00:012A:BCDE:FGH0::1

wobei A-H die Oktette der IPv4 darstellen.



Da musst du halt ein wenig Rechnen, printf alleine reicht nicht.

Für die IPv4-Adresse 111.222.33.44 soll

2a00:0126:fde2:12c0::1

herauskommen.



Beispielsweise so:
$ set `echo 111.222.33.44 | tr '.' ' '`
$ printf "2a00:012%X:%X:%X::1" $(($1>>4)) $(((($1<<12)|($2<<4)|($3>>4))&65535)) $(((($3<<12)|($4<<4))&65535))
2a00:0126:FDE2:12C0::1


Stefan

Ähnliche fragen