BYPASS SHELL BY ./RAZORGANZ
Server: nginx/1.20.1
System: Linux iZdzfnv9mwfppeZ 5.10.134-19.2.al8.x86_64 #1 SMP Wed Oct 29 22:47:09 CST 2025 x86_64
User: apache (48)
PHP: 8.2.30
Disabled: NONE
Upload Files
File: //usr/local/sysak/.sysak_components/tools/plugin_taskProc.pyo
�
�]ic@sddlZddlZddlZddlTidd6dd6dd6d	d
6dd6d
d6dd6dd6dd6dd6dd6Zidd6dd6Zidd6dd6dd6dd6dd
6Zed �Zd!�Z	d"�Z
d#�Zed$d%�e
�d&efd'��Y��ZdS((i����N(t*tESTABLISHEDitSYN_SENTitSYN_RECVit	FIN_WAIT1it	FIN_WAIT2it	TIME_WAITitCLOSEit
CLOSE_WAITitLAST_ACKi	tLISTENi
tCLOSINGitUNCONNtFREEitUNCONNECTEDt
CONNECTINGt	CONNECTEDt
DISCONNECTINGc
s��fd�}�fd�}�fd�}i}tjd|�}tjj|�s\|Sx�tj|�D]�}|dkr�||tjj||�|�ql|d
kr�|tjj||�|�ql|dkrl|tjj||�|�qlqlW|S(s*
    获取指定 PID 的网络信息
    csFt|d��1}|j�}x|dD]}|j�j�}t|�dkrYq)n|djd�}|djd�}d|ks�d|ks�d|ks�d	|kr�tjtjtj	|d
�ddd��}	n\d
|ksd|ksd|ksd|kr=tj
tj	|d
�ddd��}	nt|dd�}
d|ks�d|ks�d|ks�d	|kr�tjtjtj	|d
�ddd��}n\d
|ks�d|ks�d|ks�d|krtj
tj	|d
�ddd��}nt|dd�}d|ks9d|kr[tj
t|dd�d�}
ntj
t|dd�d�}
|djd�}t|d
d�d}t|dd�d}t|dd�}|d}�r�i||<q)i	|d6|	d6|
d6|d6|d6|
d6|d6|d6|d 6||<q)W|SWdQXdS(!se
        raw:
            sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode ref pointer drops
        raw6:
            sl  local_address                         remote_address                        st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode ref pointer drops
        udp:
            sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode ref pointer drops
        udp6:
            sl  local_address                         remote_address                        st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode ref pointer drops
        udplite:
            sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode ref pointer drops
        udplite6:
            sl  local_address                         remote_address                        st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode ref pointer drops
        tcp:
        sl(0)  local_address(1) rem_address(2)   st(3) tx_queue(4.1) rx_queue(4.2) tr(5.1) tm->when(5.2) retrnsmt(6)   uid(7)  timeout(8) inode(9)
        0: 0100007F:8E9E 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 437261903 1 ffff8b72b20b9ec0 100 0 0 10 0
        1: 0100007F:9286 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 437261901 1 ffff8b72b20b8a40 100 0 0 10 0

        tcp6:
        sl  local_address                         remote_address                        st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode
        0: 00000000000000000000000000000000:0CEA 00000000000000000000000000000000:0000 0A 00000000:00000000 00:00000000 00000000    27        0 348608123 1 ffff8b6f92402c00 100 0 0 10 0

        Args:
            file_path (_type_): _description_

        Returns:
            _type_: _description_
        triit:ittcp6tudp6tudplite6traw6iNi����ttcptudptudplitetrawiitUNKNOWNiiii	tprotocoltlocal_ipt
local_portt	remote_iptremote_porttstatettx_queuetrx_queuetretrnsmt(topent	readlineststriptsplittlentsockett	inet_ntoptAF_INET6t	mem_utilstbytes_to_hext	inet_ntoatinttudp_state_tabletgetttcp_state_table(Rt	file_pathtnet_infotftlinestlinetpartst
local_addresstremote_addressRRR R!R"tqueuesR#R$R%tinode(t	lite_mode(s;/usr/local/sysak/.sysak_components/tools/plugin_taskProc.pytget_net_info1sn,&,&"

c		s�t|d���}|j�}x�|dD]�}|j�j�}t|�dkrYq)ntjt|dd�d�}|d}t|�dkr�d	n|d}�r�i||<q)id
d6|d6|d
6||<q)WWdQX|S(sa
        Num       RefCount Protocol Flags    Type St Inode Path
        ffff8b72cf6baac0: 00000002 00000000 00010000 0001 01 395986121 /tmp/vscode-ipc-0d2808c9-da6b-4de6-8d16-481eb31065b1.sock
        ffff8b72bcf84280: 00000002 00000000 00010000 0001 01 358505400 /tmp/vscode-remote-containers-ipc-25cb7b04-babc-4e11-a1e0-ea1b08a8f681.sock
        ffff8b75942c9300: 00000002 00000000 00010000 0001 01 381216346 /tmp/vscode-remote-containers-ipc-e985c9e2-6762-4241-a26b-cd22049a0abb.sock

        Args:
            file_path (_type_): _description_

        Returns:
            _type_: _description_
        RiiiiRiittunixRtpathR"N(R&R'R(R)R*tunix_state_tableR3R1(	R5R6R7R8R9R:R"R>RC(R?(s;/usr/local/sysak/.sysak_components/tools/plugin_taskProc.pytget_unix_net_info�s

"
)cs�t|d���}|j�}xj|dD]^}|j�j�}t|�dkrYq)n|d}�rvi||<q)idd6||<q)WWdQX|S(sn
        sk               Eth Pid        Groups   Rmem     Wmem     Dump  Locks    Drops    Inode
        ffff8b6f15f80000 0   0          00000000 0        0        0     2        0        348606852
        ffff8b6f0a6a0000 0   68519      00000000 0        0        0     2        0        348598154
        ffff8b732952e000 0   133        000405d1 0        0        0     2        0        348609623
        ffff8b6f966d4800 4   0          00000000 0        0        0     2        0        34860687

        Args:
            file_path (_type_): _description_

        Returns:
            _type_: _description_
        Rii	i����tnetlinkRN(R&R'R(R)R*(R5R6R7R8R9R:R>(R?(s;/usr/local/sysak/.sysak_components/tools/plugin_taskProc.pytget_netlink_net_info�s

s/proc/%s/netRRRRRRRRRBRF(stcpstcp6sudpsudp6sudplitesudplite6srawsraw6(R.t
get_real_pathtosRCtexiststlistdirtjoin(tpidR?R@RERGR6tnet_pathR((R?s;/usr/local/sysak/.sysak_components/tools/plugin_taskProc.pytget_pid_net_info,s.f	"#cCsutjd|�}y:tjjtjd|��s9dStj|�}|SWn!tk
rp}tj|�dSXdS(s�获取进程的 net namespace id

    lrwxrwxrwx 1 root root 0 Jul 28 10:30 /proc/64858/ns/net -> 'net:[4026531994]'

    Args:
        pid (int): 进程ID

    Returns:
        int: net namespace id
    s/proc/%s/ns/nets/proc/%sN(	R.RHRIRCRJtNonetreadlinkt	Exceptiontlog_exception_in_debug_mode(RMRNtlink_targette((s;/usr/local/sysak/.sysak_components/tools/plugin_taskProc.pytget_pid_net_namespace_id�s
c	
Cs�d�}tjd|�}y[tjj|�s5d Sidd6dd6dd6dd6dd6dd	6dd
6dd6dd6dd
6dd6dd6}t|d���}x�|j�D]�}|jd�r�||�}|j	dd�|d<q�|jd�rt||�}|j	dd�|d<|j	dd�|d<|j	dd�|d<|j	dd�|d<|j	dd�|d	<q�|jd�r�||�}|j	dd�|d
<|j	dd�|d<q�|jd�s�|jd�r||�}|j
d�dj�}|j	dd�|d|<q�|jd�r�||�}|j	dd�|d<|j	dd�|d<q�q�WWd QX|SWn!tk
r�}tj
|�d SXd S(!s:获取 PID 所在网络命名空间的 socket 统计信息cSs&|sd|kr#d|kr#iS|j�j�}i}d}x�|t|�kr!||}|jd�r||d }n|d7}g}xA|t|�kr�||j�r�|j||�|d7}q�W|rDt|�dkr�t|d�ng|D]}t|�^q�||<qDqDW|S(sB通用解析函数:将一行 sockstat 内容按 key-value 解析tusedtinuseiRi����i(R(R)R*tendswithtisdigittappendR1(R9R:tkv_pairstitkeytvaluestv((s;/usr/local/sysak/.sysak_components/tools/plugin_taskProc.pyt
parse_lines"


%Ls/proc/%s/net/sockstatitsocket_usedt	tcp_inuset
tcp_orphanttcp_twt	tcp_allocttcp_memt	udp_inusetudp_memt
udplite_inuset	raw_inuset
frag_inusetfrag_memRssockets:RWsTCP:RXtorphanttwtalloctmemsUDP:sUDPLITE:sRAW:Rs%s_inusesFRAG:tmemoryN(R.RHRIRCRJRPR&R't
startswithR3R)tlowerRRRS(	RMRat
sockstat_pathtresultR7R9tparsedRRU((s;/usr/local/sysak/.sysak_components/tools/plugin_taskProc.pytget_sockstat_by_pids\	
#
cCs2d�}d�}|stS||�o1||�S(NcSs{tjd�|d}y=t|d��(}x|D]}d|kr3tSq3WWdQXWn tk
rv}tj|�nXtS(s9
        检查进程是否加载了libjvm.so库
        s/proc/s/mapsRs	libjvm.soN(R.RHR&tTrueRRRStFalse(RMRCtfdR9RU((s;/usr/local/sysak/.sysak_components/tools/plugin_taskProc.pyt
checkJavaMapsNs

cSs�tjd�|d}yHt|d��3}|j�}|j�}d|krTtStSWdQXWn tk
r�}tj|�nXdS(s= 
        检查进程名是否带有 java 关键字
        s/proc/s/commRtjavaN(	R.RHR&treadtrstripRyRzRRRS(RMRCR7tcomntcommRU((s;/usr/local/sysak/.sysak_components/tools/plugin_taskProc.pytreadJavaComnand^s
(Rz(RMR|R�((s;/usr/local/sysak/.sysak_components/tools/plugin_taskProc.pytcheck_is_java_processMs
		tnamettaskProctTaskProcPlugincBs2eZdZd�Zd�Zd�Zd�ZRS(sg任务 proc 信息采集插件, 如果在容器中运行诊断,需要共享pid namespace参数

    输出:
    1. taskInfo: 任务的内存信息,包含PID,名称,用户态匿名内存(RssAnon),用户态文件内存(RssFile),
    用户态共享内存(RssShmem),任务实际使用的物理内存(VmRSS)。
        {
            "1": {
                "Name": "systemd",
                "Pid": "1",
                "RssAnon": 3208,
                "RssFile": 4820,
                "RssShmem": 0,
                "VmRSS": 8028
            }
            ...
        }

    2. taskSortedByAnon: 任务按照匿名内存降序排序。
        [["1212062", 2953484], ["1298842", 2939456], ["<任务ID>", <匿名内存用量,单位KB>]]

    3. taskSortedByVmRss: 任务安装实际占用的物理内存排序。
        [["1212062", 2953484], ["1298842", 2939456], ["<任务ID>", <物理内存用量,单位KB>]]

    4. filePidMap: 文件和进程的映射关系。
       {"/dev/shm/test": ["1234", "5678"], "/tmp/test": ["1234", "5678"]}

    5. memTop: Top 30 内存占用的任务信息
    cCs|jjdt�}tjd�|d}idd6}y�g}g}x�tj|�D]�}	|d|	}
tjj|
�r�qXntjj	|
�s�qXntj
|
�j�}t|�dkr�qXn|ddkr�|r�d|kr�qXq�n|dd	!dkrqXn|dd
!dkr'qXn||kr@g||<n||j
|�d|krX|j�jd
�}t|�dkr�qXn|dcd7<|dd j�}|j
|�||kr�|j
|�q�qXqXW||d<||d<Wn tk
r}
tj|
�nX|S(s�扫描指定

        Args:
            file_map (_type_): filename -> [pid1, pid2, ...]
            通过这个映射关系,可以知道哪些文件被哪些进程打开
            例如:{"/dev/shm/test": ["1234", "5678"], "/tmp/test": ["1234", "5678"]}
            sockets (_type_): [socket1_inode, socket2_inode, ...]
            通过这个列表,可以知道系统中有哪些 socket 文件被打开
            pid (_type_): 目标进程
        tenable_socket_scans/proc/s/fditsocket_countt/iR+iis/sys/ssocket:[t[ii����tmay_leak_socket_inodestall_socket_inodes(tparamsR3RyR.RHRIRKRCtisdirRJRQR(R*R[R)RRRS(tselftfile_mapRMtnet_info_mapR�tfilenameRvR�R�R{tfd_pathttmpR>RU((s;/usr/local/sysak/.sysak_components/tools/plugin_taskProc.pytscan_proc_file�sP
	



cCsPg}t|dd��1}x'|j�D]}|j|j��q)WWdQX|S(Ns
/cgroup.procsR(R&R'R[R((R�tcgroup_pathtpidsR7R9((s;/usr/local/sysak/.sysak_components/tools/plugin_taskProc.pytget_cgroup_procs�s
cs��fd�}t�}g}tjd�}�jjdt�}|rP|jd�jd�}|jd�jd�}|jd�jd�}	|	|jdd	�}
|jd
d	�}�j|
�}|||�}|j	||�x�|D]\}
|
jdd	�}|	|
jdd	�}�j|�}|||�}|j	||�q�WnCt
j|�}|||�}x"|D]}|j	|||�quW|S(
Nc$	s�i}i}i}i}i}i}i}i}	x�|D]�}
ymtjj||
�s\w7ntj|
�sqw7nt|
�}||	|
<||kr�t|
t�||<nWq7tk
r�}tj	|�q7Xq7Wi}
tj
�}x�|D]�}
y�tjj||
�sw�ntj|
�s$w�n||
d}d}|	|
dk	rY||	|
}n�j||
|�}||
|
<t
|d��>}|j�}dj|�jd�dkr�w�ni}xZ|D]R}|j�j�}t|�dkr�q�n|dd }|d}|||<q�Wi}|d	|d	<|d
|d
<t|d�|d<t|d�|d<t|d�|d<t|d
�|d
<|||
<t|d�||
<t|d
�||
<WdQX||
d}tjj|�r7t
|d��<}|j�j�}|r.|jdd�||
d<nWdQXntj|
�}|||
d<||kru||||
d<nt|
�r�d||
d<nd||
d<Wq�tk
r�}tj	|�q�Xq�Wi}i}xw|D]o}
yFtjj||
�sw�ntj|
�sw�nt|
�}||	|
<||kr�t|
t�||<t|
�}||d<|dk	ry|||<n|j||�n||}|
|
}|ddkr&i|dd6|dd6||
<g}|drx1|dD]"} | |kr�|j| �q�q�Wn|||
d<nWq�tk
rI}tj	|�q�Xq�Wt|j�dd�dt�}!t|j�dd�dt�}"i|d6|!d 6|"d!6|d"6|d#6|d$6|d%6}#|#S(&Ns/statusRRAtRssAnoni����iiitNametPidtRssFiletRssShmemtVmRSSs/cmdlinett tcmdlinetmemcgt
ContainerInfoR}tProcessTypet	namespaceR�R�R�tleak_socket_inodesR^cSs|d|dfS(Nii((tkv((s;/usr/local/sysak/.sysak_components/tools/plugin_taskProc.pyt<lambda>^streversecSs|d|dfS(Nii((R�((s;/usr/local/sysak/.sysak_components/tools/plugin_taskProc.pyR�bsttaskInfottaskSortedByAnonttaskSortedByVmRsst
filePidMapt
socketInfottaskSocketstnamespaceSockstat(RIRCRJR.t	is_numberRVRORyRRRStget_container_infosRPR�R&R'RLtfindR(R)R*R1R~treplacetget_memcg_by_pidR�RzRxtupdateR[tsortedtitems($R�trootR�ttaskMemttaskAnonR�R�R�tnet_namespace_net_info_maptpid_net_namespace_mapRMtnet_namespace_idRUtpid_socket_scan_resulttcontainer_infosR�R6RvR7R8ttaskR9R_R^tvalueR�tcmdline_fileR�R�tnamespace_sockstattscan_resulttleak_inodesR>R�R�tres(R�(s;/usr/local/sysak/.sysak_components/tools/plugin_taskProc.pytcollect_task_info�s�







&









s/proc/t
enable_podt	podDetecttpod_infot
containerstcgroup_roottCgroupParentRAR�t
ContainerNametContainerCgroup(tPluginCollectInfoR.RHR�R3Rztget_collect_infotloadR�tstoreRIRK(R�tcontextR�tcollect_infoR�R�R�R�R�R�t
pod_cgrouptpod_nameR�t	containertcon_namet
con_cgroupR^((R�s;/usr/local/sysak/.sysak_components/tools/plugin_taskProc.pytcollect�s2�	

cCsdS(N(RP(R�R�((s;/usr/local/sysak/.sysak_components/tools/plugin_taskProc.pytanalysis�s(t__name__t
__module__t__doc__R�R�R�R�(((s;/usr/local/sysak/.sysak_components/tools/plugin_taskProc.pyR�ss
	8		�(RIR+R.t
plugin_systemR4R2RDRzRORVRxR�tplugintplugin_pod_supportt
PluginBaseR�(((s;/usr/local/sysak/.sysak_components/tools/plugin_taskProc.pyt<module>s:



�		L	&