繁体   English   中英

使用Scapy和Python的网桥

[英]Network bridge using Scapy and Python

我正在创建一个网桥,连接同一台机器上的两个以太网卡。 其中一个卡连接到LAN,另一个连接到网络设备。 它看起来像这样,

在此输入图像描述

我在两个接口上嗅探数据包,然后使用sendp(x,iface='eth0')将数据包发送到另一个,我在eth1上嗅探了数据包,反之亦然。

我验证了两个接口上的数据包并发现它们是正确的,但不知怎的,我无法获得该设备的IP。 下面是我的一段代码,我创建了两个线程,每个接口一个:

from scapy.all import*

**THREAD1:**
pkt=sniff(iface="eth0",store=1,count=1)
outbuff=[]
outbuff+=pkt[:]
for src in outbuff[:]
srcmac=src.sprintf(r"%Ether.src%")
if srcmac==deviceMAC:
    pass
else:
    sendp(self.outbuff[:],iface="eth1",verbose=0)

**THREAD2:**
pkt=sniff(iface="eth1",store=1,count=1)
outbuff=[]
outbuff+=pkt[:]
for src in outbuff[:]
srcmac=src.sprintf(r"%Ether.src%")
if srcmac==deviceMAC:
    sendp(self.outbuff[:],iface="eth1",verbose=0)
else:
    pass

有人可以帮我解决这个问题,或者建议我为这个实现提供替代解决方案吗?

已解决:结合Python + IPTABLES并使用TRIGGER的原理解决了这个问题。

发布桥接类的片段

from threading import Thread
import threading
import socket
import thread   


class iface0(threading.Thread):
    def __init__(self, MAC):
        Thread.__init__(self)
        pass

    def run(self):
        self.a = socket.gethostbyname_ex(socket.gethostname())[2]

        while 1:
            self.sSock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
            self.sSock.bind((self.a[1],23432))
            self.iface0_sniff()
            self.sSock.close()


    def iface0_sniff(self):        
        self.sSock.sendto("THISISATESTWORLD",(self.a[1],78456))
        data = ''             


class iface1(threading.Thread):
    def __init__(self,MAC):
        Thread.__init__(self)
        pass

    def run(self):
        self.a=socket.gethostbyname_ex(socket.gethostname())[2]

        while 1:
            self.sSock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
            self.iface1_sniff()
            self.sSock.close()            

    def iface1_sniff(self):

        self.sSock.sendto("THISISATESTWORLD",(self.a[1],98658))
        data = ''


if __name__ == '__main__':
    MAC = ['XX:XX:XX:XX:XX:XX']

    iface0 = iface0(MAC)       
    iface1 = iface1(MAC)

    iface1.start()
    iface0.start()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM