Чтение и обработка пакетов из сетевого интерфейса с помощью 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") 

это напрямую читается с устройства. так есть ли способ использовать библиотеку сокетов для чтения пакета по отдельности?

Благодарю.

ОС: macOS Sierra

Я бы поставил интерфейс tun в режим promiscuous, чтобы я мог слушать каждый пакет, который проходит.

Хорошее начало о том, как это сделать, представлено в следующей публикации:

Python Sockets: включение режима Promiscuous в Linux

Другим вариантом может быть низкоуровневый доступ к сетевому интерфейсу или драйверу виртуальной сетевой карты, написанному на Python.