Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dlna-sniffer

一个轻量级 Node.js 服务,通过伪装成标准 DLNA 媒体渲染器(智能电视),接收局域网内支持 DLNA 投屏的 App 发送的媒体流地址,并在控制台输出捕获的 URL,可选自动下载媒体文件。

工作原理

┌──────────┐    SSDP 设备发现     ┌──────────────┐
│   手机    │ ──────────────────►  │              │
│   App    │                      │ dlna-sniffer │
│ (支持    │ ◄──────────────────  │  (伪装电视)   │
│  DLNA)   │  "我是一台智能电视"   │              │
│          │                      │              │
│          │   SetAVTransportURI  │              │
│          │ ──────────────────►  │  ┌────────┐  │
│          │   (媒体 URL 在里面)   │  │ 打印   │  │
│          │                      │  │  URL   │  │
│          │ ◄──────────────────  │  └────────┘  │
│          │    "好的,播放中"     │  ┌────────┐  │
│          │                      │  │ 下载   │  │
│          │     心跳/状态查询     │  │(可选)  │  │
│          │ ◄──────────────────► │  └────────┘  │
└──────────┘  "PLAYING"(伪造)     └──────────────┘
  1. SSDP 广播 — 在局域网中广播自身为 DLNA 媒体渲染器(UDP 1900)
  2. 设备描述 — 提供标准 UPnP XML 描述文件,让 App 识别为合法渲染器
  3. URL 拦截 — 捕获 SetAVTransportURI SOAP 指令,提取媒体真实地址
  4. 状态伪造 — 对心跳查询返回 "PLAYING" 状态,保持连接不断开
  5. 自动下载(可选) — 流式下载媒体文件,支持自定义请求头

快速开始

环境要求

  • Node.js >= 18
  • 运行设备与手机处于同一局域网

安装

git clone https://github.com/yourname/dlna-sniffer.git
cd dlna-sniffer
npm install

运行

嗅探模式 — 仅打印捕获的 URL:

node index.js

下载模式 — 打印 URL 并自动下载:

node index.js --download
# 或简写
node index.js -d

运行效果

╔══════════════════════════════════════════╗
║  DLNA 伪装渲染器已启动                   ║
║  设备名称: Living Room TV               ║
║  本机地址: http://192.168.1.100:8080    ║
║  下载模式: 已开启                        ║
╚══════════════════════════════════════════╝

等待投屏连接...

========================================
[捕获] 视频 URL:
https://example.com/video/stream/...
========================================
[捕获] 视频标题: 某个视频标题

[下载] 某视频.mp4 |████████████░░░░░░░░| 60% | 12.3MB/20.5MB | 速度: 2.1MB/s
[下载] 完成: 某视频.mp4 (20.5MB)

项目结构

dlna-sniffer/
├── index.js              # 主入口,Express HTTP 服务器
├── package.json
└── src/
    ├── utils.js           # 本机 IP 检测、设备配置
    ├── ssdp.js            # SSDP 发现与广播
    ├── description.js     # UPnP 设备/服务 XML 描述
    ├── control.js         # SOAP 指令拦截与状态伪造
    └── downloader.js      # 流式下载与进度条显示

注意事项

  • 端口 1900:确保 UDP 1900 未被其他 DLNA 服务占用(如 Windows Media Player)。Windows 下可能需要停止 SSDP Discovery 服务。
  • 防火墙:需放行 UDP 1900 和 TCP 8080 入站规则。
  • 同一网段:手机和本服务必须在同一子网下。Docker 部署需使用 --network host 模式。
  • 免责声明:本项目仅供学习和研究 DLNA 协议使用,请勿用于任何侵犯版权的用途。使用者需自行承担法律责任。

License

MIT

About

轻量级 DLNA 媒体渲染器嗅探工具,伪装为智能电视接收投屏,捕获媒体 URL 并可选自动下载

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages