CN116340111A - 一种Linux套接字监听事件监控方法及装置 - Google Patents

一种Linux套接字监听事件监控方法及装置 Download PDF

Info

Publication number
CN116340111A
CN116340111A CN202310571155.XA CN202310571155A CN116340111A CN 116340111 A CN116340111 A CN 116340111A CN 202310571155 A CN202310571155 A CN 202310571155A CN 116340111 A CN116340111 A CN 116340111A
Authority
CN
China
Prior art keywords
monitoring
socket
event
sys
list function
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202310571155.XA
Other languages
English (en)
Inventor
罗浩然
朱文雷
李昌志
刘超
刘金钊
赖博阳
主洪尚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Chaitin Tech Co ltd
Original Assignee
Beijing Chaitin Tech Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Chaitin Tech Co ltd filed Critical Beijing Chaitin Tech Co ltd
Priority to CN202310571155.XA priority Critical patent/CN116340111A/zh
Publication of CN116340111A publication Critical patent/CN116340111A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3013Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system is an embedded system, i.e. a combination of hardware and software dedicated to perform a certain function in mobile devices, printers, automotive or aircraft systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3055Monitoring arrangements for monitoring the status of the computing system or of the computing system component, e.g. monitoring if the computing system is on, off, available, not available
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D30/00Reducing energy consumption in communication networks
    • Y02D30/70Reducing energy consumption in communication networks in wireless communication networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请实施例提供了一种Linux套接字监听事件监控方法及装置,通过加载监听Kprobe跟踪点至Linux系统的sys_listen函数和/或_sys_listen函数入口处;以在Linux系统调用执行到所述sys_listen函数和/或所述_sys_listen函数入口处时,触发所述监听Kprobe跟踪点采集传入所述sys_listen函数和/或所述_sys_listen函数内的监听事件数据;然后基于所述监听事件数据创建监听事件,能够解决目前存在的套接字监听事件监控方法存在着监控范围小、耗费资源大、支持内核版本低等问题,实现了在较小的资源消耗情况下,能够对所有套接字监听事件进行监控,并且能够适用于低版本Linux内核。

Description

一种Linux套接字监听事件监控方法及装置
技术领域
本申请各实施例属计算机技术领域,尤其涉及一种Linux套接字监听事件监控方法及装置。
背景技术
套接字(Socket)就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口。
对于服务器编程中最重要的一步等待并接受客户的连接,即需要进行套接字监听,现有的套接字监听事件监控方法存在着监控范围小、耗费资源大、支持Linux内核版本低等问题。
发明内容
本实施例提供了一种Linux套接字监听事件监控方法及装置,能够解决现有的套接字监听事件监控方法存在着监控范围小、耗费系统资源大、支持内核版本低等问题。
第一方面,本实施例提供了一种Linux套接字监听事件监控方法,包括:
加载监听Kprobe跟踪点至Linux系统的sys_listen函数和/或_sys_listen函数入口处;
在Linux系统调用执行到所述sys_listen函数和/或所述_sys_listen函数入口处时,触发所述监听Kprobe跟踪点采集传入所述sys_listen函数和/或所述_sys_listen函数内的监听事件数据;
基于所述监听事件数据创建监听事件。
在一些实施例中,所述监听事件数据包括套接字文件描述符、进程描述符、事件时间戳及后备队列长度中的至少一项。
在一些实施例中,所述Linux套接字监听事件监控方法,还包括:加载地址Kprobe跟踪点至Linux系统的inet_listen函数入口处;在Linux系统调用执行到所述inet_listen函数入口处时,触发所述地址Kprobe跟踪点采集传入所述inet_listen函数内的网络层数据;对所述网络层数据进行过滤,得到目标套接字地址;将所述目标套接字地址填充至所述监听事件内,得到地址监听事件。
在一些实施例中,所述网络层数据包括套接字地址族、套接字状态、及套接字地址,所述目标套接字地址包括目标ipv4套接字地址和目标ipv6套接字地址;所述对所述网络层数据进行过滤,得到目标套接字地址,包括:设置状态过滤条件及地址族过滤条件;基于所述状态过滤条件从所述套接字状态中过滤出被动打开状态套接字;基于所述地址族过滤条件从所述被动打开状态套接字数据中过滤出目标ipv4套接字地址和/或目标ipv6套接字地址,得到所述目标套接字地址。
在一些实施例中,所述Linux套接字监听事件监控方法,还包括:加载状态Kprobe跟踪点至Linux系统的sys_listen函数和/或_sys_listen函数出口处;在Linux系统调用执行到所述sys_listen函数和/或所述_sys_listen函数出口处时,触发所述状态Kprobe跟踪点采集执行所述sys_listen函数和/或所述_sys_listen函数后的返回值;将所述返回值填充至所述地址监听事件内,得到状态监听事件。
在一些实施例中,所述Linux套接字监听事件监控方法,还包括:将所述事件时间戳设置为所述状态监听事件的时间戳,得到套接字监听事件。
在一些实施例中,所述基于所述监听事件数据创建监听事件,包括:将所述监听事件数据写入循环缓冲,并将所述监听事件依据时间依次排序;通过监控进程读取写入所述循环缓冲的所述监听事件数据;在所述监控进程内,基于所述监听事件数据创建所述监听事件。
在一些实施例中,所述Linux套接字监听事件监控方法,还包括:通过所述监控进程将所述套接字监听事件通知响应进程。
第二方面,本实施例提供了一种Linux套接字监听事件监控装置,包括:
跟踪加载模块,用于加载监听Kprobe跟踪点至Linux系统的sys_listen函数和/或_sys_listen函数入口处;
信息获取模块,用于在Linux系统调用执行到所述sys_listen函数和/或所述_sys_listen函数入口处时,触发所述监听Kprobe跟踪点采集传入所述sys_listen函数和/或所述_sys_listen函数内的监听事件数据;以及
事件创建模块,用于基于所述监听事件数据创建监听事件。
第三方面,本实施例提供了一种电子设备,包括处理器和存储器;
所述处理器通过调用所述存储器存储的程序或指令,用于执行如第一方面中任一实施例所述方法的步骤。
本申请提供了一种Linux套接字监听事件监控方法及装置,通过加载监听Kprobe跟踪点至Linux系统的sys_listen函数和/或_sys_listen函数入口处;以在Linux系统调用执行到所述sys_listen函数和/或所述_sys_listen函数入口处时,触发所述监听Kprobe跟踪点采集传入所述sys_listen函数和/或所述_sys_listen函数内的监听事件数据;然后基于所述监听事件数据创建监听事件,能够解决目前存在的套接字监听事件监控方法存在着监控范围小、耗费资源大、支持内核版本低等问题,实现了在较小的资源消耗情况下,能够对所有套接字监听事件进行监控,并且能够适用于低版本Linux内核。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。后文将参照附图以示例性而非限制性的方式详细描述本申请的一些具体实施例。附图中相同的附图标记标示了相同或类似的部件或部分,本领域技术人员应该理解的是,这些附图未必是按比例绘制的,在附图中:
图1为本说明书实施例提供的一种Linux套接字监听事件监控方法的流程图;
图2为本说明书实施例提供的一种Linux套接字监听事件监控装置的示意图;
图3为本说明书实施例提供的一种电子设备示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
Socket(套接字)可以看成是两个网络应用程序进行通信时,各自通信连接中的端点。它是网络环境中进程间通信的API(应用程序编程接口),也是可以被命名和寻址的通信端点,使用中的每一个套接字都有其类型和一个与之相连进程。通信时其中一个网络应用程序将要传输的一段信息写入它所在主机的 Socket中,该 Socket通过与网络接口卡(NIC)相连的传输介质将这段信息送到另外一台主机的 Socket中,使对方能够接收到这段信息。
要通过互联网进行通信,至少需要一对套接字,其中一个运行于客户端,称之为Client Socket,另一个运行于服务器端,称之为Server Socket 。根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:1)服务器监听;2)客户端请求;3)连接确认;其中,服务器监听步骤中主要是套接字监听,通过套接字监听使服务器端等待、接受客户的连接请求。
目前 Linux操作系统上的套接字监听事件监控方法及问题为:
方法一、基于 LD_PRELOAD 进行 DLL注入,在libc的connect、bind、listen等套接字API上挂载 hook,采集进程的套接字事件数据,并通过跨进程通信的方式传回监控进程;方法一存在的问题:基于 LD_PRELOAD进行 DLL注入,需要修改Linux系统的LD_PRELOAD 配置,并且要求待监控程序不能以静态链接的方式连接libc,而且不能注入已经启动的进程,Linux容器(如 Docker)内的进程往往使用容器内的LD_PRELOAD配置,因此也不能被监控,且配置难度大;
方法二、基于ptrace函数挂载进程,在套接字的connect、bind、listen 等相关系统调用上设置断点,采集进程的系统调用参数并转化为套接字事件数据;方法二存在的问题:基于ptrace函数挂载进程,每次执行到套接字相关系统调用都需要切换到监控进程以执行数据采集代码,并在不同进程地址空间内拷贝数据,耗费计算资源,会引起严重的性能问题;
方法三、编写跟踪套接字活动的eBPF(Extended Berkeley Packet Filter,扩展的伯克利包过滤器)程序,在内核挂载跟踪点并采集套接字相关数据,监控进程通过eBPFMap 读取内核记录的数据;方法三存在的问题:编写跟踪套接字事件的eBPF(ExtendedBerkeley Packet Filter)程序只能在较高内核版本(>=4.1)的 Linux系统中使用,而目前大量生产环境中运行的 Linux系统,内核版本均不符合该要求。
针对上述技术问题,第一方面,如图1所示,本实施例提供了一种Linux套接字监听事件监控方法,包括:
S101:加载监听Kprobe跟踪点至Linux系统的sys_listen函数和/或_sys_listen函数入口处;
需要说明的是,Linux基于 Unix的“一切皆文件”的原则,将一些进程可访问的对象抽象为文件,进程通过指定文件描述符(FileDescriptor,简称为FD)发起系统调用的方式操作这些对象。而套接字属于Linux下被抽象为文件的对象,进程可以通过socket系统调用来创建一个套接字,在创建一个套接字连接之前,Linux系统通过listen系统调用来进行套接字监听,以接收远程连接。
需要说明的是,在远程/用户进程创建一个套接字连接前,需要进行bind系统调用,bind系统调用会将一个地址与socket关联,函数原型为:int bind(int sockfd, conststruct sockaddr *addr, socklen_taddrlen);其中,sockfd为套接字的文件描述符,addr指向存放地址信息的结构体的首地址,addrlen是这个结构体的大小,并指定套接字监听时的本地地址。根据套接字将要监听地址的网络层协议,当网络层协议为IPv4 时,bind系统调用会执行到inet_bind函数,inet_bind函数将套接字的sk.skc_rcv_saddr字段设为将要监听的IPv4地址,将套接字的sk.skc_num设为将要监听的端口号;当网络层协议为IPv6时,bind系统调用会执行到inet6_bind函数,inet6_bind 函数将套接字的sk.skc_v6_rcv_saddr字段设为将要监听的 IPv6 地址,将套接字的sk.skc_num设为将要监听的端口号。用户进程会通过 listen系统调用,指定套接字监听时的后备队列长度,并将套接字的TCP状态机置入被动打开状态。根据内核版本的不同,listen系统调用会执行到sys_listen函数或_sys_listen函数,并传入用户进程所操作的套接字文件描述符、进程描述符及后备队列长度。故可在所述sys_listen函数和/或所述_sys_listen函数入口加载所述监听Kprobe跟踪点,以采集信息。
S102:在Linux系统调用执行到所述sys_listen函数和/或所述_sys_listen函数入口处时,触发所述监听Kprobe跟踪点采集传入所述sys_listen函数和/或所述_sys_listen函数内的监听事件数据;
需要说明的是,在将所述监听Kprobe跟踪点加载到所述sys_listen函数和/或所述_sys_listen函数入口处时,通常需在所述sys_listen函数和/或所述_sys_listen函数入口处设置中断指令,以便执行所述监听Kprobe跟踪点进行采集数据,并在采集数据完成后继续向后执行。
在一些实施例中,所述监听事件数据包括套接字文件描述符、进程描述符、事件时间戳及后备队列长度中的至少一项。
在一些实施例中,所述Linux套接字监听事件监控方法,还包括:加载地址Kprobe跟踪点至Linux系统的inet_listen函数入口处;在Linux系统调用执行到所述inet_listen函数入口处时,触发所述地址Kprobe跟踪点采集传入所述inet_listen函数内的网络层数据;对所述网络层数据进行过滤,得到目标套接字地址,将所述目标套接字地址填充至所述监听事件内,得到地址监听事件。
需要说明的是,所述后备队列长度可以根据需要自行设定、也可采用系统默认的设定。所述sys_listen函数和/或所述_sys_listen函数会依据文件描述符取出对应的文件和套接字对象,并执行inet_listen函数,所述inet_listen函数会设置套接字的TCP状态机的状态,通常将所述套接字的TCP状态机的状态设置为listen(被动打开状态)状态或close(关闭状态)状态。
需要说明的是,本实施例所述套接字使用了传输控制协议,即TCP(TheTransmission Control Protocol)协议,也被称为流套接字,流套接字能够将保证数据能够实现无差错、无重复传送,并按顺序接收。
在一些实施例中,所述网络层数据包括套接字地址族、套接字状态、及套接字地址,所述目标套接字地址包括目标ipv4套接字地址和目标ipv6套接字地址;所述对所述网络层数据进行过滤,得到目标套接字地址,包括:设置状态过滤条件及地址族过滤条件;基于所述状态过滤条件从所述套接字状态中过滤出被动打开状态套接字;基于所述地址族过滤条件从所述被动打开状态套接字数据中过滤出目标ipv4套接字地址和/或目标ipv6套接字地址,得到所述目标套接字地址。
需要说明的是,通常通过所述地址Kprobe跟踪点采集所述inet_listen函数上下文的套接字地址族(socket.sk.skc_family)、套接字状态(socket.sk.skc_state)、及套接字地址,所述套接字地址包括套接字IP地址和端口号,在采集到上述网络层数据后,设置过滤条件筛选出目标套接字地址。
需要说明的是,根据套接字地址族的不同,地址族过滤条件也不相同,ipv4地址族过滤条件为:socket.sk.skc_family == AF_INET;ipv6地址族过滤条件为:socket.sk.skc_family == AF_INET6,所述状态过滤条件为:socket.sk.skc_state !=TCP_LISTEN。通过所述地址族过滤条件及所述状态过滤条件可以过滤出所述目标ipv4地址及所述目标ipv6地址(在bind系统调用时指定了要监控的ipv4地址、ipv6地址),且所述目标ipv4地址及所述目标ipv6地址均为将切换至被动打开状态(listen状态,为TCP状态机中的一种状态),当服务器端套接字处于被动打开状态时会侦听来自远方TCP端口的连接请求,以便后续与远方TCP端口建立连接。
需要说明的是,针对需要采集信息的地址族的不同,可分别设置不同的地址kprobe跟踪点,即ipv4地址kprobe跟踪点、ipv6地址kprobe跟踪点,所述ipv4地址kprobe跟踪点用于采集、过滤ipv4的网络层数据,所述ipv6地址kprobe跟踪点用于采集、过滤ipv6的网络层数据。
在一些实施例中,所述Linux套接字监听事件监控方法,还包括:加载状态Kprobe跟踪点至Linux系统的sys_listen函数和/或_sys_listen函数出口处;在Linux系统调用执行到所述sys_listen函数和/或所述_sys_listen函数出口处时,触发所述状态Kprobe跟踪点采集执行所述sys_listen函数和/或所述_sys_listen函数后的返回值;将所述返回值填充至所述地址监听事件内,得到状态监听事件。
在一些实施例中,所述Linux套接字监听事件监控方法,还包括:将所述事件时间戳设置为所述状态监听事件的时间戳,得到套接字监听事件。
需要说明的是,为了对套接字监听事件进行完整的监控,还需获取远程进程进行套接字操作的结果,如监听成功、监听失败等信息,因套接字的监听结果是在执行所述sys_listen函数和/或所述_sys_listen函数后才会生成,故需在所述sys_listen函数和/或所述_sys_listen函数出口处设置状态Kprobe跟踪点,以采集进行套接字操作的状态,通常返回值(errno)有多种情况,如errno: 0表示Success;errno: 1表示Operation notpermittederrno: 2 表示No such file or directoryerrno: 3 表示No such process;errno: 4 表示Interrupted system call;errno: 5 表示Input/output error等。
需要说明的是,通过采集所述sys_listen函数和/或所述_sys_listen函数的返回值(errno),并将所述返回值填充至所述地址监听事件内,能够了解监听事件的操作状态信息,以便进行后续的分析处理。
S103:基于所述监听事件数据创建监听事件。
在一些实施例中,所述基于所述监听事件数据创建监听事件,包括:将所述监听事件数据写入循环缓冲,并将所述监听事件依据时间依次排序;通过监控进程读取写入所述循环缓冲的所述监听事件数据;在所述监控进程内,基于所述监听事件数据创建所述监听事件。
需要说明的是,在获取到所述监听事件数据后,可直接创建所述监听事件;获取到所述目标套接字地址后将其填充到所述监听事件的网络层地址中,形成所述地址监听事件;获取到所述返回值后,将所述返回值填充至所述地址监听事件内,得到所述状态监听事件;也可分别将所述监听事件数据、所述目标套接字地址及所述返回值发送至监控进程,并在监控进程内创建/形成监听事件、地址监听事件、状态监听事件以及套接字监听事件。
需要说明的是,可单独编写程序对所述连接事件进行排序,也可通过Linuxtracing子系统对写入所述循环缓冲的数据进行读取,并对所述监听事件进行排序,然后通过监控进程循环读取所述监听事件,此时监控进程读取的事件是已按时间顺序排序完成的事件。
需要说明的是,监控进程可通过循环读取tracefs文件系统的trace_pipe特殊文件获取当前已经采集到的数据或等待时间可读数据,监控进程从循环缓冲中读取到的事件/数据,可派发给对应的事件处理函数进行处理。
在一些实施例中,所述Linux套接字监听事件监控方法,还包括:通过所述监控进程将所述套接字监听事件通知响应进程。
需要说明的是,监控进行可对采集/生成的监听事件(监听事件、地址监听事件、状态监听事件、套接字监听事件)进行分析,将所述监听事件发送至响应进程,响应进程依据其自身功能和需求对套接字监听事件进行分析和处理,并执行处置和告警等动作。
综上所述,本实施例提供了一种Linux套接字监听事件监控方法,通过加载监听Kprobe跟踪点至Linux系统的sys_listen函数和/或_sys_listen函数入口处;以在Linux系统调用执行到所述sys_listen函数和/或所述_sys_listen函数入口处时,触发所述监听Kprobe跟踪点采集传入所述sys_listen函数和/或所述_sys_listen函数内的监听事件数据;然后基于所述监听事件数据创建监听事件,能够解决目前存在的套接字监听事件监控方法存在着监控范围小、耗费系统资源大、支持内核版本低等问题,实现了在较小的资源消耗情况下,能够对所有套接字监听事件进行监控,并且能够适用于低版本Linux内核。
需要说明的是,针对现有技术中存在的问题,本实施例的技术方案实现了:1)、能够应用于最低 Linux内核版本(2.6.32的 Linux发行版上),普遍适用于目前国内企业的IT基础设施的网络安全能力建设需求;2)、对网络性能影响较小(通过wrk等网络性能测试工具对使用了本技术的环境进行压力测试和性能测试,测得使用本技术后对网络吞吐量的影响在2% 以内);3)、启用和停用本实施例的方法无需重启系统/修改系统配置,并且可以随时开始和停止监控;4)、能应用于 Linux容器场景,监控容器内的套接监听相关事件。
第二方面,如图2所示,本实施例提供了一种Linux套接字监听事件监控装置,包括:
跟踪加载模块210,用于加载监听Kprobe跟踪点至Linux系统的sys_listen函数和/或_sys_listen函数入口处;
信息获取模块220,用于在Linux系统调用执行到所述sys_listen函数和/或所述_sys_listen函数入口处时,触发所述监听Kprobe跟踪点采集传入所述sys_listen函数和/或所述_sys_listen函数内的监听事件数据;以及
事件创建模块230,用于基于所述监听事件数据创建监听事件。
在一些实施例中,所述监听事件数据包括套接字文件描述符、进程描述符、事件时间戳及后备队列长度中的至少一项。
在一些实施例中,所述信息获取模块220还用于加载地址Kprobe跟踪点至Linux系统的inet_listen函数入口处;在Linux系统调用执行到所述inet_listen函数入口处时,触发所述地址Kprobe跟踪点采集传入所述inet_listen函数内的网络层数据;对所述网络层数据进行过滤,得到目标套接字地址;将所述目标套接字地址填充至所述监听事件内,得到地址监听事件。
在一些实施例中,所述网络层数据包括套接字地址族、套接字状态、及套接字地址,所述目标套接字地址包括目标ipv4套接字地址和目标ipv6套接字地址;所述对所述网络层数据进行过滤,得到目标套接字地址,包括:设置状态过滤条件及地址族过滤条件;基于所述状态过滤条件从所述套接字状态中过滤出被动打开状态套接字;基于所述地址族过滤条件从所述被动打开状态套接字数据中过滤出目标ipv4套接字地址和/或目标ipv6套接字地址,得到所述目标套接字地址。
在一些实施例中,所述信息获取模块220还用于加载状态Kprobe跟踪点至Linux系统的sys_listen函数和/或_sys_listen函数出口处;在Linux系统调用执行到所述sys_listen函数和/或所述_sys_listen函数出口处时,触发所述状态Kprobe跟踪点采集执行所述sys_listen函数和/或所述_sys_listen函数后的返回值;将所述返回值填充至所述地址监听事件内,得到状态监听事件。
在一些实施例中,所述信息获取模块220还用于将所述事件时间戳设置为所述状态监听事件的时间戳,得到套接字监听事件。
在一些实施例中,所述基于所述监听事件数据创建监听事件,包括:将所述监听事件数据写入循环缓冲,并将所述监听事件依据时间依次排序;通过监控进程读取写入所述循环缓冲的所述监听事件数据;在所述监控进程内,基于所述监听事件数据创建所述监听事件。
在一些实施例中,所述事件创建模块230还用于通过所述监控进程将所述套接字监听事件通知响应进程。
第三方面,如图3所示,本实施例提供了一种电子设备300,包括处理器320和存储器310;
所述处理器320通过调用所述存储器310存储的程序或指令,用于执行如第一方面中任一实施例所述方法的步骤。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

Claims (10)

1.一种Linux套接字监听事件监控方法,其特征在于,包括:
加载监听Kprobe跟踪点至Linux系统的sys_listen函数和/或_sys_listen函数入口处;
在Linux系统调用执行到所述sys_listen函数和/或所述_sys_listen函数入口处时,触发所述监听Kprobe跟踪点采集传入所述sys_listen函数和/或所述_sys_listen函数内的监听事件数据;
基于所述监听事件数据创建监听事件。
2.根据权利要求1所述的Linux套接字监听事件监控方法,其特征在于,所述监听事件数据包括套接字文件描述符、进程描述符、事件时间戳及后备队列长度中的至少一项。
3.根据权利要求2所述的Linux套接字监听事件监控方法,其特征在于,还包括:
加载地址Kprobe跟踪点至Linux系统的inet_listen函数入口处;
在Linux系统调用执行到所述inet_listen函数入口处时,触发所述地址Kprobe跟踪点采集传入所述inet_listen函数内的网络层数据;
对所述网络层数据进行过滤,得到目标套接字地址;
将所述目标套接字地址填充至所述监听事件内,得到地址监听事件。
4.根据权利要求3所述的Linux套接字监听事件监控方法,其特征在于,所述网络层数据包括套接字地址族、套接字状态及套接字地址,所述目标套接字地址包括目标ipv4套接字地址和目标ipv6套接字地址;
所述对所述网络层数据进行过滤,得到目标套接字地址,包括:
设置状态过滤条件及地址族过滤条件;
基于所述状态过滤条件从所述网络层数据中过滤出被动打开状态套接字数据;
基于所述地址族过滤条件从所述被动打开状态套接字数据中过滤出目标ipv4套接字地址和/或目标ipv6套接字地址,得到所述目标套接字地址。
5.根据权利要求4所述的Linux套接字监听事件监控方法,其特征在于,还包括:
加载状态Kprobe跟踪点至Linux系统的sys_listen函数和/或_sys_listen函数出口处;
在Linux系统调用执行到所述sys_listen函数和/或所述_sys_listen函数出口处时,触发所述状态Kprobe跟踪点采集执行所述sys_listen函数和/或所述_sys_listen函数后的返回值;
将所述返回值填充至所述地址监听事件内,得到状态监听事件。
6.根据权利要求5所述的Linux套接字监听事件监控方法,其特征在于,还包括:
将所述事件时间戳设置为所述状态监听事件的时间戳,得到套接字监听事件。
7.根据权利要求1-6中任一项所述的Linux套接字监听事件监控方法,其特征在于,所述基于所述监听事件数据创建监听事件,包括:
将所述监听事件数据写入循环缓冲,并将所述监听事件依据时间依次排序;
通过监控进程读取写入所述循环缓冲的所述监听事件数据;
在所述监控进程内,基于所述监听事件数据创建所述监听事件。
8.根据权利要求7所述的Linux套接字监听事件监控方法,其特征在于,还包括:
通过所述监控进程将所述套接字监听事件通知响应进程。
9.一种Linux套接字监听事件监控装置,其特征在于,包括:
跟踪加载模块,用于加载监听Kprobe跟踪点至Linux系统的sys_listen函数和/或_sys_listen函数入口处;
信息获取模块,用于在Linux系统调用执行到所述sys_listen函数和/或所述_sys_listen函数入口处时,触发所述监听Kprobe跟踪点采集传入所述sys_listen函数和/或所述_sys_listen函数内的监听事件数据;以及
事件创建模块,用于基于所述监听事件数据创建监听事件。
10.一种电子设备,其特征在于,包括:
处理器和存储器;
所述处理器通过调用所述存储器存储的程序或指令,用于执行如权利要求1至8中任一项所述方法的步骤。
CN202310571155.XA 2023-05-20 2023-05-20 一种Linux套接字监听事件监控方法及装置 Pending CN116340111A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310571155.XA CN116340111A (zh) 2023-05-20 2023-05-20 一种Linux套接字监听事件监控方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310571155.XA CN116340111A (zh) 2023-05-20 2023-05-20 一种Linux套接字监听事件监控方法及装置

Publications (1)

Publication Number Publication Date
CN116340111A true CN116340111A (zh) 2023-06-27

Family

ID=86877402

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310571155.XA Pending CN116340111A (zh) 2023-05-20 2023-05-20 一种Linux套接字监听事件监控方法及装置

Country Status (1)

Country Link
CN (1) CN116340111A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118214786A (zh) * 2024-05-21 2024-06-18 国网信息通信产业集团有限公司 高并发多协议通信方法、装置、电子设备及存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11070573B1 (en) * 2018-11-30 2021-07-20 Capsule8, Inc. Process tree and tags

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11070573B1 (en) * 2018-11-30 2021-07-20 Capsule8, Inc. Process tree and tags

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
BRANDON EDWARDS, NICK GREGORY: "Using Linux Tracing for Security", pages 1 - 44, Retrieved from the Internet <URL:https://nickgregory.me/files/talks/csaw-c2-2019/CSAW-C2-2019-Using-Linux-Tracing-for-Security.pdf&ved=2ahUKEwjhxJ7UuuD_AhVMNt4KHS8TBUIQFnoECAwQAQ&usg=AOvVaw2lR1YLHse_08vZfhG83mHb> *
JINRONGLIANG: "eBPF学习——抓取内核网络中的socket信息", pages 1 - 4, Retrieved from the Internet <URL:https://blog.csdn.net/qq_34258344/article/details/106455306> *
VISLEE: "由bpf跟踪socket套件字内核栈调用", pages 1 - 31, Retrieved from the Internet <URL:https://github.com/vislee/leevis.com/issues/189> *
崔大权, 张景学, 王圣: "利用远程纠错跟踪Linux TCP/IP内核源代码", 沈阳师范学院学报(自然科学版), no. 02 *
江爱珍;: "Linux环境下的嵌入式系统网络编程应用", 电脑知识与技术, no. 15 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118214786A (zh) * 2024-05-21 2024-06-18 国网信息通信产业集团有限公司 高并发多协议通信方法、装置、电子设备及存储介质

Similar Documents

Publication Publication Date Title
Cheriton et al. VMTP as the transport layer for high-performance distributed systems
TWI453604B (zh) 在一或多個虛擬機器中產生應用層級相依性的系統與方法
US9158649B2 (en) Methods and computer program products for generating a model of network application health
US8402443B2 (en) Method and system for automated analysis of the performance of remote method invocations in multi-tier applications using bytecode instrumentation
US7954011B2 (en) Enabling tracing operations in clusters of servers
US9389936B2 (en) Monitoring the responsiveness of a user interface
US6584491B1 (en) Arrangement for monitoring a progress of a message flowing through a distributed multiprocess system
CN112256542B (zh) 基于eBPF的微服务系统性能检测方法、装置和系统
US6836881B2 (en) Remote tracing of data processing nodes in an asynchronous messaging network
US12034604B2 (en) MQTT protocol simulation method and simulation device
US20160124832A1 (en) Monitoring and correlating a binary process in a distributed business transaction
CN114363144B (zh) 一种面向分布式系统的故障信息关联上报方法及相关设备
WO2023046141A1 (zh) 一种数据库网络负载性能的加速框架、加速方法及设备
CN116340111A (zh) 一种Linux套接字监听事件监控方法及装置
US20170126580A1 (en) Tracking Contention in a Distributed Business Transaction
WO2024125106A1 (zh) 数据传输方法、装置、设备及存储介质
CN111752728B (zh) 消息传输方法及装置
CN113760562A (zh) 链路追踪方法、装置、系统、服务器和存储介质
EP3010194B1 (en) Method of tracing a transaction in a network
CN116302850B (zh) 一种Linux套接字连接事件监控方法及装置
CN116302849B (zh) 一种Linux套接字关闭事件监控方法及装置
CN113596170A (zh) 基于负载均衡设备的停机处理方法、装置、介质及设备
CN114095398A (zh) 探测时延的确定方法、装置、电子设备及存储介质
CN113760693A (zh) 用于微服务系统的本地调试的方法和装置
WO2024207833A1 (zh) 一种跨进程的防病毒检测方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication

Application publication date: 20230627

RJ01 Rejection of invention patent application after publication