使用 python 从网络接口读取和处理数据包

Reading and processing packets from network interface with python

所以我正在尝试在 python 中创建隧道协议。我有 tun 接口设置,通过它路由所有流量。 但是现在我如何获取正在重定向到我程序中的 tun 接口的数据包以加密它们并将它们发送到服务器? 据我所知,它要么是 socket.bind() 要么是 socket.setsockopt() 函数。 这是我的界面设置

这是我现在使用的代码:

import os, sys
from select import select


f = os.open("/dev/tun0", os.O_RDWR)
os.system("ifconfig tun0 add 10.6.0.1 10.6.0.2")
os.system("ip route add 0/1 dev tun0")
try:
    while 1:
        r = select([f],[],[])[0][0]
        if r == f:
            packet = os.read(f, 4000)
            print(str(len(packet)) + " : " + str(packet))


except KeyboardInterrupt:
    print ("Stopped by user.")
    os.system("ip route delete 0/1 dev tun0")

这直接从设备读取。那么有没有办法使用套接字库来单独读取数据包?

谢谢。

OS: macOS 塞拉利昂

我会将 tun 接口置于混杂模式,这样我就可以监听通过的每个数据包。

下面的 SO post:

介绍了如何做的良好开端

Python Sockets: Enabling Promiscuous Mode in Linux

其他选项是对网络接口的低级别访问或使用 Python 编写的虚拟网卡驱动程序。