我是一名初学者 Python 程序员,总体上我非常喜欢安全性。但是,我正在学习,今天我偶然发现了一个 Python script这很容易允许使用 NTP 服务器使用 NTP“漏洞”提供的放大来执行 DoS 攻击。
如果您查看脚本第 18 行,您将看到:
data=str("\x17\x00\x03\x2a") + str("\x00")*4
但是,如果我转到 Python 控制台并尝试打印它,返回的内容毫无意义:
>>> str("\x17\x00\x03\x2a") + str("\x00")*4
*
显然我在这里遗漏了一些东西,但我不知道如何找到它。谁能给我解释一下?
最佳答案
str()
调用是完全多余的。
以下产生相同的值:
data = "\x17\x00\x03\x2a" + "\x00" * 4
这是 4 个字节,十六进制值 17、00、03 和 2a,后跟 4 个 00 字节。
\xhh
是一个 Python 转义序列,用于通过十六进制代码点定义字节; \x61
是小写的 'a'
,因为这是该 ASCII 字符的十六进制代码:
>>> '\x61'
'a'
Python 提示将字符串作为 'a'
回显给我,因为它是可打印的。不可打印的字符仍使用其转义码显示。
该字符串不包含(很多)可打印数据,这些字节大多在 ASCII 可打印范围之外:
>>> data = "\x17\x00\x03\x2a" + "\x00" * 4
>>> data
'\x17\x00\x03*\x00\x00\x00\x00'
只有 \x2a
字节是可打印的 ASCII 字符,您看到的那个孤独的 *
。
因此,当您打印
该值时,Python 会尝试将确切的字节写入您的控制台,但其中只有一个对您的控制台有意义,从而导致一个可见的字符。
关于python - str() 在这里代表什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21737487/