Encoding 串接时的scapy编码

Encoding 串接时的scapy编码,encoding,packet,scapy,Encoding,Packet,Scapy,当您在scapy中字符串化一个数据包时,下面的编码是什么?这当然不是妖术 str(IP())'E\x00\x00\x14\x00\x01\x00\x00@\x00 |\xe7\x7f\x00\x00\x01\x7f\x00\x00\x01' \x是十六进制表示法。在这种情况下,当您使用str(IP())时,您试图将数据包数据转换为字符串,但该字符串并不完全有效,因为在ASCII表中并不是所有原始十六进制数据都可以用字母替换,因此任何无法转换的十六进制都将以这种格式显示\x14 我认为下面的例子会

当您在scapy中字符串化一个数据包时,下面的编码是什么?这当然不是妖术

str(IP())'E\x00\x00\x14\x00\x01\x00\x00@\x00 |\xe7\x7f\x00\x00\x01\x7f\x00\x00\x01'


\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方法