用Scapy动态修改数据包?

时间:2014-06-09 00:30:11

标签: python scapy packet-sniffers

是否可以这样做?

from scapy.all import *

def action(packet):
    print packet[0][1].src + "==>" + packet[0][1].dst
    print "Rerouting to localhost"
    packet[0][1].dst = '127.0.0.1'
    print packet[0][1].src + "==>" + packet[0][1].dst
    sendp(packet)

sniff(filter="dst host 203.105.78.163",prn=action)

这样的东西,但有没有办法将数据包发送到localhost并丢弃发送到203.105.78.163的数据包? (不使用iptables)

1 个答案:

答案 0 :(得分:2)

没有办法做到这一点,因为Scapy会在不干扰主机IP堆栈的情况下嗅探数据包。

您可以根据嗅探的数据包发送另一个数据包,但是您不能删除数据包"与Scapy一起。

我能想到的唯一解决方案,在Linux下,涉及iptables + libnfqueue及其Python绑定+ Scapy。但很明显,如果你只是想重新路由一个数据包,那么iptables就足够了,而且要好得多。

在任何其他操作系统下,您无论如何都需要使用某种防火墙软件将数据包传递给用户程序(如Linux下的libnfqueue,这里可以执行Scapy魔法)或篡改数据包本身。

也许你可以看看IPS软件(suricata?),因为基于某些标准篡改数据包就是IPS。