Python 使用Scapy动态修改数据包?

Python 使用Scapy动态修改数据包?,python,scapy,packet-sniffers,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(pac

有可能这样做吗

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)

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

您可以根据嗅探到的数据包发送另一个数据包,但不能使用Scapy“丢弃数据包”

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

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

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