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

Linux下C语言操作网卡的几个代码实例?特别实用

前面写了一篇关于网络相关的文章:如何获取当前可用网口。

《简简单单教你如何用C语言列举当前所有网口!》

那么如何使用C语言直接操作网口?

比如读写IP地址、读写MAC地址等。

一、原理

主要通过系统用socket()、ioctl()、实现

int socket(int domain, int type, int protocol);
功能:创建套接字
参数:domain: Name                Purpose                          Man pageAF_UNIX, AF_LOCAL   Local communication              unix(7)AF_INET             IPv4 Internet protocols          ip(7)type:SOCK_STREAM     Provides sequenced, reliable, two-way, connection-basedbyte  streams.  An out-of-band data transmission mecha‐nism may be supported.SOCK_DGRAM      Supports datagrams (connectionless, unreliable messagesof a fixed maximum length).protocol:通常为0
返回值:成功:新的套接字的文件描述符失败:错误码,负值
int ioctl(int fd, unsigned long request, ...);
参数:fd :文件描述符request:命令... :参数

其中网络用到的request定义头文件位于:

/usr/include/linux/sockios.h
/* Linux-specific socket ioctls */
#define SIOCINQ		FIONREAD
#define SIOCOUTQ	TIOCOUTQ        /* output queue size (not sent + not acked) *//* Routing table calls. */
#define SIOCADDRT	0x890B		/* add routing table entry	*/
#define SIOCDELRT	0x890C		/* delete routing table entry	*/
#define SIOCRTMSG	0x890D		/* call to routing system	*//* Socket configuration controls. */
#define SIOCGIFNAME	0x8910		/* get iface name		*/
#define SIOCSIFLINK	0x8911		/* set iface channel		*/
#define SIOCGIFCONF	0x8912		/* get iface list		*/
#define SIOCGIFFLAGS	0x8913		/* get flags			*/
#define SIOCSIFFLAGS	0x8914		/* set flags			*/
#define SIOCGIFADDR	0x8915		/* get PA address		*/
#define SIOCSIFADDR	0x8916		/* set PA address		*/
#define SIOCGIFDSTADDR	0x8917		/* get remote PA address	*/
#define SIOCSIFDSTADDR	0x8918		/* set remote PA address	*/
#define SIOCGIFBRDADDR	0x8919		/* get broadcast PA address	*/
#define SIOCSIFBRDADDR	0x891a		/* set broadcast PA address	*/
#define SIOCGIFNETMASK	0x891b		/* get network PA mask		*/
#define SIOCSIFNETMASK	0x891c		/* set network PA mask		*/
#define SIOCGIFMETRIC	0x891d		/* get metric			*/
#define SIOCSIFMETRIC	0x891e		/* set metric			*/
#define SIOCGIFMEM	0x891f		/* get memory address (BSD)	*/
#define SIOCSIFMEM	0x8920		/* set memory address (BSD)	*/
#define SIOCGIFMTU	0x8921		/* get MTU size			*/
#define SIOCSIFMTU	0x8922		/* set MTU size			*/
#define SIOCSIFNAME	0x8923		/* set interface name */
#define	SIOCSIFHWADDR	0x8924		/* set hardware address 	*/
#define SIOCGIFENCAP	0x8925		/* get/set encapsulations       */
#define SIOCSIFENCAP	0x8926		
#define SIOCGIFHWADDR	0x8927		/* Get hardware address		*/
#define SIOCGIFSLAVE	0x8929		/* Driver slaving support	*/
#define SIOCSIFSLAVE	0x8930
#define SIOCADDMULTI	0x8931		/* Multicast address lists	*/
#define SIOCDELMULTI	0x8932
#define SIOCGIFINDEX	0x8933		/* name -> if_index mapping	*/
#define SIOGIFINDEX	SIOCGIFINDEX	/* misprint compatibility :-)	*/
#define SIOCSIFPFLAGS	0x8934		/* set/get extended flags set	*/
#define SIOCGIFPFLAGS	0x8935
#define SIOCDIFADDR	0x8936		/* delete PA address		*/
#define	SIOCSIFHWBROADCAST	0x8937	/* set hardware broadcast addr	*/
#define SIOCGIFCOUNT	0x8938		/* get number of devices */
……

其中ioctl的参数需要借助结构体struct ifreq
定义头文件:

/usr/include/linux/if.h
#if __UAPI_DEF_IF_IFREQ
struct ifreq {
#define IFHWADDRLEN	6union{char	ifrn_name[IFNAMSIZ];		/* if name, e.g. "en0" */} ifr_ifrn;union {struct	sockaddr ifru_addr;struct	sockaddr ifru_dstaddr;struct	sockaddr ifru_broadaddr;struct	sockaddr ifru_netmask;struct  sockaddr ifru_hwaddr;short	ifru_flags;int	ifru_ivalue;int	ifru_mtu;struct  ifmap ifru_map;char	ifru_slave[IFNAMSIZ];	/* Just fits the size */char	ifru_newname[IFNAMSIZ];void *	ifru_data;struct	if_settings ifru_settings;} ifr_ifru;
};
#endif /* __UAPI_DEF_IF_IFREQ */#define ifr_name	ifr_ifrn.ifrn_name	/* interface name 	*/
#define ifr_hwaddr	ifr_ifru.ifru_hwaddr	/* MAC address 		*/
#define	ifr_addr	ifr_ifru.ifru_addr	/* address		*/
#define	ifr_dstaddr	ifr_ifru.ifru_dstaddr	/* other end of p-p lnk	*/
#define	ifr_broadaddr	ifr_ifru.ifru_broadaddr	/* broadcast address	*/
#define	ifr_netmask	ifr_ifru.ifru_netmask	/* interface net mask	*/
#define	ifr_flags	ifr_ifru.ifru_flags	/* flags		*/
#define	ifr_metric	ifr_ifru.ifru_ivalue	/* metric		*/
#define	ifr_mtu		ifr_ifru.ifru_mtu	/* mtu			*/
#define ifr_map		ifr_ifru.ifru_map	/* device map		*/
#define ifr_slave	ifr_ifru.ifru_slave	/* slave device		*/
#define	ifr_data	ifr_ifru.ifru_data	/* for use by interface	*/
#define ifr_ifindex	ifr_ifru.ifru_ivalue	/* interface index	*/
#define ifr_bandwidth	ifr_ifru.ifru_ivalue    /* link bandwidth	*/
#define ifr_qlen	ifr_ifru.ifru_ivalue	/* Queue length 	*/
#define ifr_newname	ifr_ifru.ifru_newname	/* New name		*/
#define ifr_settings	ifr_ifru.ifru_settings	/* Device/proto settings*/

二、函数实现

下面将实现不同功能的函数一一列举。

0. 列出所有可用网口

int list_all_port()
{struct ifconf ifconf;struct ifreq *ifr;int m, n, s, fd;if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {return -11;}s = sizeof(struct ifreq)*5;for (;;) {ifr = malloc(s);ifconf.ifc_len = s;ifconf.ifc_req = ifr;if (ioctl(fd, SIOCGIFCONF, &ifconf) < 0) {perror("SIOCGIFCONF:");free(ifr);close(fd);return 1;}if (ifconf.ifc_len != s)break;free(ifr);s *= 2;}close(fd);m = ifconf.ifc_len/sizeof(struct ifreq);for (n = 0; n < m; n++){printf("port:\t%s\n",ifconf.ifc_req[n].ifr_name);}free(ifr);
}

1. 获取指定网卡IP

int getLocalIp(const char *eth, char *ip) {struct ifreq ifr;struct sockaddr_in sin;int fd;bzero(&ifr, sizeof(ifr));if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {return -1;}strcpy(ifr.ifr_name, eth);if (ioctl(fd, SIOCGIFADDR, &ifr) < 0) {close(fd);return -1;}memcpy(&sin, &ifr.ifr_addr, sizeof(sin));snprintf(ip, IP_SIZE, "%s", inet_ntoa(sin.sin_addr));close(fd);return 0;
}

2. 设置本网卡IP地址

int setIpAddrManual(const char *eth, char *ipstr) {int fd;struct sockaddr_in sin;struct ifreq ifr;bzero(&ifr, sizeof(ifr));if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0){return -1;}strcpy(ifr.ifr_name, eth);sin.sin_addr.s_addr = inet_addr(ipstr);sin.sin_family = AF_INET;memcpy(&ifr.ifr_addr, &sin, sizeof(sin));if (ioctl(fd, SIOCSIFADDR, &ifr) < 0){perror("");close(fd);return -1;}close(fd);return 0;
} 

3. 获取本机网卡Mac地址

int getLocalMac(const char *eth, char *mac) {int fd;struct ifreq ifr;bzero(&ifr, sizeof(ifr));if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0){return -1;}strcpy(ifr.ifr_name, eth);if (ioctl(fd, SIOCGIFHWADDR, &ifr) < 0){close(fd);return -1;}snprintf(mac,18, "%02x:%02x:%02x:%02x:%02x:%02x",(unsigned char) ifr.ifr_hwaddr.sa_data[0],(unsigned char) ifr.ifr_hwaddr.sa_data[1],(unsigned char) ifr.ifr_hwaddr.sa_data[2],(unsigned char) ifr.ifr_hwaddr.sa_data[3],(unsigned char) ifr.ifr_hwaddr.sa_data[4],(unsigned char) ifr.ifr_hwaddr.sa_data[5]);close(fd);return 0;} 

4. 设置网卡mac地址

/*
support format [00:11:22:33:44:55]
*/
#define MAC_ARRAY(mac_array)  (unsigned int *)&mac_array[0],(unsigned int *)&mac_array[1],(unsigned int *)&mac_array[2],(unsigned int *)&mac_array[3],(unsigned int *)&mac_array[4],(unsigned int *)&mac_array[5] 
int setLocalMac(const char *eth, char *mac) {int fd;struct ifreq ifr;unsigned char mac_array[6] = {0};bzero(&ifr, sizeof(ifr));if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0){return -1;}strcpy(ifr.ifr_name, eth);ifr.ifr_hwaddr.sa_family = AF_LOCAL;sscanf(mac,"%02x:%02x:%02x:%02x:%02x:%02x",MAC_ARRAY(mac_array));memcpy(ifr.ifr_hwaddr.sa_data,mac_array,6);if (ioctl(fd, SIOCSIFHWADDR, &ifr) < 0){perror("SIOCSIFHWADDR:");close(fd);return -1;}close(fd);return 0;
} 

注意:

  • 网卡地址的第一字节必须是偶数
  • sa_family 值必须为:AF_LOCAL

5. 获取网卡mtu

int getMtu(const char *eth, char *mtu) {int fd;struct ifreq ifr;bzero(&ifr, sizeof(ifr));if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0){return -1;}strcpy(ifr.ifr_name, eth);if (ioctl(fd, SIOCGIFMTU, &ifr) < 0){close(fd);return -1;}	snprintf(mtu,64, "%d", (unsigned char) ifr.ifr_mtu);close(fd);return 0;
} 

6. 获取广播地址

int getBroadAddr(const char *eth, char *ip) {int fd;struct sockaddr_in sin;struct ifreq ifr;bzero(&ifr, sizeof(ifr));if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0){return -1;}strcpy(ifr.ifr_name, eth);if (ioctl(fd, SIOCGIFBRDADDR, &ifr) < 0){perror("");close(fd);return -1;}memcpy(&sin, &ifr.ifr_broadaddr, sizeof(sin));snprintf(ip, IP_SIZE, "%s", inet_ntoa(sin.sin_addr));close(fd);return 0;
} 

7. 获取掩码

int getNetMask(const char *eth, char *mask) {int fd;struct sockaddr_in sin;struct ifreq ifr;bzero(&ifr, sizeof(ifr));if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0){return -1;}strcpy(ifr.ifr_name, eth);if (ioctl(fd, SIOCGIFNETMASK, &ifr) < 0){perror("");close(fd);return -1;}memcpy(&sin, &ifr.ifr_netmask, sizeof(sin));snprintf(mask, IP_SIZE, "%s", inet_ntoa(sin.sin_addr));close(fd);return 0;
}

8. 获取网卡flag

int getFlags(const char *eth, char *fg) {int fd;struct sockaddr_in sin;struct ifreq ifr;bzero(&ifr, sizeof(ifr));if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0){return -1;}strcpy(ifr.ifr_name, eth);if (ioctl(fd, SIOCGIFFLAGS, &ifr) < 0){perror("");close(fd);return -1;}snprintf(fg, IP_SIZE, "%x", ifr.ifr_flags);close(fd);return 0;
} 

三、测试

1. 测试程序

int main(int argc, char **argv)
{int fg=0;char mac[32]={};char ip[IP_SIZE]={0};char buf[64];getBroadAddr(ethname,ip);printf("broad ip:\t%s\n",ip);getNetMask(ethname,ip);printf("mask:\t%s\n",ip);setIpAddrManual(ethname, "1.1.1.1");getLocalIp(ethname,ip);printf("ip:\t%s\n",ip);setLocalMac(ethname,"00:11:22:33:44:55");getLocalMac(ethname,mac);printf("mac:\t%s\n",mac);getMtu(ethname,buf);printf("mtu:\t%s\n",buf);	return 1;
}

2. 执行结果

执行后结果:

peng@ubuntu:~/work/test/ip$ ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:11:22:33:44:55  inet addr:1.1.1.1  Bcast:1.255.255.255  Mask:255.0.0.0inet6 addr: fe80::d9d4:d42b:a04a:9d40/64 Scope:LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:188577 errors:0 dropped:0 overruns:0 frame:0TX packets:208116 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:53762370 (53.7 MB)  TX bytes:172094089 (172.0 MB)

完整代码获取,请点赞转发,并后台留言:eth

相关文章:

Linux下C语言操作网卡的几个代码实例?特别实用

前面写了一篇关于网络相关的文章&#xff1a;如何获取当前可用网口。 《简简单单教你如何用C语言列举当前所有网口&#xff01;》 那么如何使用C语言直接操作网口&#xff1f; 比如读写IP地址、读写MAC地址等。 一、原理 主要通过系统用socket()、ioctl()、实现 int sock…...

noip2011选择旅馆

1.审题&#xff1a;第一个人与第二个人入住的旅馆要求是同色的&#xff1b; 两个人去消费的旅馆并没有要求与入住的旅馆是同色的&#xff08;这点要小心&#xff09; 2.要求记录以下数据&#xff1a; 1&#xff09;a[color]表示当前同为颜色color的旅馆数 2&#xff09;b[co…...

vue造轮子完整指南--npm组件包开发步骤

一、项目包文件的创建和初始化。 1. 新建项目包。 vue create <Project Name> //用于发布npm包的项目文件名 ps:一般选择自定义&#xff0c;然后不需要Vuex和Router&#xff0c;其他选项按自己实际情况选择安装即可。 2.修改原始src文件名、新增组件项目存放文件和修改…...

28 drf-Vue个人向总结-1

文章目录 前后端分离开发展示项目项补充知识开发问题浏览器解决跨域问题 drf 小tips设置资源root目录使用自定义的user表设置资源路径media数据库补充删除表中数据单页面与多页面模式过滤多层自关联后端提交的数据到底是什么jwt token登录设置普通的 token 原理使用流程解析 jw…...

线性代数(七) 矩阵分析

前言 从性线变换我们得出&#xff0c;矩阵和函数是密不可分的。如何用函数的思维来分析矩阵。 矩阵的序列 通过这个定义我们就定义了矩阵序列的收敛性。 研究矩阵序列收敛性的常用方法&#xff0c;是用《常见向量范数和矩阵范数》来研究矩阵序列的极限。 长度是范数的一个特…...

myArm 全新七轴桌面型机械臂

引言 在不断演进的科技世界中&#xff0c;我们始终追求创新和卓越&#xff0c;以满足客户的需求并超越他们的期望。今天&#xff0c;我们很高兴地宣布我们的最新产品——myArm 300 Pi&#xff0c;一款七轴的桌面型机械臂。这款产品的独特之处在于其灵活性和可编程性&#xff0c…...

tomcat乱码解决

解决乱码 1、修改bin\catalina.bat配置文件 修改tomcat的配置文件&#xff0c;找到tomcat路径下的\bin目录下的catalina.bat文件&#xff0c;修改 set “JAVA_OPTS%JAVA_OPTS% %JSSE_OPTS% -Dfile.encodingUTF-8 -Dsun.jnu.encodingUTF-8 ” 2、修改conf\logging.properties配置…...

【Linux】详解线程第三篇——线程同步和生产消费者模型

线程同步和生消模型 前言正式开始再次用黄牛抢票来讲解线程同步的思想通过条件变量来实现线程同步条件变量接口介绍初始化和销毁pthread_cond_waitsignal和broadcast 生产消费者模型三种关系用基本工程师思维再次理解基于生产消费者模型的阻塞队列版本一版本二多生多消 利用RAI…...

k8s 安装

文章目录 k8s 客户端安装k8s集群minikubekindkubeadm 验证 k8s 客户端 用于连接k8s集群&#xff0c;建议下载1.23.x的版本&#xff0c;其他的版本本地运行可能会有莫名其妙的报错 https://dl.k8s.io/release/v1.23.16/bin/linux/amd64/kubectl 安装k8s集群 minikube Minik…...

红队打靶:THE PLANETS: MERCURY打靶思路详解(vulnhub)

目录 写在开头 第一步&#xff1a;主机发现和端口扫描 第二步&#xff1a;Web渗透 第三步&#xff1a;获取初步立足点并搜集信息 第四步&#xff1a;软连接劫持sudo提权 总结与思考 写在开头 本篇博客在自己的理解之上根据大佬红队笔记的视频进行打靶&#xff0c;详述了…...

【网络协议】IP

当连接多个异构的局域网形成强烈需求时&#xff0c;用户不满足于仅在一个局域网内进行通信&#xff0c;他们希望通过更高一层协议最终实现异构网络之间的连接。既然需要通过更高一层的协议将多个局域网进行互联&#xff0c;那么这个协议就必须为不同的局域网环境定义统一的寻址…...

Python 布尔类型

布尔值表示两个值之一&#xff1a;True&#xff08;真&#xff09;或False&#xff08;假&#xff09;。 布尔值 在编程中&#xff0c;您经常需要知道一个表达式是否为True或False。 您可以在Python中评估任何表达式&#xff0c;并获得两个答案之一&#xff1a;True或False。…...

iOS设备管理器iMazing比iTunes好用吗?有哪些优势

虽然 iTunes 是 Apple 官方指定的 iPhone 数据备份和管理工具&#xff0c;但是一直以来 iTunes 卡顿的使用体验和过慢的备份过程为不少人诟病。如果大家也被 iTunes 体验不佳的备份和管理功能所困扰&#xff0c;那么简单易用、功能强大的iMazing 能为你解决这个问题。 iMazing…...

Opengl之深度测试

在坐标系统小节中,我们渲染了一个3D箱子,并且运用了深度缓冲(Depth Buffer)来防止被阻挡的面渲染到其它面的前面。在这一节中,我们将会更加深入地讨论这些储存在深度缓冲(或z缓冲(z-buffer))中的深度值(Depth Value),以及它们是如何确定一个片段是处于其它片段后方的。 …...

利用ICG-NH2/Amine进行DNA标记1686147-55-6星戈瑞

ICG-NH2&#xff08;吲哚菁绿胺&#xff09;可以用于DNA标记&#xff0c;这种标记方法通常涉及到DNA上的胺基反应基团和ICG-NH2之间的化学反应。以下是一种常见的方法&#xff0c;用于利用ICG-NH2标记DNA分子&#xff1a; 步骤&#xff1a; 1.准备目标DNA&#xff1a;你需要准…...

Pyecharts数据可视化

Pyecharts数据可视化 1、Pyecharts模块2、柱状图3、折线图4、饼图5、散点图6、图表合并7、词云8、地图 1、Pyecharts模块 ECharts是百度提供的基于JavaScript的开源可视化库&#xff0c;主要用于Web端数据可视化 Echarts是通过JS实现的&#xff0c;Pyecharts则可以使用Python来…...

集合-List集合

系列文章目录 1.集合-Collection-CSDN博客​​​​​​ 2.集合-List集合-CSDN博客 文章目录 目录 系列文章目录 文章目录 前言 一 . 什么是List? 二 . List集合的特点 三 . 常用方法 1.void add(int index, E element): 将指定的元素插入到列表的指定位置。 2.E remove(int in…...

vuex的使用

1 vuex的使用 1 vuex的使用 store/index.js -在Vue中实现集中式状态&#xff08;数据&#xff09;管理的一个Vue插件&#xff0c;对vue应用中多个组件的共享状态进行集中式 的管理&#xff08;读/写&#xff09;&#xff0c;也是一种组件间通信的方式&#xff0c;且适用于任意…...

raw图片处理软件:DxO PhotoLab 6 mac中文版支持相机格式

DxO PhotoLab 6 mac是一款专业的RAW图片处理软件&#xff0c;适用于Mac操作系统。它具有先进的图像处理技术和直观易用的界面&#xff0c;可帮助用户轻松地将RAW格式的照片转换为高质量的JPEG或TIFF图像。 DxO PhotoLab 6支持多种相机品牌的RAW格式&#xff0c;包括佳能、尼康、…...

ReactPortals传送门

ReactPortals传送门 React Portals提供了一种将子节点渲染到父组件以外的DOM节点的解决方案&#xff0c;即允许将JSX作为children渲染至DOM的不同部分&#xff0c;最常见用例是子组件需要从视觉上脱离父容器&#xff0c;例如对话框、浮动工具栏、提示信息等。 描述 <div&…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing

Muffin 论文 现有方法 CRADLE 和 LEMON&#xff0c;依赖模型推理阶段输出进行差分测试&#xff0c;但在训练阶段是不可行的&#xff0c;因为训练阶段直到最后才有固定输出&#xff0c;中间过程是不断变化的。API 库覆盖低&#xff0c;因为各个 API 都是在各种具体场景下使用。…...