我一直在尝试创建一个ACKSYN数据包,使其看起来像端口是打开的但它不起作用,这是我到目前为止的代码
ip = IP(src = machine_self_ip,dst = pkt [IP] .src,proto ='tcp')
SYN = TCP(sport = pkt.payload.dport,dport = pkt.payload.sport,seq = 1,ack = 1,urgptr = 0,flags =“SA”)
然后我发送数据包但端口仍然显示已关闭。我错过了什么吗?
谢谢!
答案 0 :(得分:2)
这样做的好方法是实现AnsweringMachine
类。
快速而肮脏(但有效)的方法是将sniff
与特殊的prn
函数一起使用:
def answer(p):
p = p[IP]
send(IP(dst=p.src, src=p.dst)/TCP(dport=p.sport, sport=p.dport,
ack=p.seq + 1, flags='SA'))
sniff(filter='tcp and tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn',
prn=answer, store=False)
您可能希望添加防火墙规则,以防止主机的IP堆栈在Scapy有机会发送SYN-ACK之前发送RST-ACK数据包。您可能还希望调整过滤器以仅回答发往主机(或特定主机/网络)的数据包。