什么是str()代表这里?

时间:2014-02-12 19:16:16

标签: python security networking

我是初学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
*

显然我在这里遗漏了一些东西,但我不知道如何找到它。有人可以向我解释一下吗?

1 个答案:

答案 0 :(得分:5)

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字符,您看到的是*孤独的字符。

因此,当您 print 该值时,Python会尝试将确切的字节写入您的控制台,但只有其中一个实际上对您的控制台有意义,从而产生一个可见的字符