【问题标题】:Why can't i see the layer on the reciving computer?为什么我在接收计算机上看不到图层?
【发布时间】:2018-03-01 12:41:22
【问题描述】:

我试图在 scapy 中构建一个新层,但是当我将数据包发送到另一台计算机时,新层丢失了。我将下一个代码放在发送计算机和接收计算机上。

import  sys 
i, o, e = sys.stdin, sys.stdout, sys.stderr
from scapy.all import *

sys.stdin, sys.stdout, sys.stderr = i, o, e
from scapy.packet import *
from scapy.fields import *
from scapy.layers.inet import UDP, IP
from scapy.layers.dns import DNS
from scapy.layers.l2 import Ether

vxlanmagic = "0x8"


class Vxlan(Packet):
    name = "Virtual eXtensible Local Area Network"
    fields_desc = [ByteField("flag", 8),
                   X3BytesField("reserved1", 0),
                   X3BytesField("vni", 0),
                   ByteField("reserved2", 0)]

    def guess_payload_class(self, payload):
        if self.flag == vxlanmagic:
            return Vxlan
        else:
            return Packet.guess_payload_class(self, payload)

    def mysummary(self):
        return self.sprintf("VXLAN (vni=%VXLAN.vni%)")

split_layers(UDP, DNS, sport=53)
bind_layers(UDP, Vxlan, dport=4789)
bind_layers(Vxlan, Ether)
packet = IP(dst='192.168.1.28')/Vxlan()
packet.show()
send(packet)

【问题讨论】:

  • 两台计算机上相同的代码,即相同的dst
  • 哦,我的意思是相同的类和代码出现在两台计算机上,但这是发送计算机上的代码,另一台有嗅探功能,而不是发送和处理数据包功能。我也改了ip
  • 那么,你怎么知道它丢了?
  • 当我要求接收计算机打印接收数据包时,它会打印除新层外的数据包
  • 仅供参考,Scapy 现在支持 VXLAN!

标签: python networking scapy network-protocols


【解决方案1】:

您的代码只需稍作更改即可正常工作,因为您将Vxlan 绑定到dport=4789 上的UDP,因此您必须构造您的数据包,使其使用UDP(dport=4789)。所以实际上你可以这样做:

packet = IP(dst='192.168.1.28')/UDP(dport=4789)/Vxlan()

现在它应该可以工作了!还要记住from this post,这也是数据包的目标,必须知道你的层。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 2017-07-15
    相关资源
    最近更新 更多