Scapy,发送,接收和响应

时间:2014-06-25 17:58:43

标签: python sockets scapy

我目前正在开发一个项目,我需要将数据包发送到特定的网络硬件,接收响应,并根据响应实时生成数据包。

我遇到了Scapy,根据我的理解,它能够完成前两个部分:发送和接收。是否可以通过Python在响应中检索必要的字段并回复?

谢谢!

1 个答案:

答案 0 :(得分:2)

如果我理解你的意思,你有(至少)Scapy的两个选择:

干净的是创建一个符合您需求的AnsweringMachine(您在Scapy的代码中有几个例子)。

脏(但可能更快,如果这是你需要的),一个是将prn参数提供给sniff()一个函数,它将接收数据包,制作答案(或任何你喜欢的)和send()它在网络上。

例如,此代码将RST-ACK数据包发送到使用SYN标志的任何TCP数据包:

def rst(p):
    ans = IP(src=p[IP].dst, dst=p[IP].src)/TCP(
        flags='RA',
        sport=p[TCP].dport,
        dport=p[TCP].sport,
        seq = 0,
        ack = p[TCP].seq + 1,
    )
    send(ans, verbose=False)
    return "%s\n => %s" % (p[IP].summary(), ans.summary())

sniff(iface="eth0", filter="tcp and tcp[tcpflags] & tcp-syn == tcp-syn",
      prn=rst)