4

当你在 scapy 中串一个数据包时,你得到的下面的编码是什么?这当然不是十六进制的。

str(IP()) 'E\x00\x00\x14\x00\x01\x00\x00@\x00|\xe7\x7f\x00\x00\x01\x7f\x00\x00\x01'</p>

4

1 回答 1

4

\x 是十六进制表示法。在这种情况下,当您使用 str(IP()) 时,您正在尝试将数据包数据转换为不完全有效的字符串,因为并非每个原始十六进制数据都可以在 ASCII 表中找到以用字母替换它,因此任何可以'不被转换会以这种格式\x14 看到。

我认为以下示例将有所帮助:

  • 使用 scapy 方法查看数据包摘要
  • 将数据包数据编码为十六进制格式以使用 python 方法查看

    Welcome to Scapy (2.1.1-dev)
    >>> pkt=IP()
    >>> pkt.summary()
    '127.0.0.1 > 127.0.0.1 ip'
    >>> data=str(pkt)
    >>> data.encode('hex')
    '450000140001000040007ce77f0000017f000001'
    >>>
    

考虑以下几点:

  • 在 SCAPY 中,如果您在未确定源和目标的情况下创建 IP 层,则环回地址将设置为两者的默认值,如示例“127.0.0.1 > 127.0.0.1 ip”所示
  • .summary() 是一个 Scapy 方法
  • str(), .encode 是 python 方法
于 2011-10-30T17:12:23.820 回答