当前位置: 首页 > news >正文

跨平台的组播测试工具mping、udp_sender及udp_reciver的源码及使用教程

文章目录

  • 1.前言
  • 2.mping工具编译
  • 3.mping工具使用
    • 3.1 参数说明
    • 3.1 组播播发(-s)
    • 3.1 组播播发(-r)
    • 3.3 Linux下mping测试
  • 4.Linux组播udp_sender及udp_reciver使用
    • 4.1 udp_sender源码
    • 4.1 udp_reciver源码
    • 4.3 编译方法
    • 4.4 测试使用
      • 4.4.1 udp_sender
      • 4.4.2 udp_reciver

1.前言

UDP组播测试对于局域网内数据链路测试十分必要,轻量化和易用性是首要考虑的问题,使用mping作为UDP组播测试工具,能够非常方便的进行linux、Windows等平台的组播测试。本文第4章还提供了基于C/C++的udp_sender和udp_reciver组播源码,可以在Linux下编译执行。

2.mping工具编译

GITHUB:https://github.com/tongxinCode/mping
或使用如下链接(go源码+build可执行程序)
CSDN:https://download.csdn.net/download/Axugo/89070577
官方给出的编译方法:

# windows
SET CGO_ENABLED=0
SET GOOS=windows
SET GOARCH=amd64
go build -o mping.exe main.go
# linux
SET CGO_ENABLED=0
SET GOOS=linux 
SET GOARCH=amd64 
go build -o mping main.go
# linux arm
SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=arm
go build -o mping main.go

3.mping工具使用

以Windows为例,将编译好的mping.exe拷贝至C:\Windows\System32路径下,即可全局使用

3.1 参数说明

mping.exe -h

可以得到如下

mping version: mping/1.8.1
Usage: ./mping [-h] [-s sendGroup] [-r receiveGroup] [-l localAddress] [-S sourceAddress] [-m message] [-i interval] [-log path]Options:-C int[number] the limit number of sending packets(-1 means no limits) (default -1)-S string[ip[:port]] must determine the peer source ip if using SSM (default "127.0.0.1:8888")-c    whether to count Packet loss rate(default false)-e string['ascii','utf8','gbk'] change the content of sending (default "ascii")-h    this help-i int[number] change the interval between package sent (unit:Nanosecond) (default 1000000000)-l string[ip[:port]] must choose your local using interface (default "127.0.0.1:8888")-log string[/tmp/] or [C:\] determine whether to log, Path e.g ./, Forbidden / (default "/")-m string[string] change the content of sending (default "Init Data")-p int[number] the size of payload data(0 means use 1472 Bytes payloads) (default -1)-proto stringchoose a lua script to parse udp data, function Parse(dataBytes) must be included (default "*.lua")-r string[group:port] receive packet from group (default "239.255.255.255:9999")-s string[group:port] send packet to group (default "239.255.255.255:9999")-testsend and receive locally to examinate a test(default false)-timesend real time as the content to examinate(default false)-x    whether to show the hex data(default false)

3.1 组播播发(-s)

将组播信息播发至本机的19901端口

mping.exe -s 127.0.0.1:19901

在这里插入图片描述

3.1 组播播发(-r)

从19901端口接收播发的组播信息

mping.exe -r 224.0.0.8:19901

在这里插入图片描述

3.3 Linux下mping测试

在这里插入图片描述

4.Linux组播udp_sender及udp_reciver使用

4.1 udp_sender源码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>//#define MULTICAST_GROUP "224.0.0.1"
//#define PORT 10000int main(int argc,char *argv[]) {if(argc<3){printf("ERROR: argc<3 !\n");printf("Example: ./udp_sender 224.0.0.8 18044 \n\n");return 0;}int PORT=atoi(argv[2]);char *MULTICAST_GROUP=argv[1];struct sockaddr_in addr;int sock;char message[] = "This is a multicast test message...";// 创建UDP套接字sock = socket(AF_INET, SOCK_DGRAM, 0);if (sock < 0) {perror("socket creation failed");exit(EXIT_FAILURE);}// 设置组播TTL(生存时间)int ttl = 1;if (setsockopt(sock, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(ttl)) < 0) {perror("setsockopt failed");exit(EXIT_FAILURE);}// 设置组播目标地址和端口memset(&addr, 0, sizeof(addr));addr.sin_family = AF_INET;addr.sin_addr.s_addr = inet_addr(MULTICAST_GROUP);addr.sin_port = htons(PORT);while (1) {// 发送消息if (sendto(sock, message, strlen(message), 0, (struct sockaddr *)&addr, sizeof(addr)) < 0) {perror("sendto failed");exit(EXIT_FAILURE);}printf("udp_sender send msg to %s %d YES!\n\n",MULTICAST_GROUP,PORT);sleep(1);  // 每秒发送一次消息}// 关闭套接字close(sock);return 0;
}

4.1 udp_reciver源码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>//#define MULTICAST_GROUP "224.0.0.1"
//#define PORT 10000
#define MAX_BUFFER_SIZE 1024//第一个参数:组播IP 
//第二个参数:组播端口int main(int argc,char *argv[]) {if(argc<3){printf("ERROR: argc<3 !\n");printf("Example: ./udp_reciver 224.0.0.8 18044 \n\n");return 0;}int PORT=atoi(argv[2]);char *MULTICAST_GROUP=argv[1];struct sockaddr_in addr;int sock;char buffer[MAX_BUFFER_SIZE];ssize_t nbytes;// 创建UDP套接字sock = socket(AF_INET, SOCK_DGRAM, 0);if (sock < 0) {perror("socket creation failed");exit(EXIT_FAILURE);}// 设置套接字选项,允许多个进程绑定到相同的地址和端口int reuse = 1;if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0) {perror("setsockopt failed");exit(EXIT_FAILURE);}// 绑定到特定地址和端口memset(&addr, 0, sizeof(addr));addr.sin_family = AF_INET;addr.sin_addr.s_addr = htonl(INADDR_ANY);addr.sin_port = htons(PORT);if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) {perror("bind failed");exit(EXIT_FAILURE);}// 加入组播组struct ip_mreq mreq;mreq.imr_multiaddr.s_addr = inet_addr(MULTICAST_GROUP);mreq.imr_interface.s_addr = htonl(INADDR_ANY);if (setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&mreq, sizeof(mreq)) < 0) {perror("setsockopt failed");exit(EXIT_FAILURE);}printf("wait receive multimessage...\n");while (1) {// 接收消息nbytes = recvfrom(sock, buffer, sizeof(buffer), 0, NULL, 0);if (nbytes < 0) {perror("recvfrom failed");exit(EXIT_FAILURE);}printf("Have receive multimessage from %s %d\n",MULTICAST_GROUP,PORT);printf("%.*s\n", (int)nbytes, buffer);}// 关闭套接字close(sock);return 0;
}

4.3 编译方法

gcc sender.c -o udp_sender
gcc recver.c -o udp_reciver

4.4 测试使用

4.4.1 udp_sender

./udp_sender 224.0.0.8 19901

在这里插入图片描述

4.4.2 udp_reciver

./udp_reciver 224.0.0.8 19901

在这里插入图片描述

相关文章:

跨平台的组播测试工具mping、udp_sender及udp_reciver的源码及使用教程

文章目录 1.前言2.mping工具编译3.mping工具使用3.1 参数说明3.1 组播播发&#xff08;-s&#xff09;3.1 组播播发&#xff08;-r&#xff09;3.3 Linux下mping测试 4.Linux组播udp_sender及udp_reciver使用4.1 udp_sender源码4.1 udp_reciver源码4.3 编译方法4.4 测试使用4.4…...

Linux基础篇:文件系统介绍——根目录下文件夹含义与作用介绍

Linux文件系统介绍——文件夹含义与作用 Linux文件系统是一个组织和管理文件的层次结构。它包括了目录、子目录和文件&#xff0c;这些都是按照一定的规则和标准进行组织的。以下是Linux文件系统的一些关键组成部分&#xff1a; 1./bin&#xff1a; 该目录包含了系统启动和运…...

vulhub中Apache Solr RemoteStreaming 文件读取与SSRF漏洞复现

Apache Solr 是一个开源的搜索服务器。在Apache Solr未开启认证的情况下&#xff0c;攻击者可直接构造特定请求开启特定配置&#xff0c;并最终造成SSRF或任意文件读取。 访问http://your-ip:8983即可查看Apache Solr后台 1.访问http://your-ip:8983/solr/admin/cores?indexI…...

PHP在线加密系统网站源码

源码介绍 PHP在线加密系统网站源码&#xff0c;这个是sg的加密,免费可用(目前)并不会收费 源码说明&#xff1a;下载直接上传即可 下载地址 蓝奏云下载&#xff1a;https://wfr.lanzout.com/i6c331togiji...

【C++】哈希思想的应用(位图、布隆过滤器)及海量数据处理方法

文章目录 前言位图什么是位图简单实现一个自己的位图位图的应用场景 布隆过滤器位图的缺陷及布隆过滤器的提出布隆过滤器的概念简单实现一个自己的布隆过滤器布隆过滤器的优缺点布隆过滤器的应用场景 海量数据处理 前言 哈希思想的在实际中的应用除了哈希表这个数据结构之外还…...

蓝桥杯(5):python动态规划DF[2:背包问题]

1 0-1背包介绍【每件物品只能拿1件或者不拿】 1.1 简介 贪心是不可以的&#xff01;&#xff01;&#xff01; 1.2 状态 及状态转移 转移解释&#xff1a;要么不选 则上一个直接转移过来【dp[i-1][j]】&#xff0c;要么是选这个之后体积为j 则上一个对应的就是【dp[i-1][j-wi]…...

臻奶惠无人售货机:新零售时代的便捷消费革命

臻奶惠无人售货机&#xff1a;新零售时代的便捷消费革命 在新零售的浪潮中&#xff0c;智能无人售货机作为一个创新的消费模式&#xff0c;已经成为距离消费者最近的便捷购物点之一。这种模式不仅能够满足居民对消费升级的需求&#xff0c;还能通过建立多样化和多层次的消费体…...

4月04日,每日信息差

&#x1f396; 素材来源官方媒体/网络新闻 &#x1f384; 地震预警App被曝收10元年费&#xff0c;回应称仅限苹果系统 &#x1f30d; 2024清明档首日票房破2亿 &#x1f30b; 浙江省杭州市余杭区设立2亿元网络微短剧发展基金 &#x1f381; 抖音拟以超 7.5 亿元收购海联金汇旗下…...

C++数据结构——顺序表——数值统计

C数据结构——顺序表——数值统计 接着上一篇的顺序表模板。 输入数组&#xff0c;统计数组中的负数、零、正数的个数。第一个数字,表示数组有几个数,当n为0时&#xff0c;输入结束&#xff0c;不做处理。 例如&#xff1a; 输入6 0 1 2 3 -1 0 输出1 2 3 int main() {int n;…...

Linux+HA高可用24X7的安全保证

一&#xff0e; 介绍作为服务器&#xff0c;需要提供一定的24X7的安全保证&#xff0c;这样可以防止关键节点的宕机引起系统的全面崩溃。利用OpenSource开源软件&#xff0c;完成系统的高可靠双机热备方案。基于linux的 HA软件可靠稳定&#xff0c;比使用商业版本的HA软件降低成…...

【Tomcat】Apache官方结束Tomcat 8.5分支版本技术支持

根据 Apache 官方发布的声明&#xff0c;Apache官方将于2024年3月31日后正式结束对于Tomcat 8.5这个分支版本的技术支持&#xff0c;包括以下几点&#xff1a; 1&#xff09;不太可能继续为 8.5 分支发布新的版本&#xff1b; 2&#xff09;仅影响 8.5 分支的漏洞将不会被解决&…...

Go 源码之读写锁 sync.RWMutex

Go 源码之读写锁 sync.RWMutex 文章目录 Go 源码之读写锁 sync.RWMutex一、简介二、源码(一)RWMutex数据结构(二)Lock(三)Unlock(四)TryRLock(五)Rlock(六)RUnlock三、常见问题1. 什么是CAS,什么是原子操作2. 写操作是如何阻止写操作的3. 写操作是如何阻止读操作的…...

大数据实验统计-1、Hadoop安装及使用;2、HDFS编程实践;3、HBase编程实践;4、MapReduce编程实践

大数据实验统计 1、Hadoop安装及使用&#xff1b; 一&#xff0e;实验内容 Hadoop安装使用&#xff1a; 1&#xff09;在PC机上以伪分布式模式安装Hadoop&#xff1b; 2&#xff09;访问Web界面查看Hadoop信息。 二&#xff0e;实验目的 1、熟悉Hadoop的安装流程。 2、…...

PyTorch搭建Informer实现长序列时间序列预测

目录 I. 前言II. InformerIII. 代码3.1 输入编码3.1.1 Token Embedding3.1.2 Positional Embedding3.1.3 Temporal Embedding 3.2 Encoder与Decoder IV. 实验 I. 前言 前面已经写了很多关于时间序列预测的文章&#xff1a; 深入理解PyTorch中LSTM的输入和输出&#xff08;从i…...

firefox切换本地服务和全球服务的方法

方法1&#xff1a;“设置”>“同步">“切换全球/本地服务器” https://jingyan.baidu.com/article/1974b2898523bbb5b1f774e2.html 方法2&#xff1a;地址栏输入about:config&#xff0c;搜索首选项名称里输入identity.fxaccounts.autoconfig.uri&#xff0c;填入…...

Windows下用CMake编译PugiXML及配置测试

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 PugiXML是什么&#xff1f; PugiXML 是一个用于解析和操作 XML 文档的 C 库。它提供了简单易用的接口&#xff0c;能够高效地加载…...

python-基础篇-字符串、列表、元祖、字典-列表

文章目录 2.3.2列表2.3.2.1列表介绍2.3.2.1.1列表的格式2.3.2.1.2打印列表 2.3.2.2列表的增删改查2.3.2.2.1列表的遍历2.3.2.2.1.1使用for循环2.3.2.2.1.2使用while循环 2.3.2.2.2添加元素("增"append, extend, insert)2.3.2.2.2.1append 2.3.2.2.2.2extend2.3.2.2.2…...

Qt控件样式设置其一(常见方法及优缺点)

如果你对Qt有基本的了解&#xff0c;应该知道它的一大优点是跨平台&#xff0c;可以在不同的系统中编译运行。但在我看来&#xff0c;Qt还有另外一个优点&#xff0c;就是制作界面比较方便和灵活&#xff0c;能够实现主流静态效果的桌面应用。&#xff08;如果需要实现比较灵动…...

软件测试(测试用例详解)(三)

1. 测试用例的概念 测试用例&#xff08;Test Case&#xff09;是为了实施测试而向被测试的系统提供的一组集合。 测试环境操作步骤测试数据预取结果 测试用例的评价标准&#xff1a; 用例表达清楚&#xff0c;无二义性。。用例可操作性强。用例的输入与输出明确。一条用例只有…...

最优算法100例之33-字符串/数字的排列组合问题

专栏主页:计算机专业基础知识总结(适用于期末复习考研刷题求职面试)系列文章https://blog.csdn.net/seeker1994/category_12585732.html 题目描述 字符串/数字的排列组合问题 void dfs(int deep){if(deep == n){//输出}for(int i = 0; i < n; i++){if(flag[i] == 0){d[d…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...