scapy padding.load'g'和'|'的含义是什么符号

时间:2012-11-21 19:31:30

标签: python hex scapy

我追加tcp数据包unsinged long long的值为4,另外的无符号long long值为8616616(我不记得第二个值)。 我在ubuntu 32上用c做,所以unsigned long long是8个字节。

我用scapy嗅探数据包并打印padding.load。 在输出中,我看到的符号,我不会忽略它们的含义 - g,| 另外,加载应该是16个字节,但我看不到16个字节。

如果我只附加一个无符号长long,我会得到8个字节而且我看不到这些符号

>>> pkt = sniff(count=2,filter="tcp")
>>> raw  = pkt[1].sprintf('%Padding.load%')
>>> raw
"'\\x04\\x00\\x00\\x00\\x00\\x00\\x00\\x00g\\xc4|\\x00\\x00\\x00\\x00\\x00'"


>>> print raw
'\x04\x00\x00\x00\x00\x00\x00\x00g\xc4|\x00\x00\x00\x00\x00'

1 个答案:

答案 0 :(得分:1)

当您打印出raw的值时,python会将值大于31的所有字节解释为ASCII字符。当您看到g时,该字节的值等于103,同样|是124的ASCII代码。对于127以上的字符,python使用不同的表示形式,这就是为什么{{1}在输出中,该字节的值为196。

\xc4中每个字节的实际值是:

raw

长度为16个字节。

您可以通过将每个字节的值转换回字符来测试:

[4, 0, 0, 0, 0, 0, 0, 0, 103, 196, 124, 0, 0, 0, 0, 0]

我认为你对>>> values = [4, 0, 0, 0, 0, 0, 0, 0, 103, 196, 124, 0, 0, 0, 0, 0] >>> as_characters = ''.join(chr(c) for c in values) >>> as_characters '\x04\x00\x00\x00\x00\x00\x00\x00g\xc4|\x00\x00\x00\x00\x00' >>> len(as_characters) 16 所拥有的每个字节都被转义了。在我的例子中,当我输出raw时,我只看到一个反斜杠,你有两个。您可能需要使用as_characters之类的内容来获取非转义版本。