2017-09-20 9 views
0

私は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) 
+0

両方のコンピュータで同じコード、つまり同じ 'dst'ですか? – doctorlove

+0

ああ、私は両方のコンピュータで同じクラスとコードのapperを意味しますが、これは送信側のコンピュータ上のコードです。私もまたipを変える – Omer

+0

それで、どうやってそれが失われたのを知っていますか? – doctorlove

答えて

0

あなたのコードは、あなたがdport=4789UDPVxlanをバインドさ以来、マイナーチェンジで正常に動作し、あなたはそれがUDP(dport=4789)を使用するように、あなたのパケットを構築する必要があります。実際にはあなたができる:

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

今はそれが動作するはずです! from this postも覚えておいてください。パケットのターゲットもレイヤーを認識している必要があります。

関連する問題