无法使用scapy作为接口之间的桥梁

时间:2018-03-16 10:00:19

标签: python security networking scapy man-in-the-middle

我正试图用scapy进行透明的MITM攻击。我有一台带有两个网络接口的Ubuntu机器,每台接口都连接到一台机器上。这些机器具有相同的子网地址,如果直接连接则可以正常运目标是能够完全透明,使用没有IP地址的接口和promisc模式。

我正在使用的实现如下:

def pkt_callback(pkt):
    if pkt.sniffed_on == "enp0s3":
        sendp(pkt, iface="enp0s8", verbose=0)
    else:
        sendp(pkt, iface="enp0s3", verbose=0)

def enable_bridge():
    sniff(iface=["enp0s3", "enp0s8"], prn=pkt_callback, store=0)

if __name__ == "__main__":
    conf.sniff_promisc=True
    enable_bridge()

这不是所有的代码,而是主要的路由部分......我可以看到数据包到达两个接口,但是没有从一台机器到另一台机器的ping ...任何想法如何使这个工作?< / p>

提前致谢。

编辑1:

这里全面实施:

from scapy.all import *
from utils import interfaces, addresses
#from routing import *
from packet_filters import is_mms_packet
from attacks import performAttack
import sys
import os
import time
import datetime

def writePacketInDisk(pkt):
    wrpcap("network_logs/network-log- 
    "+datetime.date.today().strftime("%Y")+"-"
        +datetime.date.today().strftime("%B")+"- 
    "+datetime.date.today().strftime("%d")+".pcap", pkt, append=True)

def pkt_callback_PLC_OPC(pkt):
    ret = True
#   if is_mms_packet(pkt):
#       writePacketInDisk(pkt)
    #ret = performAttack(pkt)
    return ret

def pkt_callback_OPC_PLC(pkt):
    ret = True
#   if is_mms_packet(pkt):
#       writePacketInDisk(pkt)
    #ret = performAttack(pkt)
    return ret

def enable_bridge():
    print "hello!!"
    bridge_and_sniff(interfaces["plc-ccb"], interfaces["opc"], 
        xfrm12=pkt_callback_PLC_OPC, xfrm21=pkt_callback_OPC_PLC,
         count=0, store=0)
    #prn = lamba x: x.summary()
    print "bye!!"

if __name__ == "__main__":
    conf.sniff_promisc=True
    enable_bridge()

这绝对不起作用......代码是否正确?这个任务可能是我的VM太慢了吗?

1 个答案:

答案 0 :(得分:1)

此代码是正确的,应该可以使用。您应该更新到Scapy的当前开发版本(https://github.com/secdev/scapy/),看看它是否与旧的bug有关。

作为旁注,您可以直接使用bridge_and_sniff("enp0s3", "enp0s8")而不是编写自己的函数。