什么是str()代表这里?

Bob*_*Dem 1 python security networking

我是一名初学Python程序员,我非常喜欢安全性.但是,我正在学习,今天我偶然发现了一个Python脚本,它很容易使用NTP服务器通过NTP"漏洞"提供的放大来执行DoS攻击.

如果你看一下第18行的脚本,你会看到:

data=str("\x17\x00\x03\x2a") + str("\x00")*4
Run Code Online (Sandbox Code Playgroud)

但是,如果我去Python控制台并尝试打印它,它返回的内容没有任何意义:

>>> str("\x17\x00\x03\x2a") + str("\x00")*4
*
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 5

这些str()电话完全是多余的.

以下产生相同的值:

data = "\x17\x00\x03\x2a" + "\x00" * 4
Run Code Online (Sandbox Code Playgroud)

这是4个字节,十六进制值为17,0,003和2a,后跟4 00个字节.

\xhh是一个Python转义序列,用于通过十六进制代码点定义字节; \x61是小写'a',因为这是该ASCII字符的十六进制代码:

>>> '\x61'
'a'
Run Code Online (Sandbox Code Playgroud)

Python提示将字符串回传给我,'a'因为它是可打印的.不可打印的字符仍然使用其转义码显示.

该字符串不包含(多)可打印数据,这些字节大多数在ASCII可打印范围之外:

>>> data = "\x17\x00\x03\x2a" + "\x00" * 4
>>> data
'\x17\x00\x03*\x00\x00\x00\x00'
Run Code Online (Sandbox Code Playgroud)

只有\x2a字节是可打印的ASCII字符,*你看到的那个孤独.

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