惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Security Latest
Security Latest
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Stack Overflow Blog
Stack Overflow Blog
WordPress大学
WordPress大学
N
Netflix TechBlog - Medium
GbyAI
GbyAI
云风的 BLOG
云风的 BLOG
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
宝玉的分享
宝玉的分享
博客园 - 【当耐特】
C
Cyber Attacks, Cyber Crime and Cyber Security
雷峰网
雷峰网
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Threat Research - Cisco Blogs
NISL@THU
NISL@THU
Spread Privacy
Spread Privacy
P
Proofpoint News Feed
J
Java Code Geeks
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MyScale Blog
MyScale Blog
T
Tor Project blog
P
Proofpoint News Feed
C
CERT Recently Published Vulnerability Notes
P
Privacy & Cybersecurity Law Blog
MongoDB | Blog
MongoDB | Blog
Simon Willison's Weblog
Simon Willison's Weblog
C
Cybersecurity and Infrastructure Security Agency CISA
L
LINUX DO - 热门话题
小众软件
小众软件
G
GRAHAM CLULEY
P
Privacy International News Feed
AWS News Blog
AWS News Blog
Know Your Adversary
Know Your Adversary
P
Palo Alto Networks Blog
人人都是产品经理
人人都是产品经理
S
Schneier on Security
Scott Helme
Scott Helme
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
B
Blog RSS Feed
T
The Exploit Database - CXSecurity.com
Recent Announcements
Recent Announcements
E
Exploit-DB.com RSS Feed
C
CXSECURITY Database RSS Feed - CXSecurity.com
U
Unit 42
The Register - Security
The Register - Security
S
Securelist
Martin Fowler
Martin Fowler
Project Zero
Project Zero
大猫的无限游戏
大猫的无限游戏
Cisco Talos Blog
Cisco Talos Blog

博客园 - sheldon_blogs

Android设备搭建本地RTSP服务器(基于live555) Android14 RK3588平台内核异常中断占用CPU问题排查 Android平台移植stress-ng工具及使用 Android OTA的两种方式:Non-A/B(recovery)和A/B系统升级 Android设备之间UVC Gadget bulk模式无法正常打开问题 Android的USB网络共享功能 Linux修改Swap分区大小及使用优先级 Android开放配件 (AOA) 协议 Android(S)系统属性服务详解 Android12 双屏异显/异触流程分析 Android Webview 调试总结 RK3588 Android12 编译打包私有ext4格式vendor.img并挂载到新增vendor_private分区 C++提取字符串中的整数 Android UVC Camera H.265帧序错乱问题 RK3588 Android12 一个固件兼容多个板型方案 全志A133 Android10 Display框架实践 Android编译脚本添加kernel编译选项传入宏定义 UAC实例分析-USB音响 Android USB之复合设备(gadget)详解
Android上玩转TUN设备及rtsp传输
sheldon_blogs · 2026-03-02 · via 博客园 - sheldon_blogs

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服务器,结合虚拟网卡设备开发对应需求。