2017-09-20 3 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

오, 내 말은 두 컴퓨터에서 같은 클래스와 코드를 사용하지만, 보내는 컴퓨터의 코드이며, 다른 컴퓨터에서는 코드 기능을 보내고 정지하는 대신 스 니프 기능이 있습니다. 나는 또한 너무 ip를 바꾼다 – Omer

+0

그래서, 어떻게 길을 잃었다는 것을 알 수 있니? – doctorlove

답변

0

귀하의 코드는 당신이 dport=4789UDPVxlan를 바인더 제본 때문에, 사소한 변화에 잘 작동, 당신은 UDP(dport=4789)를 사용하도록하여 패킷을 구성해야합니다. 그래서 실제로 할 수 있습니다 :

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

이제는 작동해야합니다! 또한 from this post을 기억하고 패킷의 대상도 레이어를 인식하고 있어야합니다.

관련 문제