Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用python发送十六进制数据包_Python_Hex_Packet - Fatal编程技术网

用python发送十六进制数据包

用python发送十六进制数据包,python,hex,packet,Python,Hex,Packet,如何在数据包中发送十六进制数据?我正试图通过使用十六进制而不是ASCII来复制数据包。我想知道的是,如果我需要发送的十六进制是00AD12,sendto参数将是什么。用于在字节(通常以十六进制方式表示)和数字之间进行转换: >>> import struct >>> struct.pack('!I', 0xAD12) b'\x00\x00\xad\x12' 如果您有十六进制字符串并希望将其转换为字节,请使用: 所以我会给它分配一个变量,然后使用该变量作为要发

如何在数据包中发送十六进制数据?我正试图通过使用十六进制而不是ASCII来复制数据包。我想知道的是,如果我需要发送的十六进制是00AD12,sendto参数将是什么。

用于在字节(通常以十六进制方式表示)和数字之间进行转换:

>>> 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中以a
b
开头的字节字符串)并以
\x
作为每两个十六进制数字的前缀具有相同的结果。数据包类型不应影响我尝试执行的操作,但会影响UDP。实际上,它确实会影响,因为UDP是一种无连接协议,通常使用
sendto
而不是
send
或类似文件的对象。但是,请注意,将十六进制字符串转换为字节的任务和发送任何字节的任务是不同和独立的。
>>> import binascii
>>> binascii.unhexlify('ad12')
b'\xad\x12'