Scapy,发送、接收与响应

1 投票
1 回答
3969 浏览
提问于 2025-04-18 11:04

我现在在做一个项目,需要向特定的网络设备发送数据包,接收它们的回复,并根据这些回复实时生成新的数据包。

我发现了Scapy,听说它可以做到前两步:发送和接收数据包。请问通过Python能否提取回复中的必要信息,并进行回应呢?

谢谢!

1 个回答

4

如果我理解你的意思,你在使用Scapy时至少有两个选择:

第一个是比较干净的做法,就是创建一个AnsweringMachine,根据你的需求来定制(在Scapy的代码中有很多示例可以参考)。

第二个做法虽然有点“脏”,但如果你需要快速解决问题,这可能更合适。你可以把一个函数作为prn参数传给sniff(),这个函数会接收数据包,然后制作一个回应(或者你想做的任何事情),最后通过send()把它发送到网络上。

举个例子,下面的代码会对任何带有SYN标志的TCP数据包发送RST-ACK数据包:

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)

撰写回答