# iptv **Repository Path**: cathymht/iptv ## Basic Information - **Project Name**: iptv - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-22 - **Last Updated**: 2026-01-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # IPTV组播源探测系统 一个功能完整的IPTV组播源自动探测系统,支持被动监听和主动探测两种模式,能够自动发现网络中的组播地址,并提供IPTV特定的增强功能。 ## 功能特性 ### 核心功能 - ✅ **被动监听**:实时捕获网络数据包,分析组播流量 - ✅ **主动探测**:无需现有流量,主动发现组播地址 - ✅ **地址识别**:自动识别IPv4/IPv6组播地址 - ✅ **协议解析**:支持UDP、TCP、IGMP、SSDP、RTP、RTSP等协议 - ✅ **数据持久化**:JSON/CSV格式存储组播地址信息 ### IPTV增强功能 - ✅ **流媒体分析**:RTP/RTSP协议解析 - ✅ **格式检测**:视频编码(H.264/H.265/MPEG-2)、音频编码(AAC/MP3/AC3) - ✅ **频道识别**:自动提取频道名称和描述信息 - ✅ **分辨率检测**:自动识别视频分辨率 ### 主动探测能力 - **IGMP JOIN方式**:通过加入组播组来触发路由器转发流量,即使没有其他设备观看也能检测 - 无需触发:不依赖机顶盒换台或现有流量 - 多策略扫描:常见组播地址范围、特定协议探测、智能端口扫描 - 网络变化感知:自动重新扫描 ## 项目结构 ``` multicast-monitor/ ├── main.go # 主程序入口 ├── go.mod # Go模块定义 ├── config/ # 配置模块 │ └── config.go ├── capture/ # 数据包捕获模块 │ └── packet_capture.go ├── analysis/ # 数据包分析模块 │ ├── packet_analyzer.go │ └── iptv_analyzer.go ├── storage/ # 数据存储模块 │ └── address_storage.go ├── probe/ # 主动探测模块 │ └── active_prober.go ├── web/ # Web界面模块 │ └── webui.go ├── utils/ # 工具函数 │ └── network.go └── config.json # 配置文件模板 ``` ## 安装 ### 前置要求 - Go 1.19 或更高版本 - 管理员/root权限(用于数据包捕获) - **CGO版本**:需要 libpcap(Linux/macOS)或 WinPcap/Npcap(Windows) - **纯Go版本**:无需任何系统库,支持跨平台编译 ### 编译方式 #### 方式1:纯Go版本(推荐,支持跨平台编译) ```bash # 编译当前平台 make build-pure # 或 CGO_ENABLED=0 go build -tags nocgo -o multicast-monitor-pure # 跨平台编译所有平台 make build-all # 生成的文件在 dist/ 目录 ``` **优势**: - ✅ 无需安装 libpcap - ✅ 可在任何平台编译任何目标平台 - ✅ 完全静态链接,部署简单 - ✅ 支持 Linux、macOS、Windows 全平台 #### 方式2:CGO版本(需要系统库) ```bash # 编译当前平台(需要libpcap) make build # 或 go build -o multicast-monitor ``` **注意**:CGO版本需要: - Linux: `sudo apt-get install libpcap-dev` (Ubuntu/Debian) - macOS: `brew install libpcap` - Windows: 安装 WinPcap 或 Npcap ### 安装依赖 ```bash go mod download ``` ### 编译 ```bash go build -o multicast-monitor ``` ## 使用方法 ### 基本运行 ```bash # 需要管理员权限 sudo ./multicast-monitor # 指定运行模式 sudo ./multicast-monitor --mode=active # 只主动探测 sudo ./multicast-monitor --mode=passive # 只被动监听 sudo ./multicast-monitor --mode=both # 两者都启用(默认) # 指定配置文件 sudo ./multicast-monitor -c /path/to/config.json ``` ### 配置文件 程序会自动创建默认配置文件 `config.json`,你也可以手动创建并自定义配置。主要配置项包括: - `interface`: 网络接口名称(如 "eth0", "en0") - `filter`: BPF过滤器表达式 - `enable_active_probe`: 是否启用主动探测 - `enable_passive`: 是否启用被动监听 - `enable_web_ui`: 是否启用Web界面 - `web_port`: Web界面端口(默认8080) - `storage_file`: 数据存储文件路径 - `scan_port_ranges`: 端口扫描范围 - `common_multicast_ips`: 常见组播地址列表 完整配置示例请参考项目根目录下的 `config.json` 文件。 ### Web界面 如果启用了Web界面(`enable_web_ui: true`),可以通过浏览器访问: ``` http://localhost:8080 ``` Web界面功能: - 实时查看发现的组播地址 - 查看统计信息 - 手动触发扫描 - 导出数据为CSV格式 - 显示IPTV信息(频道名、编码格式等) ### 数据文件 程序运行后会生成以下文件: - `multicast_addresses.json` - JSON格式的完整数据(包含IPTV信息) - `multicast_addresses.json.csv` - CSV格式的导出数据 - `multicast_monitor.log` - 运行日志 ## 技术实现 ### 被动监听 - **CGO版本**:使用 `gopacket/pcap` 捕获网卡上的组播流量(需要 libpcap / Npcap) - 支持BPF过滤器,可精确过滤组播流量 - 可更完整地观察“网卡上实际经过”的组播数据包 - **纯Go版本(nocgo)**:使用标准库 `net.ListenMulticastUDP` 加入组播并监听数据(无需CGO) - 不依赖 libpcap,天然支持跨平台交叉编译 - 监听范围以“加入并监听的组播地址/端口”为主(更贴近业务侧的组播接收) ### 主动探测 - **IGMP JOIN机制**:使用 `net.ListenMulticastUDP` 加入组播组,自动发送IGMP JOIN请求 - **触发流量转发**:即使没有其他设备观看,也能触发路由器转发组播流量(如果支持IGMP Snooping) - 多策略扫描:常见地址、协议特定、端口范围 - 支持SSDP、IGMP、mDNS、RTSP等协议探测 - 并发控制,避免网络拥塞 - 网络接口变化自动感知 ### IPTV分析 - RTP包解析:识别RTP头,提取payload type - SDP解析:从RTSP响应中提取媒体信息 - 视频/音频编码检测 - 分辨率识别 - 频道名称提取 ## 常见问题 ### 1. 权限问题 数据包捕获需要管理员权限,请使用 `sudo` 运行程序。 ### 2. 网络接口名称 不同操作系统的网络接口命名不同: - Linux: `eth0`, `wlan0` 等 - macOS: `en0`, `en1` 等 - Windows: 需要安装WinPcap/Npcap ### 3. 找不到组播地址 - 确保网络中有组播流量 - 检查网络接口配置是否正确 - 尝试启用主动探测模式 - 检查防火墙设置 ### 4. Web界面无法访问 - 检查 `enable_web_ui` 配置是否为 `true` - 检查端口是否被占用 - 检查防火墙规则 ## 开发 ### 构建 ```bash # 下载依赖 go mod download # 编译 go build -o multicast-monitor # 运行测试(如果有) go test ./... ``` ### 代码结构 - `config/` - 配置管理 - `capture/` - 数据包捕获 - `analysis/` - 数据包分析和IPTV分析 - `storage/` - 数据存储 - `probe/` - 主动探测 - `web/` - Web界面 - `utils/` - 工具函数 ## 贡献 欢迎提交Issue和Pull Request! ## 许可证 MIT License ## 完成总结(近期更新) ### 已完成 - **纯Go被动监听(nocgo)**:新增纯Go实现的被动监听链路(监听组播 -> 解析 -> 入库),无需 libpcap / Npcap / WinPcap。 - **跨平台编译(nocgo)**:支持在任意平台直接交叉编译 Linux/macOS/Windows 的可执行文件(不再被 CGO 工具链限制)。 - **保留CGO版本**:仍可在目标系统安装 libpcap/Npcap 后使用原 `gopacket/pcap` 方式做更“贴近网卡”的抓包。 ### 如何使用 - **编译纯Go版本(推荐)**: - `make build-pure` - 或 `CGO_ENABLED=0 go build -tags nocgo -o multicast-monitor-pure` - **跨平台编译纯Go版本(推荐)**: - `make build-all`(产物在 `dist/`) - **编译CGO版本**: - `make build` 或 `go build -o multicast-monitor`(需要系统安装 libpcap/Npcap) ### 代码结构(新增/变更) - `capture/packet_capture.go`:CGO版本(`// +build cgo`,依赖 `gopacket/pcap`) - `capture/packet_capture_pure.go`:纯Go版本(`// +build !cgo`,使用 `net.ListenMulticastUDP`) - `analysis/packet_analyzer.go`:CGO版本(`// +build cgo`) - `analysis/packet_analyzer_pure.go`:纯Go版本(`// +build !cgo`) - `analysis/iptv_analyzer.go`:CGO版本(`// +build cgo`) - `analysis/iptv_analyzer_pure.go`:纯Go版本(`// +build !cgo`) ### 注意事项(纯Go版本) - 纯Go被动监听不是“抓取网卡上所有经过的包”,而是“加入/监听指定组播地址与端口后收到的数据”,更适合 IPTV 业务侧验证与发现。 - 如需“全量旁路抓包 + BPF 精准过滤”,请使用 CGO 版本。