解释填充字符串

时间:2013-10-20 20:13:11

标签: python unicode nmap html-escape-characters

我对unicode字符串几乎没有经验。我甚至不确定这符合标准。

无论如何我都在使用nmap并运行:

# nmap -sV -O 192.168.0.8 

对着局域网中的一个盒子。 Nmap在一个开放端口返回的几行上产生了一个字符串,但由于它的格式化,我无法理解很多输出。例如,一个小片段如下所示:

-Port8081-TCP:V=6.00%I=7%D=10/20%Time=52642C3A%P=i686-pc-linux-gnu%r(FourOhFourRequest,37,"HTTP/1\.1\x20503\x20Service\x20Unavailable\r\nContent-Length:\x200\r\n\r\n")%r

我的第一个想法是需要解码的URL编码,但这是不正确的。它看起来几乎像串行通信的填充?任何能够阐明如何解释“\ x200”或“\ x20503”或其他经常显示的是“x \ 20”的人。

我考虑过编写一个小的Python脚本来接受整个字符串并转换为ASCII:

>>> s = '<STRING>'
>>> eval('\x20"'+s.replace('"', r'"')+'"').encode('ascii')

我是在正确的轨道上吗?

2 个答案:

答案 0 :(得分:1)

您看到的字符串是服务指纹。它包含Nmap发送的各种探测器收到的响应。如果您认为答案中有识别信息,请{N}项目submit the fingerprint以便日后改进检测。

更有可能的是,该服务并未发送任何有用信息。例如,您提供的示例没有标识HTTP服务器的Server:标头。

要回答如何转动此字符串的技术问题:

"HTTP/1\.1\x20503\x20Service\x20Unavailable\r\nContent-Length:\x200\r\n\r\n"

进入非转义版本,你可以这样做:

>>> print mystring
"HTTP/1\.1\x20503\x20Service\x20Unavailable\r\nContent-Length:\x200\r\n\r\n"
>>> print mystring.decode('string-escape')
"HTTP/1\.1 503 Service Unavailable
Content-Length: 0

"

答案 1 :(得分:0)

这些数字让人想起由于&#39; x&#39;而导致的十六进制值。在前。 我知道十六进制值实际上以&#39; 0x&#39;而不仅仅是x,但我认为值得使用&#39; 0x&#39;来搜索它们作为十六进制值。在前。我确实得到了一整页搜索结果,似乎包含了这三个值(可能不可避免的是,三个随机值会出现在某个地方,但是再一次,也许不会出现):

0x200, 0x20503, 0x20

很抱歉,这不是一个答案,但我想我会提及它,因为你没有提到在你的帖子中尝试这个。我想将此作为评论发布,但该选项因某种原因无法使用...