https://blog.csdn.net/Michaelwubo/article/details/110478175

虚拟网卡分类

tap与tun

https://www.cnblogs.com/daizichuan/p/18360705
https://blog.csdn.net/skywalk8163/article/details/141331103

  • 判断内核配置文件是否配置TUN功能选项

方法1:

import gzip
import re

def is_tun_tap_enabled():
    try:
        with open('/proc/config.gz', 'rb') as file:
            config = gzip.decompress(file.read())
            pattern = re.compile(r'CONFIG_TUN=y')
            match = pattern.search(config.decode())
            return match is not None
    except FileNotFoundError:
        # 如果/proc/config.gz文件不存在,可能是因为内核不是自定义配置的,
        # 或者是一个较新的Linux发行版,其内核配置可能不存在这个压缩文件。
        # 在这种情况下,可以通过检查模块是否加载来判断。
        try:
            with open('/sys/module/tun/parameters/type') as file:
                return 'tun' in file.read()
        except FileNotFoundError:
            # 如果模块参数也不存在,可能是TUN/TAP设备在当前系统上不受支持或未被内核模块化。
            return False

if is_tun_tap_enabled():
    print("TUN/TAP 已启用")
else:
    print("TUN/TAP 未启用")

方法2:
判断是否存在/dev/net/tun节点

  • 创建tap/tun接口:
    https://www.cnblogs.com/bakari/p/10449664.html
    创建 tap/tun 设备:

    ip tuntap add dev tap0 mod tap # 创建 tap 
    ip tuntap add dev tun0 mod tun # 创建 tun

    删除 tap/tun 设备:

    ip tuntap del dev tap0 mod tap # 删除 tap 
    ip tuntap del dev tun0 mod tun # 删除 tun

0 条评论

发表回复

您的电子邮箱地址不会被公开。