


























1. 引言
在计算机网络中,虚拟网卡是一种纯软件实现的网络接口,它没有物理硬件,却能够像真实的网卡一样参与网络通信。最常见的虚拟网卡类型是 TUN/TAP 设备:TUN 工作于 IP 层(三层),处理 IP 数据包;TAP 工作于以太网层(二层),处理以太帧。它们被广泛应用于 VPN、虚拟机网络、容器网络以及各种网络功能虚拟化场景。Android 作为一个深度定制的 Linux 系统,同样支持 TUN 设备。开发者可以利用它创建隔离的网络环境、实现本地环回测试,甚至构建 VPN 应用。本文将以 Android 平台为例,通过一系列实践操作,带你掌握虚拟网卡的创建、配置、测试以及在流媒体传输中的有趣应用。
2. TUN 设备在 Android 中的存在
Android系统中,TUN 设备节点通常位于 /dev/net/tun。早期的 Android 版本可能默认没有该节点,因此需要在 init 阶段手动创建。现代 Android 系统中,很多厂商的 init.rc 脚本已经包含了如下创建逻辑:
on early-init mkdir /dev/net 0755 root root mknod /dev/net/tun c 10 200 0660 root root
以上命令创建了一个字符设备,主设备号为 10,次设备号为 200,权限为 0660,属主为 root。有了这个设备节点,用户空间程序(如 VPN 应用)就可以通过它来收发 IP 数据包。
3. 创建虚拟网卡
若希望在系统启动时自动创建并配置好虚拟网卡,可以在 init.rc 中添加如下脚本段(通常放在 on boot 或自定义触发条件中):
# 创建 tun 接口,命名为 virtual0 ip tuntap add dev virtual0 mode tun # 设置 IP 地址和掩码 ip addr add 192.168.43.1/24 dev virtual0 # 启用网卡 ip link set virtual0 up # 设置 MTU(设置最大传输单元为 1500 字节) ip link set virtual0 mtu 1500 # 添加路由,确保发往该子网的数据包走 virtual0 接口(可选,便于测试) ip route add 192.168.43.0/24 dev virtual0 # 调整设备权限,使 system 用户可读写(根据实际需求) chmod 0666 /dev/tun chown system system /dev/tun
执行上述命令(需 root 权限)后,用 ip addr show virtual0 查看接口状态,应能看到类似输出:
10: virtual0: <NO-CARRIER,POINTOPOINT,MULTICAST,NOARP,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 500
link/none
inet 192.168.43.1/24 scope global virtual0
valid_lft forever preferred_lft forever
至此,一个功能完备的虚拟网卡已经创建。
4. 基础网络测试:用 netcat 验证连通性
为了确认 virtual0 确实能工作,我们可以在设备本地进行环回测试。由于 virtual0 是一个独立接口,它不依赖物理网络,因此数据包会在内核中直接路由回环。
开启一个服务端监听: 在 adb shell 中执行
该命令会在所有接口(包括 virtual0)上监听 TCP 8888 端口。
从另一个终端连接: 打开另一个 adb shell,通过 virtual0 的 IP 连接
此时,两端应该能够互相发送消息。如果一切正常,说明 virtual0 上的 IP 协议栈工作正常。
5. Windows 端的推流与播放的 RTSP 流媒体传输
使用流行的开源流媒体服务器 MediaMTX 和 ffmpeg 来演示。
(1)下载MediaMTX:https://github.com/bluenviron/mediamtx/releases
(2)解压后直接运行 mediamtx.exe,默认会在 8554 端口监听 RTSP 请求。
(3)下载ffmpeg: https://github.com/BtbN/FFmpeg-Builds/releases
(4) 通过ffmpeg进行推流:ffmpeg.exe -re -stream_loop -1 -i D:\Work\MediaFiles\video\test.mp4 -c copy -f rtsp rtsp://127.0.0.1:8554/video
该命令循环推送本地视频文件到本机的 MediaMTX 服务。
(5)防火墙配置(Windows 侧)
当 Android 设备作为客户端拉取 Windows 上的 RTSP 流时,Windows 防火墙可能会拦截传入连接。需要放行 MediaMTX 使用的端口,操作步骤如下:
打开“高级安全 Windows Defender 防火墙”。 新建入站规则: 规则类型:端口 协议:TCP 特定本地端口:8554 操作:允许连接 由于 RTSP 传输音视频时可能使用 RTP/UDP,还需为 UDP 端口放行(MediaMTX 默认使用 8000-8001,具体范围查看 mediamtx.yml 配置文件)。同样创建一条 UDP 入站规则,允许本地端口 8000-8554 的范围。
完成上述设置后,Android 设备便可通过局域网访问 Windows 上的 RTSP 流。
本地局域网内的设备进行拉流播放验证:
使用 VLC 或其他播放器打开 rtsp://127.0.0.1:8554/video,如果能播放,说明 MediaMTX 工作正常。
6. 总结
通过本文的实践,大致了解了如何通过TUN设备驱动在 Android 上成功创建并配置了一个名为 virtual0 的虚拟网卡设备,并通过基础的 netcat 测试。也在Windows PC上通过MediaMTX 和 ffmpeg建立了一个局域网内的rtsp推流服务器。参考以上方案,后续可以尝试在Android上搭建本地rtsp服务器,结合虚拟网卡设备开发对应需求。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。