gpt4 book ai didi

python - (python) 使用十六进制文字尝试转换为字符串、整数或任何其他内容

转载 作者:行者123 更新时间:2023-12-01 05:49:01 26 4
gpt4 key购买 nike

我正在做一项作业,其中我们必须在我们创建的 DNS 服务器上模拟 kaminski 攻击。我目前正在尝试生成伪造的 dns 响应数据包有效负载。使用 dnslib 我生成一个数据包,然后 pack() 结果。这给了我一个十六进制文字:

'\xcf\x90\x85\x80\x00\x01\x00\x01\x00\x00\x00\x00\x03abc\x03com\x00\x00\x01\x00\x01\xc0\x0c\x00\x01\x00\x01\x00\x00\x00\x00\x00\x04\x01\x02\x03\x04'

我认为这不是有效负载数据的正确格式。具体来说,我认为我需要放弃所有“\x”,这样我的流将是比照 90 85 80 ...

不幸的是我似乎无法做到这一点。字符串操作工具似乎不适用于文字,并且通常的文字 -> 字符串转换 (literal_eval) 失败并出现错误:

TypeError: compile() expected string without null bytes

我尝试过的其他转换 (int(packet,0)) 失败,因为部分文字是文本(导致奇数长度)。

可能有一个非常简单的解决方案,有帮助吗?

最佳答案

您似乎错过了“\x”在该上下文中的含义。 '\x' 是 python string literals 中可用的转义序列这样\xhh 代表一个十六进制值为 hh 的字符。

尝试将该字符串转储到文件并将其内容输出为十六进制:

yoni@gaga:~ python -c "file('payload','wb').write('\xcf\x90\x85\x80\x00\x01')"
yoni@gaga:~ hexdump payload
0000000 cf 90 85 80 00 01
0000006

我相信这正是您正在寻找的行为,只需继续使用该字符串即可。但是,如果由于某种原因您确实想将其转换为“人类可读”的十六进制字符串,您可以使用:

''.join(['%x' % ord(x) for x in packet])

关于python - (python) 使用十六进制文字尝试转换为字符串、整数或任何其他内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15074854/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com