Registry Schlüssel entschlüsseln

Hi,
wenn ich mit regedit unter winxp meine IP Adresse abspeichere wird sie so angezeigt :
IPAddress"=hex7):31,00,39,00,32,00,2e,00,31,00,36,00,38,00,2e,00,36,00,39,00,\
2e,00,33,00,30,00,00,00,00,00

hier bei lautet die IP Adresse 192.168.69.30

wie kann ich dieses entschlüsseln ?

Gruß Hoppel

Mahlzeit,

IPAddress"=hex7):31,00,39,00,32,00,2e,00,31,00,36,00,38,00,2e,00,36,00,39,00,\
2e,00,33,00,30,00,00,00,00,00
hier bei lautet die IP Adresse 192.168.69.30
wie kann ich dieses entschlüsseln ?

mit einer ASCII-Tabelle, z.B. dieser: http://www.torsten-horn.de/techdocs/ascii.htm

Die einzelnen Zeichen werden im Unicode-Zeichensatz abgespeichert, zwei Byte pro Zeichen, deren hexadezimale Darstellung du siehst. Das zweite Zeichen ist immer 0 (hex 00), also für diesen Fall eh für die Katz :smile:

Gruß

Sancho

Mahlzeit,

'n Abend,

IPAddress"=hex7):31,00,39,00,32,00,2e,00,31,00,36,00,38,00,2e,00,36,00,39,00,\
2e,00,33,00,30,00,00,00,00,00
hier bei lautet die IP Adresse 192.168.69.30
wie kann ich dieses entschlüsseln ?

mit einer ASCII-Tabelle, z.B. dieser:
http://www.torsten-horn.de/techdocs/ascii.htm

Warum zur Hoelle speichert man denn eine IP# in einer strukturierten Datenbank als *Text* im Unicode ab?! Und dann auch noch _mit_ Punkten! Kann das Ding nur Unicode-Elemente? Wenn man jetzt eine fuer’s netzwerkeln sinnvolle Darstellung brauche, parst dann irgendwas diesen Key und erzeugt aus den _15_ gespeicherten Bytes dann die _vier_ relevanten? Oder macht Windows bitweises AND auch im Unicode?

Tendenziell entsetzen
Gruss vom Frank.

Warum zur Hoelle speichert man denn eine IP# in einer
strukturierten Datenbank als *Text* im Unicode ab?! Und dann
auch noch _mit_ Punkten! Kann das Ding nur Unicode-Elemente?
Wenn man jetzt eine fuer’s netzwerkeln sinnvolle Darstellung
brauche, parst dann irgendwas diesen Key und erzeugt aus den
_15_ gespeicherten Bytes dann die _vier_ relevanten? Oder
macht Windows bitweises AND auch im Unicode?

Die IP-Adresse wird in der Registry als erstes Element eines Eintrags aus verketteten zero terminated strings abgespeichert. Mit geeigneten Werkzeugen (regedt32) lässt diese Stringkette sich auch problemlos bearbeiten. Auch regedit zeigt den String als solchen an, erst beim editieren oder wenn man den Wert in eine Textdatei exportiert, wird er in Unicode umcodiert, da regedit mit verketteten Strings nichts anfangen kann.

Was mir etwas unverständlich ist, ist, warum hier überhaupt verkettete Strings (REG_MULTI_SZ) verwendet werden, da für die IP-Adresse ein einfacher String (REG_SZ) gereicht hätte und verschiedene Adressen für verschiedene Interfaces in verschiedenen Zweigen gespeichert werden.

Hoffe, dein Entsetzen gemildert zu haben
Schorsch

Uhu Frank,

IPAddress"=hex7):31,00,39,00,32,00,2e,00,31,00,36,00,38,00,2e,00,36,00,39,00,\
2e,00,33,00,30,00,00,00,00,00
hier bei lautet die IP Adresse 192.168.69.30
wie kann ich dieses entschlüsseln ?

mit einer ASCII-Tabelle, z.B. dieser:
http://www.torsten-horn.de/techdocs/ascii.htm

Warum zur Hoelle speichert man denn eine IP# in einer
strukturierten Datenbank als *Text* im Unicode ab?! Und dann
auch noch _mit_ Punkten! Kann das Ding nur Unicode-Elemente?

Wie wir wissen ist eine IP eigentlich ein 32-Bit Wert.

Jetzt gibt es das Problem, dass sich physikalisch dieser aus 4 Byte bestehende Wert unterschiedlich abspeichern lässt (Stichwort: Little/Big-Endian bei 16-Bit, bei 32-Bit gibt es schon 4 Varianten).

Dass die IP traditionell immer noch in dezimaler Form, Hexadezimal ist ja eine ALternative, hat vor allen historische Gründe, welche in der Welt der Grossrechner begründet liegt (genauso wie Oktal).

Als MS angefangen hat, auch für andere CPUs Programme zu entwickeln, hatte man das Problem, dass man nicht mehr einfach den Speicherinhalt 1:1 irgendwo ablegen konnte (Intel speichert ja Low-Hight-Byte, Motorola Hight-Low-Byte). Also verfielen manche Programmierer darauf Zahlen als Strings zu speichern und das Problem so zu umgehen. Die Umwandlung funktioniert z.B. in C recht einfach:

printf("%d.%d.%d.%d", IP1, IP2, IP3, IP4);
scanf("%d.%d.%d.%d", &IP1, &IP2, &IP3, &IP4);

Der nächste Schritt von MS war dann Unicode zu übernehmen, was Grundsätzlich auch vernünftig ist weil er bei Unterstützung von mehr als nur Englisch seine Vorteile hat.
Wenn man eine C-Bibliothek mit Unicode Unterstützung verwendet, ändert sich an printf()/pcanf() im Source-Code gar nichts, aber es werden halt 2-Byte pro Zeichen abgespeichert.

Du kennst ja sicher noch die Probleme mit ASCII- und DIN-Zeichentabellen, wenns beim AUsdruck von Programmen nur noch von Umlauten anstelle von „[]{}“ wimmelt…

Somit kommt halt das zu Stande was du da oben hingeschrieben hast.

Dass in der Registry ein REG_MULTI_SZ verwendet wurde, weiss ich auch nicht. Vielleicht wollte man IP und Subnetmaske zusammen abspeichern ?

MfG Peter(TOO)

1 „Gefällt mir“