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



我附加到 tcp 数据包,值为 4 的未唱长长和值为 8616616 的额外无符号长长(我不记得第二个值)。我在 ubuntu 32 上用 c 做,所以无符号长长是 8 个字节。

我用scapy嗅了嗅包装并打印了填充物。在输出中,我看到的符号我没有解开它们的含义 - g, |另外,负载应该是 16字节 ,但我看不到16字节。

如果我只附加一个无符号的长长,我会得到 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
'x04x00x00x00x00x00x00x00gxc4|x00x00x00x00x00'

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

raw中每个字节的实际值为:

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

长度为 16 个字节。

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

>>> 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
'x04x00x00x00x00x00x00x00gxc4|x00x00x00x00x00'
>>> len(as_characters)
16

我认为你所拥有的raw已经转义了每个字节。在我的示例中,当我输出as_characters时,我只看到一个反斜杠,你有两个。您可能需要使用 pkt[1].sprintf('%Padding.loadr%') 之类的东西来获取非转义版本。

最新更新