#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. Спасибо, я уже понял это