2013-10-20 235 views
0

我对Unicode字符串没有经验。我甚至不确定这是否符合标准。解释填充字符串

在任何情况下,我是用nmap的跑:

# nmap -sV -O 192.168.0.8 

反对我的LAN一个盒子。 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') 

我在正确的轨道上?

回答

1

您看到的字符串是服务指纹。它包含收到的Nmap发送的各种探测的响应。如果您认为回复中有识别信息,请致电Nmap项目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 

" 
0

由于前面的'x',这些数字让人想起十六进制值。 我知道十六进制的值实际上是以'0x'开始的,而不仅仅是x,但我认为这值得在前面使用'0x'作为十六进制值。我没有得到的搜索结果整版这似乎包含这三个值(又或许是不可避免的,三个随机值将出现的地方,不过,也许不是):

0x200, 0x20503, 0x20 

对不起,这不是一个这样回答,但我想我会提及它,因为你没有在你的帖子中提到这个问题。我想将其作为评论发布,但由于某种原因,此选项不可用...

+0

我看着进一步,似乎价值只是“\ x20”。在上面的“x20503”中,503是HTTP错误503(服务不可用)。我认为“\ x20”是空间的转义字符。 –