向Scapy添加新协议(类似于ARP)

4
我希望实现一种新的安全ARP协议,该协议能够抵御ARP欺骗攻击。新的“SecureArp”将拥有一个签名字段,可以与约定的hmac函数进行检查。 以下是scapy定义:
  class SecureArp(Packet):
  name = "SecureARP"
  fields_desc = [IPField("srcip", None),
               MACField("srcmac", None),
               IPField("dstip", None),
               MACField("dstmac", "00:00:00:00:00:00"),
               IntEnumField("opcode", 1, { 1: "request", 2: "response" }),
               StrFixedLenField("challenge", "", length=24),
               StrFixedLenField("signature", "", length=20)]

我遇到的问题是,当收到这样的SecureArp消息时,scapy根本不解析它,而是将数据保留为“Raw”。 我阅读了SecDev关于扩展新协议的文档,但是非常不清楚。 我应该采取哪些步骤,使接收到的SecureArp数据包自动解析? 谢谢。
1个回答

4
您需要将图层绑定到另一个图层,以便让Scapy自动解析它。
还请参阅Scapy的ARP实现。
bind_layers( Ether,         ARP,           type=2054)

谢谢回复。问题是我使用了bind_layers来创建一个新类型(比如说1337)。在创建分组时,我使用以太网类型=1337,并在其下方添加新层。当在另一端进行嗅探时,第二层显示为Dot3而不是Ether,因此没有进行自动解析。我已经尝试过使用send()和sendp()发送它,但出于某种原因它总是被解释为Dot3。有什么想法吗? - vito
1
好的,那就是答案了。你需要绑定这些层... 我遇到的问题是我将类型值定义为低于1500,这导致scapy将其转换为Dot3。将值增加到1800后,问题得到解决。谢谢! - vito

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接