【问题标题】:Unable to use scapy as a bridge among interfaces无法使用 scapy 作为接口之间的桥梁
【发布时间】:2018-08-25 08:24:13
【问题描述】:

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

我正在使用的实现如下:

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到另一台机器...知道如何使这项工作正常工作吗?

提前致谢。

编辑 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()

这绝对行不通...代码正确吗?可能是我的虚拟机太慢了,无法完成这项任务?

【问题讨论】:

  • 考虑到这个问题,我想网络接口本身会发送对ping请求的响应......不管scapy脚本在做什么......可以禁用这种自动行为吗?跨度>

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


【解决方案1】:

这段代码是正确的,应该可以工作。您应该更新到 Scapy (https://github.com/secdev/scapy/) 的当前开发版本,看看这是否与旧错误有关。

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

【讨论】:

  • 我已经切换到 bridge_and_sniff 并且当我执行我的代码时它什么也不做。它不会卡在 bridge_and_sniff 中,程序刚刚完成......我现在正在使用开发版本。
  • 使用prn=lambda p: p.summary() 回调看看会发生什么。
  • 嗯,它现在没有卡住......但现在问题不同了......我检查了MITM机器和两个端点之间是否有连接,每个端点都来自不同的接口,确实是蚂蚁, 有。但是,当我尝试从一个端点 ping 到另一个端点时,它不起作用。我可以通过 x.summary() 看到正在发送 ARP 请求,但没有显示响应或 ICMP 数据包...
  • 我在一个带有桥接物理接口的 Ubuntu VM 中运行这个脚本...这可能是个问题吗?
  • 所以......主机中混杂模式的政治是问题......我现在面临另一个问题。 bridge_and_sniff 函数突然停止,程序终止……这是预期发生的吗?
猜你喜欢
  • 1970-01-01
  • 2011-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-12
  • 2013-03-24
  • 1970-01-01
相关资源
最近更新 更多