用python发送十六进制数据包
如何在数据包中发送十六进制数据?我正试图通过使用十六进制而不是ASCII来复制数据包。我想知道的是,如果我需要发送的十六进制是00AD12,sendto参数将是什么。用于在字节(通常以十六进制方式表示)和数字之间进行转换:用python发送十六进制数据包,python,hex,packet,Python,Hex,Packet,如何在数据包中发送十六进制数据?我正试图通过使用十六进制而不是ASCII来复制数据包。我想知道的是,如果我需要发送的十六进制是00AD12,sendto参数将是什么。用于在字节(通常以十六进制方式表示)和数字之间进行转换: >>> import struct >>> struct.pack('!I', 0xAD12) b'\x00\x00\xad\x12' 如果您有十六进制字符串并希望将其转换为字节,请使用: 所以我会给它分配一个变量,然后使用该变量作为要发
>>> import struct
>>> struct.pack('!I', 0xAD12)
b'\x00\x00\xad\x12'
如果您有十六进制字符串并希望将其转换为字节,请使用:
所以我会给它分配一个变量,然后使用该变量作为要发送的数据?@Michael你可以这样做,但你不必这样做。您可以编写
tmp=struct.pack(…)
sock.send(tmp)
,或者sock.send(struct.pack(…)
,其中sock是一个连接的套接字。我需要转换的字符串抛出了超出范围的错误,是否有修复程序,或者我应该将其放在字符串中,并将\x放在每个字节之前?@Michael如果您有表示字节的十六进制字符串,请使用binascii.unexlify
。用这个更新了答案。将其放入字符串(Python 3中以ab
开头的字节字符串)并以\x
作为每两个十六进制数字的前缀具有相同的结果。数据包类型不应影响我尝试执行的操作,但会影响UDP。实际上,它确实会影响,因为UDP是一种无连接协议,通常使用sendto
而不是send
或类似文件的对象。但是,请注意,将十六进制字符串转换为字节的任务和发送任何字节的任务是不同和独立的。
>>> import binascii
>>> binascii.unhexlify('ad12')
b'\xad\x12'