openwrt igmp 适配

每弄完一次,过不多久就忘了,这次决心记下来。

openwrt 的igmpproxy 包是干嘛的?原来,组播包并不能穿透路由,也就是我们在wan端播放的组播视频流,lan端是没法收到的,igmpproxy就是用来打通wan端到lan端的数据通道。

首先在编译配置文件开启igmpproxy: 

CONFIG_PACKAGE_igmpproxy=y

然后编译并打包,生成的镜像烧入板子,一般来说这个时候igmpproxy 已经能正常工作了

它的配置文件在/etc/config/igmpproxy文件中,我们只需要改一个地方:

config igmpproxyoption quickleave 1config phyint wanoption network wanoption direction upstreamlist altnet 192.168.1.0/24config phyint lanoption network lanoption direction downstream

把文中的 192.168.1.0/24 换成0.0.0.0/0,这样所有情况都适合。

怎么测试呢?

1. 可以手动执行:

igmpproxy -d -v /etc/config/igmpproxy

这样就进入了调试模式,它可以把所有调试信息打印出来,方便我们排查问题。

2. 可以在wan,lan口用tcpdump 抓包结合协议分析

最后补充两个python 的脚本,方便测试:

发送脚本,放在wan端:

import timeimport structfrom socket import *SENDERIP = '192.168.10.162' #这个地方是本机地址,你的机器是什么就填什么SENDERPORT = 1501 MYPORT = 1234 MYGROUP = '224.1.1.112' MYTTL = 255  def sender():s = socket(AF_INET, SOCK_DGRAM,IPPROTO_UDP)s.bind((SENDERIP,SENDERPORT))ttl_bin = struct.pack('@i', MYTTL)s.setsockopt(IPPROTO_IP, IP_MULTICAST_TTL, ttl_bin) while True:data = 'cisco's.sendto(data + '\0', (MYGROUP, MYPORT))print "send data ok !"time.sleep(10)if __name__ == "__main__":sender()

接收脚本,放在lan端:

import timeimport socketSENDERIP = '0.0.0.0'    #这里填本机地址收不到数据,故改为全地址MYPORT = 1234MYGROUP = '224.1.1.112'def receiver():#create a UDP socketsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)#allow multiple sockets to use the same PORT numbersock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)#Bind to the port that we know will receive multicast datasock.bind((SENDERIP,MYPORT))#tell the kernel that we are a multicast socket#sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 255)#Tell the kernel that we want to add ourselves to a multicast group#The address for the multicast group is the third paramstatus = sock.setsockopt(socket.IPPROTO_IP,socket.IP_ADD_MEMBERSHIP,socket.inet_aton(MYGROUP) + socket.inet_aton(SENDERIP));sock.setblocking(0)#ts = time.time()while 1:try:data, addr = sock.recvfrom(1024)except socket.error, e:passelse:print "Receive data!"print "TIME:" , time.time()print "FROM: ", addrprint "DATA: ", dataif __name__ == "__main__":receiver()

有三条命令可以查看系统igmp状态:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/35580.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024.6.26 刷题总结

2024.6.26 **每日一题** 526.优美的排列,该题考察的是状压dp的知识,用一个n位的二进制数表示排列中的数被选取的情况,若为1,则表示该位被选取,若为0,则表示该位没有被选取,用一个数组来存储当前…

STM32F1+HAL库+FreeTOTS学习1——FreeRTOS入门

STM32F1HAL库FreeTOTS学习1——FreeRTOS入门 裸机开发与操作系统嵌入式操作系统简介FreeRTOS简介FreeRTOS的几个重要概念任务调度器任务状态状态列表 裸机开发与操作系统 在以往的嵌入式学习中,我们最常用的就是裸机开发,所谓裸机开发就是指在没有操作系…

力扣1541. 平衡括号字符串的最少插入次数

Problem: 1541. 平衡括号字符串的最少插入次数 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 Problem: 力扣921. 使括号有效的最少添加 类似于上述题目,不过此时一个左括号要和两个右括号配对 1.同理上述题目,遍历字符串时若遇见一个左括…

揭秘微生物社区的“社交网络”:基因组规模代谢模型(GEMs)的新前沿

当前,微生物群落的基因组组成和功能潜力通过宏基因组组装基因组(MAGs)的分析得以部分揭示,但其内在的代谢网络和相互作用机制仍充满未知。为此,科学家们开发了基因组规模的代谢模型(GEMs)&#…

一码多址与同义词解决方案

随着地址库中的数据不断的丰富,地址库中一码多址和同义词的数据也会越来越多,一码多址和同义词在统一地址管理平台中的概念并不相同。 一码多址指的是多个地址编码相同,例如通过民政地址找到编码,再通过编码找到房产地址描述。 本…

怎么把不同的文件做成二维码?多种文件类型在线生码的制作方法

扫码来展示文件是现在很多场景下会使用的一种内容展示方法,这种方式能够简化其他人获取文件的流程,从而提升文件传播的效率,用户可以存储二维码,随时扫码查看文件内容。文件生成二维码支持多种类型的文件使用,比如ppt、…

信号与系统实验-实验五 离散时间系统的时域分析

一、实验目的 1、理解离散信号的定义与时域特征,掌握在时域求解信号的各种变换运算; 2、掌握离散系统的单位响应及其 MATLAB 实现的方法; 3、掌握离散时间序列卷积及其 MATLAB 实现的方法; 4、掌握利用 MATLAB 求解微分方程&a…

【数据库】Oracle安装报错(win10安装oracle提示环境不满足最低要求)

目录 一、问题场景: 二、问题描述 三、原因分析: 四、解决方案: 一、问题场景: 安装Oracle数据库 二、问题描述 安装之前提示( [INS-13001]环境不满足最低要求。 是否确实要继续? ) 如图所示&…

说出这11种API接口性能优化,面试官一定会对你刮目相看

前言 接口性能优化是后端开发人员经常碰到的一道面试题,因为它是一个跟开发语言无关的公共问题。 这个问题既可以很简单,也可以相当复杂。 有时候,只需要添加一个索引就能解决。 有时候,代码需要进行重构。 有时候,必…

Vite: 集成Lint工具规范代码

概述 在前端开发中,尤其是在大型项目中,代码的规范性和一致性对于项目的可维护性、可读性以及团队协作效率至关重要。为了保障代码质量,前端社区涌现出了许多Lint工具,如ESLint、Prettier、Stylelint等,它们能帮助我们…

使用深度远程启动管理器配置BMC DHCP管理地址的方法

目录 1.请确保服务器BMC是DHCP状态,才可以使用深度工具分配地址;若BMC配置过静态地址,请使用静态地址登录; 2.配置好自己笔记本的 ip(例如:192.168.78.1),用网线与 ipmi 独立管理口…

Day46

Day46 手写Spring-MVC 解决Controller层的方案 思路:监听器在项目启动时DispatherServlet会将controller层的信息记录下来,当前端发送请求的时候DispatherServlet就会根据信息分发给controller层。 准备工作 准备工作的目的是准备好监听器,而…

AI-智能体基础设施

个性化记忆需要世界模型来协助构建 业界有一个精简的Agent表达公示,即:Agent大模型(LLM)记忆(Memory)主动规划(Planning)工具使用(Tool Use)。基于该公式&am…

零信任价值获全面认可 新场景下展现无穷潜力

2023年,零信任在全球范围内持续快速发展,已经从新的安全理念发展成为云时代的主流安全架构,进入了全面普及期。 2023年,中国零信任市场同样涨势迅猛,产业生态越来越成熟,应用范围越来越广,应用…

面试题-Redis简介

1.主流应用框架 概念: 穿透查询:数据库中的名词,与逐层查询不同,通过超链接可直接查询想要的结果,更加方便快捷 熔断机制:指软件系统中,由于某些原因使得服务出现了过载现象,为防止…

「2024中国数据要素产业图谱1.0版」重磅发布,景联文科技凭借高质量数据采集服务入选!

近日,景联文科技入选数据猿和上海大数据联盟发布的《2024中国数据要素产业图谱1.0版》数据采集服务板块。 景联文科技是专业数据服务公司,提供从数据采集、清洗、标注的全流程数据解决方案,协助人工智能企业解决整个AI链条中数据采集和数据标…

Maven高级的多环境配置与应用

多环境配置与应用 这一节中,我们会讲两个内容,分别是多环境开发和跳过测试 5.1 多环境开发 我们平常都是在自己的开发环境进行开发,当开发完成后,需要把开发的功能部署到测试环境供测试人员进行测试使用,等测试人员测…

Redis报错:MISCONF Redis is configured to save RDB snapshots

错误提示内容: 2024-06-25 16:30:49 : Connection: Redis_Server > [runCommand] PING 2024-06-25 16:30:49 : Connection: Redis_Server > Response received : -MISCONF Redis is configured to save RDB snapshots, but it is currently not able to pers…

Qt Quick Effect Maker 工具使用介绍

一、介绍 随着 Qt 版本的不断升级,越来越多的功能被加入 Qt,一些新的工具也随之应运而生,Qt Quick Effect Maker 工具是 Qt 6.5 之后才新添加的工具,之前的名字应该是叫做 Qt shader tool 这个模块。 以下是官方的释义:Qt Quick Effect Maker是一个用于为Qt Quick创建自定…

C语⾔数据类型和变量

C语⾔数据类型和变量 1.数据类型介绍1.1 字符型1.2 整型1.3 浮点型1.4 布尔类型1.5 各种数据类型的长度1.5.1 sizeof操作符1.5.2 数据类型长度1.5.3 sizeof中表达式不计算 2. signed 和 unsigned3. 数据类型的取值范围4. 变量4.1 变量的创建4.2 变量的分类 5. 算术操作符&#…