是否可以这样做?
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)
答案 0 :(得分:2)
没有办法做到这一点,因为Scapy会在不干扰主机IP堆栈的情况下嗅探数据包。
您可以根据嗅探的数据包发送另一个数据包,但是您不能删除数据包"与Scapy一起。
我能想到的唯一解决方案,在Linux下,涉及iptables + libnfqueue及其Python绑定+ Scapy。但很明显,如果你只是想重新路由一个数据包,那么iptables就足够了,而且要好得多。
在任何其他操作系统下,您无论如何都需要使用某种防火墙软件将数据包传递给用户程序(如Linux下的libnfqueue,这里可以执行Scapy魔法)或篡改数据包本身。
也许你可以看看IPS软件(suricata?),因为基于某些标准篡改数据包就是IPS。