TCP握手scapy代码无法正常工作

时间:2015-09-02 03:52:07

标签: scapy

我在使用Scapy进行TCP握手时遇到问题。我的Scapy代码正在发送SYN数据包。目标正在响应SYN / ACk数据包。我可以在tcpdump中看到SYN / ACK数据包,但它没有在scapy代码中接收。 注意:linux m / c没有发送RST数据包。

这是我的代码段:

@ATMT.condition(IPCP_OPEN)
def send_syn(self):
    time.sleep(10)
    self.src_port = random.randrange(1024,65535)
    print "Sending SYN packet"
    print "Src MAC: "+self.mac+" dest MAC: "+DEST_MAC
    send_pkt = Ether(src=self.mac,   dst=DEST_MAC)/Dot1Q(vlan=self.vlan_out)/Dot1Q(vlan=self.vlan_in)/PPPoE(sessionid=1)/PPP(proto=IP_PROTO)/IP(src="1.0.115.34",dst="10.10.10.10")/TCP(sport=self.src_port, dport=80, flags="S")
    hexdump(send_pkt)
    print "src_port: "+src_port
    sendp(Ether(src=self.mac, dst=DEST_MAC)/Dot1Q(vlan=self.vlan_out)/Dot1Q(vlan=self.vlan_in)/PPPoE(sessionid=self.sess_id)/PPP(proto=IP_PROTO)/IP(src="1.0.115.34",dst="10.10.10.10")/TCP(sport=self.src_port, dport=80, flags="S"), iface=self.iface, verbose=False)
    # hexdump(pkt)
    raise self.WAIT_SYNACK()

来自WAIT_SYNACK

的转换
@ATMT.receive_condition(WAIT_SYNACK)
def receive_synack(self,pkt):
if (TCP in pkt):
   print "Recvd SYN/ACK"
   hexdump(pkt)
   #self.src_port = pkt[TCP].dport
   self.seq_no = pkt[TCP].ack
   self.ack_no = pkt[TCP].seq
   print "processing SYN/ACK"
   raise self.GOT_SYNACK()

我的master_filter如下

def master_filter(self, pkt):
return (PPPoED in pkt or PPPoE in pkt) and  (pkt[Dot1Q:1].vlan==self.vlan_out) and (pkt[Dot1Q:2].vlan==self.vlan_in)

为什么我的scapy代码没有收到SYN / ACK数据包?

1 个答案:

答案 0 :(得分:0)

您错过了TCP,因为您只是在过滤PPPoE*。将过滤器更改为pkt.haslayer(TCP) or (...

def master_filter(self, pkt):
    return (PPPoED in pkt or PPPoE in pkt) and  (pkt[Dot1Q:1].vlan==self.vlan_out) and (pkt[Dot1Q:2].vlan==self.vlan_in)