dlz0836
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
查看是否是fd资源泄漏
如果几个小时下来 fd_count 一直稳定在个位数(~5),那就完全确认。原创 2025-09-01 11:08:03 · 15 阅读 · 0 评论 -
工程案例:通过getpid() 解决工程SSH(dropbear)主进程异常退出问题
在守护进程启动时(全局变量,或填入现有的),后续用判断。在m_close()与中使用该判定;如果 master_pid 未设置,应保守处理(不要盲目 exit 整个进程)。原创 2025-08-30 11:55:04 · 33 阅读 · 0 评论 -
OpenSSL 1.0.1 正确的集成方法
在在。原创 2025-08-08 17:00:07 · 29 阅读 · 0 评论 -
嵌入式项目-移植 OpenSSH v1 和 OpenSSL 1.0.2 到ARM交换机平台
✅ 已完成 (1/4): SSH v1 服务基本功能实现OpenSSH SSH v1 服务在端口 2222 正常运行与原有 dropbear SSH v2 服务共存基本的连接和认证功能正常剩余任务规划任务二:替换 socket 通信接口 (2/4)任务三:CLI 命令封装 (3/4)任务四:统一 build 集成 (4/4)原创 2025-08-07 20:18:10 · 242 阅读 · 0 评论 -
ipv6特殊组播地址
范畴特殊组播地址样例描述所有节点ff02::1ff03::1全网/全链路设备广播接收所有路由器ff02::2ff03::2路由协议组播协议相关ff02::5ff02::6ff02::9OSPFv3、RIPng、PIM 等组播服务发现ff02::fbff02::101mDNS、NTP 等DHCPv6ff02::1:2ff05::1:3DHCPv6 服务广播。原创 2025-07-30 14:45:02 · 58 阅读 · 0 评论 -
上联端口在 IGMP Snooping 中的作用和 动态端口是怎么形成的?
IGMP Snooping 中的上联端口的核心意义是:保证组播流能进得来、报文能出得去、转发路径正确。如果你发现组播能正常学表,但最终用户收不到数据,很可能就是上联口没设置或 IGMP 报文被拦了。在 IGMP Snooping 的场景中,上联端口(uplink port)也确实可以出现在组播转发表中,并且可以是动态加入的。原创 2025-07-22 14:23:04 · 39 阅读 · 0 评论 -
如何测试 Linux 程序内存泄漏 --Valgrind 检测内存泄漏超详细教程
Linux内存泄漏检测指南:Valgrind实战应用 文章摘要: 本文介绍了Linux下内存泄漏的概念及主流检测工具,重点讲解了Valgrind工具的使用方法。内存泄漏是指程序未释放动态申请的内存,导致内存资源浪费。文章通过示例代码演示泄漏场景,详细说明如何用Valgrind检测泄漏(安装命令、编译要求、参数配置),并提供了修复验证方法。最后推荐了Valgrind+Massif的可视化分析方案,总结了从检测到修复的完整流程,适用于各类Linux程序的调试。(150字)原创 2025-07-04 09:53:56 · 94 阅读 · 0 评论 -
深入掌握 CMSG_SPACE 与 CMSG_LEN
摘要:在UNIX域套接字中,CMSG_SPACE和CMSG_LEN宏用于处理控制消息的空间分配和长度计算。CMSG_LEN计算控制消息头部和数据部分的实际长度(不含padding),用于设置cmsg_len字段;而CMSG_SPACE计算包含对齐padding的完整缓冲区大小,用于分配msg_control空间。典型应用包括传递文件描述符(SCM_RIGHTS)和进程凭证(SCM_CREDENTIALS)。常见错误包括混淆两宏用途导致缓冲区截断或解析失败。正确用法是:cmsg->cmsg_len用CM原创 2025-06-30 09:09:51 · 46 阅读 · 0 评论 -
详解 recvmsg() 和 sendmsg() (四)-使用 sendmsg() / recvmsg() 实现 多文件描述符同时传递 和 带超时的接收操作(基于 select() 实现简单超时)
先准备文件:tdtest.txt 和 fdtest2.txt。多 FD 传递受限于内核限制(一般几百个以内都没问题)发送方尽量不要一次传过多文件描述符,保持合理范围。原创 2025-06-28 14:50:27 · 53 阅读 · 0 评论 -
详解 recvmsg() 和 sendmsg() (三)-使用 sendmsg() / recvmsg() 实现 同时发送普通数据 + 文件描述符(FD)
这里是一个更完整的,支持,以及对应的接收函数。原创 2025-06-28 10:24:33 · 37 阅读 · 0 评论 -
详解 recvmsg() 和 sendmsg() (二)-使用 sendmsg() / recvmsg() 实现 文件描述符(FD)传递
/ send_fd() - 通过 socket 发送一个文件描述符// recv_fd() - 从 socket 接收一个文件描述符。原创 2025-06-28 09:56:45 · 45 阅读 · 0 评论 -
详解 recvmsg() 和 sendmsg() (一)
用法场景你需要做的事传递文件描述符用SCM_RIGHTS多 buffer 高效写入使用多个iovec权限隔离通信父子进程通过 socketpair + sendmsg/recvmsg多控制消息遍历cmsghdr结构链。原创 2025-06-28 09:24:51 · 133 阅读 · 0 评论 -
C网络编程 详解 CMSG_FIRSTHDR和CMSG_DATA
在使用recvmsg()和sendmsg()进行高级套接字通信时,我们可以传递:主数据:通常通过接收控制数据(Control Message):通过来接收额外信息,如:文件描述符(FD) ➜SCM_RIGHTS权限信息 ➜这些控制信息就是通过(control message header)组织的。宏名用途获取第一个控制消息头获取控制数据指针(如文件描述符)申请包含对齐空间的总缓冲大小设置控制头中的有效长度。原创 2025-06-26 13:44:30 · 47 阅读 · 0 评论 -
进程间为什么要传递文件描述符?
Unix域套接字的文件描述符传递(FDpassing)是一项关键特性,允许进程间共享已打开的文件、套接字等资源。其主要价值在于:1)跨进程共享资源,避免重复打开;2)实现特权分离,提升安全性;3)支持服务代理和负载均衡;4)动态资源管理;5)节省系统资源。典型应用包括systemd服务启动、SSH代理转发等系统服务。这种机制通过共享资源"打开状态",为Unix系统提供了高效的进程间通信和安全隔离方案,是构建复杂服务架构的重要基础。原创 2025-06-26 11:21:02 · 64 阅读 · 0 评论 -
当一个网络包(比如 TCP 包)到达我们电脑的网卡,它如何一步步穿越 Linux 内核网络协议栈,最终变成我们 read() 读到的应用数据?
本文分析了Linux内核中HTTP请求从网卡接收、协议栈处理到应用程序读取的全过程。通过分层结构展示,从硬件中断到DMA拷贝,再到MAC/IP/TCP各协议层的处理,最终socket缓冲区将干净的HTTP请求(GET/...)数据提供给read()调用。内核协议栈完成了所有底层协议头的剥离和校验工作,使用户程序只需处理应用层数据。文章还提供了抓包实例和内核源码参考建议,帮助理解网络数据包的内核处理机制。原创 2025-06-25 16:34:41 · 32 阅读 · 0 评论 -
交换机何时做二层转发,何时做三层转发
网络转发方式分为二层转发和三层转发。二层转发发生在同VLAN/子网内,仅依据MAC地址进行交换,不涉及IP层;三层转发用于跨VLAN/子网通信,需查看IP地址并查询路由表,由具备三层功能的设备完成。判断标准是:同VLAN同子网用二层转发,不同VLAN/子网需三层转发。实际应用中,可通过抓包工具验证两种转发方式的不同封装特征。原创 2025-06-25 16:22:37 · 114 阅读 · 0 评论 -
路由器处理数据包的步骤(详细)
它收帧(L2),看 MAC 是不是我 → 进入三层逻辑处理。然后查路由表(L3),决定下一跳。最后重新封装帧(L2),发给下一跳设备。原创 2025-06-25 16:06:55 · 79 阅读 · 0 评论 -
三层交换机和路由器的行为对比差别
场景推荐设备理由企业局域网 VLAN 间高速通信三层交换机性能高,线速转发小型办公室/家用接入互联网路由器NAT、防火墙、安全性强企业边界访问控制、防火墙路由器 + 防火墙控制策略更强大核心路由器之间数据中心互联高性能路由器BGP、OSPF 等协议支持。原创 2025-06-25 15:52:43 · 30 阅读 · 0 评论 -
内核是如何实现“剥掉网络协议头,只把应用数据交给 socket 应用程序”的?
Linux内核如何处理网络数据包:当应用程序调用read()读取socket时,内核会从网卡接收数据包,通过协议栈层层解包(Ethernet→IP→TCP),将应用层数据存入socket缓冲区。内核网络协议栈会剥离所有网络层和传输层头部信息,只将纯应用数据复制到用户空间。整个过程体现了内核与应用程序的分工:内核负责底层传输,应用程序只关注数据内容。原创 2025-06-25 15:23:55 · 27 阅读 · 0 评论 -
为什么我 read() 一个 socket,就能直接拿到“用户数据”?为什么 TCP/IP 那些头部(协议细节)不见了?
Socket隐藏了TCP/IP协议的底层细节,让程序员只需关注应用层数据。操作系统内核负责处理报文封装、传输控制等复杂工作(如TCP包头、IP路由等),应用程序通过socket接口只能看到纯数据内容。这种设计实现了网络通信的抽象化,使开发者无需面对协议细节,提高了开发效率和安全性。如需访问底层协议信息,必须使用需要特殊权限的原始套接字(Raw Socket)。典型网络通信中,应用程序通过socket发送/接收的都是剥离了协议头部的净荷数据。原创 2025-06-25 14:57:52 · 27 阅读 · 0 评论 -
为什么在应用程序中,通过 socket 读取数据时,操作系统已经帮我“过滤掉了”底层网络协议的头部,只留下了对端发送的有效内容?
摘要:应用层程序通过socket读取数据时,只能看到处理后的应用层内容(如"USERanonymous\r\n"),而看不到TCP/IP等底层协议头。这是因为操作系统内核的网络协议栈已自动完成各层(物理层至传输层)的数据处理,对应用层隐藏了底层细节。这种分层设计既保证了安全性,又简化了开发。如需查看原始数据包,需使用raw socket或抓包工具。简言之,read(socket_fd)获取的是内核处理后的纯净应用层数据。原创 2025-06-25 14:45:21 · 18 阅读 · 0 评论 -
FTP 主动模式(Active Mode)下的命令交换过程
FTP主动模式(Active Mode)是一种数据传输方式,客户端通过PORT命令告知服务器自己监听的数据端口(如50000),服务器主动连接该端口建立数据通道。适用于客户端有固定IP、非NAT环境的情况。典型连接流程包括:1)客户端连接服务器21端口控制通道;2)发送USER/PASS登录;3)通过PORT命令指定数据端口;4)服务器主动连接该端口传输数据。常见问题包括NAT穿透失败和防火墙拦截。与被动模式(服务器被动等待连接)相反,主动模式要求客户端开放端口供服务器连接,适用于老旧系统等特定场景。测试时原创 2025-06-25 10:54:25 · 160 阅读 · 0 评论 -
FTP 的被动模式(Passive Mode)命令交换过程
FTP被动模式(Passive Mode)详解 被动模式是FTP的数据传输方式,适用于客户端位于防火墙/NAT后的场景。流程如下: 控制连接:客户端通过21端口登录服务器; PASV命令:客户端发送PASV,服务器响应227,含监听IP和随机端口(如192,168,1,100,195,80→端口50000); 数据连接:客户端主动连接指定端口传输数据(如LIST)。 优势:客户端发起数据连接,规避防火墙限制,稳定性高。现代工具(如Python的ftplib)默认启用。实现原理:服务器临时监听数据端口(如Pu原创 2025-06-25 10:42:30 · 481 阅读 · 0 评论 -
一个完整的 C 语言示例程序实现 License 签名+验证
这是一个基于OpenSSL和Jansson库的C语言许可证验证工具,主要功能包括: 支持RSA签名和验证操作 包含机器码绑定功能(通过/etc/machine-id) 具备时间限制校验(YYYY-MM-DD格式) 使用JSON格式存储许可证信息 工具使用流程: 生成RSA密钥对(私钥签名/公钥验证) 创建包含用户、过期时间和机器ID的JSON许可证文件 使用签名功能生成数字签名 验证时检查签名有效性、机器ID匹配和过期时间 编译需链接crypto和jansson库,适用于Linux系统,可根据需要修改机器I原创 2025-06-24 16:56:54 · 217 阅读 · 0 评论 -
C 典型多进程并发服务器模式 —— 父进程接收连接后 fork() 出子进程专门处理该连接。
摘要: 该函数实现了一个FTP服务器的客户端连接处理机制,通过accept()接收连接请求后fork()子进程处理。主要功能包括:1) 校验客户端IP类型;2) 执行最大用户数和单IP连接数限制;3) 使用信号屏蔽保护全局计数变量;4) 父子进程分工明确,子进程处理业务,父进程继续监听。代码展示了UNIX多进程服务器的典型模式,涉及socket编程、进程控制、资源共享(文件描述符)与隔离(内存空间)等核心概念。特别值得注意的是使用_EXIT()安全终止子进程,以及通过iptrack机制实现的连接数控制。原创 2025-06-23 20:05:57 · 33 阅读 · 0 评论 -
经典Linux编程-如何实现守护进程
摘要:本文详细解析了将前台进程守护化的典型实现代码dodaemonize()。该函数通过以下步骤实现守护进程:1)通过fork创建子进程并退出父进程;2)调用setsid创建新会话;3)切换工作目录;4)关闭终端相关文件描述符;5)重定向标准I/O到/dev/null。文章还解释了文件描述符关闭的安全性,并提供了一个TCP守护进程的实践示例,包括systemd服务配置。这种规范化的守护进程流程广泛应用于后台服务程序中。原创 2025-06-18 18:05:32 · 52 阅读 · 0 评论 -
C语言环境变量详解笔记:environ 的全面理解与应用
摘要 environ是一个存储环境变量的全局指针数组,每个元素为"KEY=value"字符串。它与main()的envp参数通常指向同一内存区域。环境变量可通过getenv()/setenv()等函数安全读写,直接修改environ可能造成内存问题。在进程创建时,environ会通过execve()传递给子进程。修改进程名时需要先备份environ,因为其可能与argv共享内存。高级应用中可将环境变量复制到连续内存以提高效率。核心要点包括:理解environ结构、掌握安全操作方法、注意进原创 2025-06-18 16:02:39 · 52 阅读 · 0 评论 -
详解C 插件设计思想
插件设计= 核心系统 + 插件接口(规范)+ 动态加载实现} Plugin;} Plugin;#endif优点说明模块化/插件化各认证方式独立实现,互不影响灵活切换只需注册不同的实例条件编译适配多环境#ifdef控制支持的认证方式清晰职责分离parse负责初始化,check负责验证,exit负责释放资源增强扩展性添加新的认证方式只需实现三个函数,注册到auth_list即可。原创 2025-06-14 17:10:14 · 48 阅读 · 0 评论 -
C设计理念:一个用于构造和发送客户端响应的缓冲区输出机制
摘要:本文分析了一个用于客户端响应的缓冲区输出机制源码,该机制通过缓冲优化服务器发送文本协议的性能和可靠性。核心组件包括缓冲区初始化、刷新缓冲和格式化输出三个函数,设计上降低了系统调用频率,提高了吞吐量,并严格检查边界防止溢出。文章还讨论了该设计在多线程环境下的锁机制建议,并举例说明了实际调用接口的使用方式。该缓冲输出机制体现了性能与正确性的平衡,适用于网络服务等场景。原创 2025-06-14 14:46:03 · 164 阅读 · 0 评论 -
pure-ftpd 下载编译
如果系统日志中没有日志或不方便查看,也可使用 pure-ftpd 的日志选项重定向日志到文件。该命令会清理之前的编译缓存和自动生成文件,确保干净的编译环境。查看本机是否已有 FTP 服务监听 21 端口,避免端口冲突。配置为最小版本,减少依赖,便于调试和移植。确认以 root 或有足够权限的用户运行。防止和 pure-ftpd 端口冲突。:调试模式,日志输出到终端方便查看。脚本,保证自动化配置的正确性。确认防火墙策略允许监听端口。修改监听端口或检查监听地址。确认是否以调试模式启动。没有找到定义它的宏。原创 2025-06-13 09:21:12 · 505 阅读 · 0 评论 -
C 信号处理典型用法
摘要:本文解析了Linux进程信号处理的实现机制,重点介绍了set_signals()函数如何配置进程对不同信号的响应方式。该函数通过sigaction设置信号处理策略,包括:1)自定义处理SIGCHLD/SIGTERM等关键信号;2)忽略SIGPIPE等干扰信号;3)通过sigprocmask屏蔽未处理的信号。文中详细说明了信号处理函数sigchild()如何优雅回收子进程资源,以及sigterm()如何实现服务平滑终止。这些机制是构建高可靠性守护进程和服务程序的基础,能有效防止僵尸进程、资源泄露等问题,原创 2025-06-12 19:36:12 · 236 阅读 · 0 评论 -
交换机嵌入式 Linux 系统中的动态链接库
本文介绍了Linux系统中的.so共享对象文件(类似Windows的.dll)。.so文件分为标准库、驱动适配库、业务功能库等类型,存储在/usr/lib目录,具有模块化、内存共享和平台抽象的优势。它们通过动态链接在程序运行时加载,如CLI命令执行时会链式调用多个.so库(解析→业务→驱动)。这种机制实现了功能模块热更新、多进程共享和跨平台支持,是嵌入式系统的重要设计特点。原创 2025-06-12 14:14:13 · 84 阅读 · 0 评论 -
面向交换机系统的 Pure-FTPd 集成指南
嵌入式交换机运行一个基于 Linux 的定制操作系统(如 Buildroot、Yocto、自研 Linux)系统通常由如下模块构成:内核(Linux Kernel)根文件系统(RootFS)Bootloader(如 U-Boot)自研系统守护进程和网络协议栈第三方组件(如 FTP、SSH、WebUI)步骤动作①拷贝源码至②使用configure和交叉编译生成pure-ftpd③在Makefile中加入install规则,打入 image④编写 CLI 接口控制 FTP 启动/停止。原创 2025-06-12 14:09:22 · 43 阅读 · 0 评论 -
vsftpd 嵌入式移植全流程教程
《嵌入式Linux系统移植vsftpd详细指南》摘要:本文详细介绍如何在嵌入式Linux设备上移植vsftpd FTP服务器。从获取源码、配置交叉编译工具链,到修改Makefile实现静态编译,重点讲解了功能裁剪方法(关闭PAM/SSL等非必要模块)。提供最小化配置文件示例,说明关键参数设置和启动/测试流程。适用于OpenWRT、定制板等无包管理器的嵌入式环境,帮助开发者在资源受限设备上构建轻量级FTP服务。包含编译参数调整、权限配置等实用技巧,确保移植后的vsftpd稳定运行。(150字)原创 2025-06-12 08:59:34 · 105 阅读 · 0 评论 -
怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)
摘要:对象池是一种高效管理资源的设计模式,通过预分配对象数组(operEntryTbl[])实现。系统包含四个核心组件:空闲链表(operFreeTbl)初始包含所有对象,使用中的对象存入AVL树(operUsedTbl)实现O(logN)检索,待更新对象加入队列(operUpdateTbl)。对象生命周期包含:分配时从空闲链表移除并插入AVL树,修改时加入更新队列,回收时返回空闲链表。这种模式适用于VRRP、网络连接池等高并发场景,有效减少内存分配开销和碎片,实现资源复用。关键优势在于通过组件分工实现高效原创 2025-06-09 19:24:28 · 111 阅读 · 0 评论 -
设计 IGMP Report/Leave 报文抑制的状态机模型
摘要 本文提出了IGMP报文抑制状态机的设计方案,通过状态机机制有效管理组播组成员加入/离开事件,避免重复转发Report和Leave报文。状态机包含NO_MEMBER、MEMBER_PRESENT、SUPPRESS_REPORT和SUPPRESS_LEAVE四种状态,通过定时器控制10秒抑制期。针对定时器管理问题,建议采用统一软件定时器管理器,通过定时器池、状态标志保护、延时重启机制和软定时器等技术,解决嵌入式网络设备中频繁开关定时器导致的资源竞争问题。文中还提供了状态机伪代码和定时器管理器的具体实现方案原创 2025-06-09 18:02:51 · 94 阅读 · 0 评论 -
开发一个配置文件模块比较功能(附带源码)
增加show running-config compare命令来确认当前配置与start-config的区别原创 2025-06-03 20:04:36 · 42 阅读 · 0 评论 -
怎么开发一个网络协议模块(C语言框架)之(五) ——通用对象池 + 活跃集管理模式
这段代码展示了VRRP协议实现中的内存管理机制:使用calloc预分配对象池(operEntryTbl数组)来避免运行时频繁内存分配,通过三种数据结构协同管理——空闲链表(operFreeTbl)维护可用对象,AVL树(operUsedTbl)提供高效查找(O(logn)),更新链表(operUpdateTbl)处理状态变更。设计采用双重索引(链表+AVL)兼顾遍历和查询效率,初始化时所有对象加入空闲链表,使用时通过节点转移实现动态复用。关键点包括:比较函数需保证AVL键值唯一性、操作需线程安全、需规范释放原创 2025-05-28 23:03:24 · 58 阅读 · 0 评论 -
为什么指针类型成员可以像数组一样用 [] 操作
本文解答了指针类型成员operEntryTbl可以像数组一样使用[]操作访问.node成员的原因。关键点如下: VrrpOperEntry_t* operEntryTbl是指针而非数组 通过malloc分配内存后,指针可以用下标访问元素:ptr[i]等价于*(ptr+i) 访问结构体成员语法合法:operEntryTbl[i].node 前提是必须确保指针已分配连续内存 这种用法在C语言中是合法的,但需要注意在访问前正确分配内存,否则会出现未定义行为。原创 2025-05-28 22:34:27 · 48 阅读 · 0 评论 -
画图解释avl_create() 中使用 offsetof()
在中使用是为了告诉 AVL 树:每个元素中,哪个字段(偏移量)用作树节点的连接结构。这句的作用是:计算MEMBER字段在TYPE类型中从结构体起始地址开始的偏移量(以字节为单位)。假设node是结构体的第32个字节起始位置,那么这个宏就返回32。结构体插树有技巧,node字段做记号;offsetof偏移量,告诉AVL它在哪。原创 2025-05-28 19:46:20 · 124 阅读 · 0 评论