Создание TUN-устройства на виртуальной машине Ubuntu, похоже, не работает

#python #python-3.x #linux-kernel #ioctl #tun

#python #python-3.x #linux-ядро #ioctl #tun

Вопрос:

Я написал скрипт, который создаст и напечатает имя нового интерфейса TUN на виртуальной машине Ubuntu с использованием python.

 import fcntl
import struct
import os
import subprocess
#from scapy.all import *

TUNSETIFF = 0x400454ca
IFF_TUN = 0x0001
IFF_TAP = 0x0002
IFF_NO_PI = 0x1000

tun = os.open("/dev/net/tun", os.O_RDWR)
ifr = struct.pack('16sH', b'tun%d', IFF_TUN | IFF_NO_PI)
ifname_bytes = fcntl.ioctl(tun, TUNSETIFF, ifr)
ifname = ifname_bytes.decode('UTF-8')[:16].strip('x00')
print("Interface Name: {}".format(ifname))
proc = subprocess.Popen(['ifconfig'], stdout=subprocess.PIPE, stdin=subprocess.PIPE)
stdout, stdin = proc.communicate()
print(stdout.decode())
 

вывод

         Interface Name: tun0
        enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.204 ......

        lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        ........
 

это создает интерфейс TUN и присваивает ему имя tunX (X — доступное число для нового имени интерфейса)
после запуска этого я обычно получаю ответ tun0.
Затем я распечатываю вывод ‘ifconfig’ (я также пробовал это вручную) и не вижу этого tun0.

Может кто-нибудь объяснить мне, действительно ли я создаю это TUN-устройство, и если да, то что с ним происходит после завершения скрипта, меня также полностью интересует теоретический материал по нему, если у кого-то есть.

Спасибо.

Ответ №1:

Ваш сценарий в порядке… Причина, по которой вы не можете видеть интерфейс tub после завершения работы скрипта, заключается в том, что скрипт не зацикливается…ваш интерфейс turn будет отображаться до тех пор, пока сервер (скрипт) активен, после чего он умирает

Комментарии:

1. Спасибо, я уже понял это