我的编程空间,编程开发者的网络收藏夹
学习永远不晚

每日一题_Python.纯Python实

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

每日一题_Python.纯Python实

具体需求:
1. 由于自主开发的XmZoomEye-Agent目前被动监控为主,为了实现Zabbix Low-Level Discovery服务自主发现,需要根据进程名自动获取占用端口列表,并根据端口分析上报数据


实现思路:

1. 利用psutil模块通过进程名获取进程id列表
2. 遍历/proc/net/tcp文件获取rem_address为00000000:0000的列,将第九列的socket_id和它以集合形式的字典存储去重
3. 利用获取到的pid列表和socket_id集合字典生成端口集合
4. 尝试连接端口获取动态数据上报

wKiom1flKmWSePxdAAAlVjy4230417.png


具体代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
#
# Authors: limanman
# OsChina: http://xmdevops.blog.51cto.com/
# Purpose:
#
"""
# 说明: 导入公共模块
import os
import re
import psutil
# 说明: 导入其它模块


# 说明: 获取进程
def pidof_processname(srvname):
    pids = []
    for pid in psutil.process_iter():
        if pid.name() == srvname:
            pids.append(str(pid.pid))
    return pids


# 说明: 套接端口
def socks_with_ports():
    sockets = {}
    with open('/proc/net/tcp', 'r+b') as fd:
        for curline in fd:
            sepline = curline.split()
            if sepline[2] != '00000000:0000':
                continue
            key = sepline[9]
            addr, port = sepline[1].split(':')
            if key not in sockets:
                sockets[key] = set()
            sockets[key].add(int(port, 16))
    return sockets


# 说明: 获取端口
def analysis_sockports(pids, socks):
    sock_ports = set()
    for pid in pids:
        fd_path = os.path.join(os.path.join('/proc', pid), 'fd')
        for rlink in os.listdir(fd_path):
            rpath = os.path.join(fd_path, rlink)
            if not os.path.exists(rpath):
                continue
            vlink = os.readlink(rpath)
            if not vlink.startswith('socket:'):
                continue
            match = re.search(r'(?<=socket:\[)([0-9]+)(?=\])', vlink)
            if not match:
                continue
            addr = match.group(1)
            if addr in socks:
                sock_ports.update(socks[addr])
    return sock_ports


def service_redis_running_status(add_data=None):
    srv_name = 'redis-server'
    pids = pidof_processname(srv_name)
    socks = socks_with_ports()
    ports = analysis_sockports(pids, socks)
    return 'service: %s -> port: ' % srv_name, ports


if __name__ == '__main__':
    import pprint
    pprint.pprint(service_redis_running_status())


有图有相:

wKioL1flNUCCprWkAABFkw9S7f0428.png

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

每日一题_Python.纯Python实

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

每日一题_Python.纯Python实

具体需求:1. 由于自主开发的XmZoomEye-Agent目前被动监控为主,为了实现Zabbix Low-Level Discovery服务自主发现,需要根据进程名自动获取占用端口列表,并根据端口分析上报数据实现思路:1. 利用psuti
2023-01-31

Java每日一题(3)

题目:使用java.lang.Math类,生成100个0到99之间的随机整数,找出它们之中的最大者和最小者,并统计大于50的整数个数  已有答案:http://jythoner.javaeye.com/blog/322336?page=1#
2023-01-31

每日一道SQL题 - Lu

说明:作者:原文出处答案基于mysql 8.0,自己写的,不一定正确。目录202106042021060320210604题目:两张表:id 是自动递增的主键,CandidateId 是 T0604A 表中的 id.请编写 sql 语句来找到当选者的名字,即选
每日一道SQL题 - Lu
2017-10-23

【每日一题】57. 插入区间

【每日一题】57. 插入区间 57. 插入区间题目描述解题思路 57. 插入区间 题目描述 给你一个 无重叠的 ,按照区间起始端点排序的区间列表。 在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要
2023-08-30

2023-08-26力扣每日一题

链接: 228. 汇总区间 题意: 升序数组找连续区间 解: 简单遍历题 实际代码: #includeusing namespace std;vector summaryRanges(vector& nums){ if(!nums.s
2023-08-30

每日一题 LeetCode 有效的数字

有效的数字(简单题)class Solution:def isValid(self, s):""":type s: str:rtype: bool""" a=list(s) b=[]
2023-01-31

【每日一记3.16】python学习记录

6.Python的列表    Python列表是python内置的数据对象之一    列表用【】包含,内有数据对象,每个数据对象以‘,’分隔,每个数据对象称为元素    python是一个有序的序列,支持嵌套    【】空列表,同时用lis
2023-01-31

Android实例 每日一句(英语)

前言:添加了学习模块,所以做了一个每日一句的功能,主要是在天行数据申请了一个每日一句的api,之后用okgo,调取,并解析成对象。获取文字、图片、音频等。在线显示、播放。同时做了一个底部弹出日历选择。 效果图: im
2022-06-06

老男孩教育每日一题-2017年3月21日

查找占用内存的前3名进程(命令大风暴,看谁的命令最精简)参考答案:方法一top 按内存列排序,使用>可以移动到以内存排序 x高亮 z 加颜色方法二top -a  以内存排序方法三htop 可以使用鼠标点击按内存列排序 注:需要yum安装(e
2023-01-31

信息安全工程师真题每日一练

  很多考生在备考信息安全工程师考试,可以多做一些试题,一方面了解往年考试题型,一方面熟悉往年考点。这里编程学习网小编为大家准备了信息安全工程师真题每日一练,供大家练习。  ● ( )是一种通过不断对网络服务系统进行扰,影响其正常的作业流程,使系统响应减慢甚至瘫痪的攻击方式。  (21)A.暴力攻击  B.拒绝服务攻击  
信息安全工程师真题每日一练
2024-04-18

信息系统项目管理师真题每日一练(一)

  很多考生在备考2018年下半年信息系统项目管理师考试,今天编程学习网小编为大家准备了信息系统项目管理师真题每日一练(一),以供备考的考生不妨来试试信息系统项目管理师真题练习吧!  ● 我国提出的两化融合是指( )融合。  (1)A.工业化和农业现代化  B.工业化和自动化  C.工业化和城镇化  D.工业化和信息化  
信息系统项目管理师真题每日一练(一)
2024-04-18

Java日常练习题,每天进步一点点(61)

目录1、如果类的方法没有返回值,该方法的返回值类型应当是abstract。()2、代码String str=”123456a”;int i=Integer.parseInt(str);会报异常的是()3、以下哪个方法用于定义线程的执行体?4、在Java中,什么
2020-04-03

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录