无法使用scapy作为接口之间的桥梁
Unable to use scapy as a bridge among interfaces
我正在尝试使用 scapy 执行透明的 MITM 攻击。我有一台带有两个网络接口的 Ubuntu 机器,每个接口都连接到一台机器。这些机器具有相同的子网地址,如果直接连接则可以正常运行。 objective 是为了能够完全透明,同时使用没有 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()
这肯定不行...代码正确吗?可能是我的 VM 对于这项任务来说太慢了吗?
这段代码是正确的,应该可以工作。您应该更新到 Scapy 的当前开发版本 (https://github.com/secdev/scapy/),看看这是否与旧错误有关。
作为旁注,您可以直接使用 bridge_and_sniff("enp0s3", "enp0s8")
而不是编写自己的函数。
我正在尝试使用 scapy 执行透明的 MITM 攻击。我有一台带有两个网络接口的 Ubuntu 机器,每个接口都连接到一台机器。这些机器具有相同的子网地址,如果直接连接则可以正常运行。 objective 是为了能够完全透明,同时使用没有 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()
这肯定不行...代码正确吗?可能是我的 VM 对于这项任务来说太慢了吗?
这段代码是正确的,应该可以工作。您应该更新到 Scapy 的当前开发版本 (https://github.com/secdev/scapy/),看看这是否与旧错误有关。
作为旁注,您可以直接使用 bridge_and_sniff("enp0s3", "enp0s8")
而不是编写自己的函数。