我正在尝试使用scapy在LAN上进行中间人攻击,从而在一侧欺骗我的网关的MAC地址,而在另一端欺骗我的智能手机的MAC地址。这部分进行得很好。但是,我也想即时修改数据包。因此,我正在使用python的iptables
和netfilterqueue
模块。短暂工作后,即使流量仍在被欺骗,修改脚本也不会打印任何数据包:
以下是为PREROUTING
流量添加的iptables规则:
iptables -t nat -A PREROUTING -s 192.168.1.10/32 -j NFQUEUE --queue-num 1
这是用于队列1上的bind
的脚本:
#!/usr/bin/env python
from scapy.all import *
from netfilterqueue import NetfilterQueue
def modify(packet):
print(packet.get_payload())
pkt = IP(packet.get_payload())
print('source:'+pkt.src+'destination:'+pkt.dst)
# packet.set_payload(str(pkt))
packet.accept()
if __name__ == '__main__':
try:
nfqueue = NetfilterQueue()
nfqueue.bind(1, modify)
nfqueue.run()
except KeyboardInterrupt:
nfqueue.unbind()
症状:即使中间人进行得很顺利,并且nfqueue脚本在短时间内打印数据包,几秒钟后似乎没有任何内容进入netfilter队列,并且修改脚本也不再打印任何内容
如果我在iptables
规则中设置了整个子网的源IP地址,则可以在脚本中打印广播和多播数据包。但是,不是来自智能手机的流量。
我知道我可以使用ettercap
来执行这样的任务,但是我想自己创建它,以确保我理解思路清晰(显然,目前情况并非如此)。
非常感谢您的帮助!