Seite 1 von 1

IP String in hex

Verfasst: Donnerstag 17. Oktober 2013, 14:57
von cruzer*
Hallo,
ich möchte meine IP String in einen Hex String formatieren. Jedoch bekomme ich nicht das gewünschte Format.

Ich suche das hier:

'192.169.123.123' -> '\xC0\xA9\x7B\x7B'

aber das \x bereitet mir schwierigkeiten. Ich bekomme entweder nur die hex werte oder die hexwerte mit 0x\C0.

auch das hat nicht funktioniert:

Code: Alles auswählen

>>> ip = "192.168.0.1"
>>> ip = ip.split('.')
>>> ip
['192', '168', '0', '1']
>>> ip = '\x' + hex(ip[0]) + '\x' + hex(ip[1]) + '\x' + hex(ip[2]) + '\x' + hex(ip[3])
und hier funktioniert es nur in bei manchen Zahlen:

Code: Alles auswählen

>>> ip = ip.split('.')
>>> ip
['192', '168', '112', '123']
>>> ip = chr(int(ip[0])) + chr(int(ip[1])) + chr(int(ip[2])) + chr(int(ip[3]))
>>> ip
'\xc0\xa8p{'
jemand eine Idee?

Re: IP String in hex

Verfasst: Donnerstag 17. Oktober 2013, 15:10
von /me
Du bekommst durchaus was du willst. Das ist nur eine Frage der Darstellung, die sich im übrigen bei Python 2 und Python 3 auch noch unterscheidet.

Python 2:

Code: Alles auswählen

>>> '\xc0\xa8\x70\x7b'
'\xc0\xa8p{'
Python 3:

Code: Alles auswählen

>>> '\xc0\xa8\x70\x7b'
'ˬp{'
Der Inhalt ist jedes mal identisch.


Eine alternative Variante für die Umwandlung sähe übrigens wie folgt aus.

Code: Alles auswählen

>>> ip = '192.168.112.123'
>>> ''.join(map(chr, map(int, ip.split('.'))))
'\xc0\xa8p{'

Und die eingebaute Methode folgt hier.

Code: Alles auswählen

>>> import socket
>>> ip = '192.168.112.123'
>>> socket.inet_aton(ip)
'\xc0\xa8p{'

Re: IP String in hex

Verfasst: Donnerstag 17. Oktober 2013, 15:13
von cruzer*
/me hat geschrieben: Python 2:

Code: Alles auswählen

>>> '\xc0\xa8\x70\x7b'
'\xc0\xa8p{'
Ich schreibe in python 2.

Ich benötige es um die IP adresse in einen RAW socket einzutragen. erkennt er also auch : '\xc0\xa8p{' als '\xc0\xa8\x70\x7b' ?

Re: IP String in hex

Verfasst: Donnerstag 17. Oktober 2013, 15:20
von /me
cruzer* hat geschrieben:Ich benötige es um die IP adresse in einen RAW socket einzutragen. erkennt er also auch : '\xc0\xa8p{' als '\xc0\xa8\x70\x7b' ?
Wir reden hier von Bytes. Du schickst ja keinen String mit den Zeichen '\', 'x', 'c', '0', ...

Du sendest exakt 4 Bytes und ob ein Byte jetzt in der Anzeige zu 'p' oder zu '\x70' konvertiert wird ist ist völlig egal. Es ist und bleibt ein und das selbe Byte. Bitte unterscheide Inhalt und Darstellung.

Re: IP String in hex

Verfasst: Donnerstag 17. Oktober 2013, 15:38
von cruzer*
Also habe ich schon den richtigen Inhalt und habe mich von der Darstellung verblenden lassen?

Re: IP String in hex

Verfasst: Donnerstag 17. Oktober 2013, 15:44
von /me
cruzer* hat geschrieben:Also habe ich schon den richtigen Inhalt und habe mich von der Darstellung verblenden lassen?
Ja. Das ist allerdings nichts Ungewöhnliches. :D

Zum Umwandeln solltest du aber tatsächlich das in meinem Beispiel oben gezeigte und genau für diese Aufgabe vorgesehene inet_aton statt deiner eigenen Lösung verwenden.

Re: IP String in hex

Verfasst: Donnerstag 17. Oktober 2013, 17:59
von cruzer*
Vielen Dank!