我在使用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数据包?
答案 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)