如何使用scapy使端口显示为开放状态?

时间:2014-01-23 00:58:55

标签: python networking scapy

我一直在尝试创建一个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”)

然后我发送数据包但端口仍然显示已关闭。我错过了什么吗?

谢谢!

1 个答案:

答案 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数据包。您可能还希望调整过滤器以仅回答发往主机(或特定主机/网络)的数据包。