2011-10-05 178 views
3

如何發送數據包中的十六進制數據?我試圖完全通過使用十六進制而不是ASCII來複制數據包。我正在尋找的是sendto參數,如果我需要發送的十六進制數是00AD12,會是什麼。在python中發送十六進制數據包

+0

數據包類型不應該影響我想要做的,但UDP。 – Michael

+0

實際上,它的確如此,因爲UDP是一種無連接協議,通常使用'sendto'而不是'send'或類似文件的對象。但是,請注意,將十六進制字符串轉換爲字節和發送任何字節的任務是不同且獨立的。 – phihag

回答

9

使用struct以字節(通常以十六進制的方式表達)和數字之間轉換:

>>> import struct 
>>> struct.pack('!I', 0xAD12) 
b'\x00\x00\xad\x12' 

如果你有一個十六進制並希望將其轉換爲字節,使用binascii.unhexlify

>>> import binascii 
>>> binascii.unhexlify('ad12') 
b'\xad\x12' 
+0

所以我會分配一個變量,然後使用該變量作爲要發送的數據? – Michael

+0

@Michael你可以做到這一點,但你不必這樣做。你可以寫'tmp = struct.pack(...)''sock.send(tmp)'或'sock.send(struct.pack(...))',其中sock是一個連接的套接字。 – phihag

+0

我需要轉換的字符串是拋出範圍錯誤,是否有修復或我應該只是把它放在一個字符串中,並在每個字節前放\ x? – Michael