`
zhimaruanjian
  • 浏览: 32291 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

使用Python收集获取Linux系统主机信息

阅读更多
爬虫代理IP由芝麻HTTP服务供应商提供

使用 python 代码收集主机的系统信息,主要:主机名称、IP、系统版本、服务器厂商、型号、序列号、CPU信息、内存等系统信息。

#!/usr/bin/env python
#encoding: utf-8

'''
收集主机的信息:
主机名称、IP、系统版本、服务器厂商、型号、序列号、CPU信息、内存信息
'''

from subprocess import Popen, PIPE
import os,sys

''' 获取 ifconfig 命令的输出 '''
def getIfconfig():
    p = Popen(['ifconfig'], stdout = PIPE)
    data = p.stdout.read()
    return data

''' 获取 dmidecode 命令的输出 '''
def getDmi():
    p = Popen(['dmidecode'], stdout = PIPE)
    data = p.stdout.read()
    return data

''' 根据空行分段落 返回段落列表'''
def parseData(data):
    parsed_data = []
    new_line = ''
    data = [i for i in data.split('\n') if i]
    for line in data:
        if line[0].strip():
            parsed_data.append(new_line)
            new_line = line + '\n'
        else:
            new_line += line + '\n'
    parsed_data.append(new_line)
    return [i for i in parsed_data if i]

''' 根据输入的段落数据分析出ifconfig的每个网卡ip信息 '''
def parseIfconfig(parsed_data):
    dic = {}
    parsed_data = [i for i in parsed_data if not i.startswith('lo')]
    for lines in parsed_data:
        line_list = lines.split('\n')
        devname = line_list[0].split()[0]
        macaddr = line_list[0].split()[-1]
        ipaddr  = line_list[1].split()[1].split(':')[1]
        break
    dic['ip'] = ipaddr
    return dic

''' 根据输入的dmi段落数据 分析出指定参数 '''
def parseDmi(parsed_data):
    dic = {}
    parsed_data = [i for i in parsed_data if i.startswith('System Information')]
    parsed_data = [i for i in parsed_data[0].split('\n')[1:] if i]
    dmi_dic = dict([i.strip().split(':') for i in parsed_data])
    dic['vender'] = dmi_dic['Manufacturer'].strip()
    dic['product'] = dmi_dic['Product Name'].strip()
    dic['sn'] = dmi_dic['Serial Number'].strip()
    return dic

''' 获取Linux系统主机名称 '''
def getHostname():
    with open('/etc/sysconfig/network') as fd:
        for line in fd:
            if line.startswith('HOSTNAME'):
                hostname = line.split('=')[1].strip()
                break
    return {'hostname':hostname}

''' 获取Linux系统的版本信息 '''
def getOsVersion():
    with open('/etc/issue') as fd:
        for line in fd:
            osver = line.strip()
            break
    return {'osver':osver}

''' 获取CPU的型号和CPU的核心数 '''
def getCpu():
    num = 0
    with open('/proc/cpuinfo') as fd:
        for line in fd:
            if line.startswith('processor'):
                num += 1
            if line.startswith('model name'):
                cpu_model = line.split(':')[1].strip().split()
                cpu_model = cpu_model[0] + ' ' + cpu_model[2]  + ' ' + cpu_model[-1]
    return {'cpu_num':num, 'cpu_model':cpu_model}

''' 获取Linux系统的总物理内存 '''
def getMemory():
    with open('/proc/meminfo') as fd:
        for line in fd:
            if line.startswith('MemTotal'):
                mem = int(line.split()[1].strip())
                break
    mem = '%.f' % (mem / 1024.0) + ' MB'
    return {'Memory':mem}

if __name__ == '__main__':
    dic = {}
    data_ip = getIfconfig()
    parsed_data_ip = parseData(data_ip)
    ip = parseIfconfig(parsed_data_ip)
    
    data_dmi = getDmi()
    parsed_data_dmi = parseData(data_dmi)
    dmi = parseDmi(parsed_data_dmi)

    hostname = getHostname()
    osver = getOsVersion()
    cpu = getCpu()
    mem = getMemory()
    
    dic.update(ip)
    dic.update(dmi)
    dic.update(hostname)
    dic.update(osver)
    dic.update(cpu)
    dic.update(mem)

    ''' 将获取到的所有数据信息并按简单格式对齐显示 '''
    for k,v in dic.items():
        print '%-10s:%s' % (k, v)

实验测试结果:
product   :VMware Virtual Platform
osver     :CentOS release 6.4 (Final)
sn        :VMware-56 4d b4 6c 05 e5 20 dc-c6 49 0c e1 e0 18 1c 75
Memory    :1870 MB
cpu_num   :2
ip        :192.168.0.8
vender    :VMware, Inc.
hostname  :vip
cpu_model :Intel(R) i7-4710MQ 2.50GHz 
分享到:
评论

相关推荐

    linux 系统系统信息采集器 外加socket发送

    标题中的“Linux系统信息采集器”是一个用于收集操作系统级别的数据工具,主要针对Linux环境。这样的工具可以帮助管理员监控系统状态,包括但不限于CPU使用率、内存占用、磁盘空间、网络活动等。通过采集这些信息,...

    Python常用模块---psutil下载

    它提供了在操作系统级别收集信息的能力,包括但不限于CPU使用率、内存使用情况、网络活动、磁盘I/O以及进程详细信息。`psutil`在Python中扮演着系统监控工具的角色,对于开发者调试、性能分析和系统管理任务都非常...

    获取本地计算机的操作系统

    在更复杂的企业环境中,系统管理员可能还会使用自动化工具,如Ansible、Puppet等,它们能批量收集多台服务器的操作系统信息。 总的来说,获取本地计算机的操作系统信息是通过各种系统内置工具或编程接口实现的。...

    用Python和wxPython开发主机安全监控系统

    Python的可移植性极强,可以在包括UNIX、Linux、Windows和Mac OSX等在内的多个平台上运行,源代码和二进制版本均可自由获取。 2. wxPython和Boa构造器 wxPython是Python的一个图形用户界面(GUI)库,它提供了一个...

    linux-一个linux信息搜集小脚本主要用于应急响应

    在Linux环境中,有效的信息搜集是应急响应的第一步,它有助于我们理解系统的当前状态,发现潜在的安全威胁。这个名为"Linux信息搜集小脚本"的工具,正是为这样的目的而设计的。这个脚本可以在Debian和CentOS这两种...

    获取各种计算机系统信息

    在Linux系统中,可以使用`cat /etc/os-release`查看发行版信息,`lscpu`获取CPU信息,`free -h`查看内存信息,`df -h`检查磁盘空间,`ip addr`或`ifconfig`获取网络信息。 开源工具如`GatherSystemInfo`和`Nmap`也...

    zabbix监控linux系统端口连接数

    首先,让我们关注"zabbix监控linux系统端口连接数"这一主题。在Linux环境中,网络服务通过监听特定端口来提供服务。端口连接数是衡量系统负载和服务运行状况的关键指标。通过监控端口连接数,我们可以及时发现潜在的...

    ssh_linux.zip_beyond3rl_python_ssh_进程

    在本场景中,"ssh_linux.zip_beyond3rl_python_ssh_进程" 的标题和描述表明我们将探讨如何使用Python通过SSH连接到Linux服务器,并获取目标服务器上的进程信息。下面将详细介绍这个过程涉及的知识点。 首先,SSH...

    python学习之路 精

    在系统性能监控方面,学习如何使用Psutil库获取系统状态信息,部署和使用Sentry进行错误信息收集,使用StatsD、Graphite、Diamond和Grafana搭建Web监控等都是对开发者非常有帮助的技能。 Python在测试方面也有着...

    linux系统的kafka监控

    在Linux系统中对Kafka进行监控是确保分布式消息系统稳定运行的关键步骤。Kafka是一款高吞吐、低延迟的开源消息系统,广泛应用于大数据实时处理和流数据平台。本篇文章将详细探讨如何在Linux环境下有效地监控Kafka。 ...

    python服务器管理

    "python服务器管理"这个主题涵盖了许多与Python相关的技术,特别是利用Python库来获取和分析服务器的硬件资源使用情况,如CPU、硬盘和内存的利用率。下面将详细讨论这些知识点。 1. Python 库 `psutil`: `psutil`...

    Python用于简易烈度计系统运维.zip

    5. **自动化脚本**:Python可以编写自动化脚本定期收集、分析和报告烈度计数据,例如使用`schedule`库定时执行任务,或者结合`cron`在Unix/Linux系统中设定定时任务。 6. **异常处理**:在运维过程中,错误和异常...

    计算机软件-商业源码-获取系统硬件信息.zip

    在计算机编程领域,获取系统硬件信息是至关重要的任务之一,特别是在开发商业软件时。源码是软件的心脏,它揭示了程序如何与操作系统交互并执行特定功能。本压缩包“计算机软件-商业源码-获取系统硬件信息.zip”提供...

    getInfoUsePython.rar

    标题“getInfoUsePython.rar”表明这是一个关于使用Python获取Linux主机信息,并且通过C++来调用Python脚本实现这一功能的示例。这个压缩包可能包含必要的源代码和库文件,帮助用户理解和实践这个技术。 描述中提到...

    linux-monitor.rar

    标题“linux-monitor.rar”指的是一个使用Python编程语言开发的Linux系统监控程序,它结合了paramiko库用于远程SSH连接,smtplib库处理电子邮件发送,以及APScheduler库进行定时任务调度。这个压缩包包含了项目的...

    Linux高级系统级性能分析工具perf

    在分析大型系统或分布式应用时,perf支持收集远程机器上的性能数据,通过`perf collect`命令实现跨主机分析。此外,perf还能与其他工具结合,如GDB调试器,提供更全面的调试视角。 最后,perf的输出可以导出为...

    Python-Fossor一个自动化调查挂掉的主机和服务的面向插件的工具

    Fossor 是一个用 Python 编写的高效工具,专为IT运维人员和安全分析师设计,用于自动化调查和诊断系统问题,特别是针对挂掉的主机和服务。它采用模块化设计,允许通过插件扩展其功能,适应各种故障排查场景。Fossor ...

    linux环境如何通过wmi访问windows

    Linux系统作为开源且强大的服务器操作系统,有时需要与Windows系统进行交互,例如远程收集信息或执行管理任务。在这种情况下,Windows Management Instrumentation(WMI)提供了一个接口,允许其他系统(包括Linux)...

    Python库 | Pyventory-3.1.tar.gz

    例如,它可以使用SSH连接远程主机获取信息,或者读取本地的WMIC命令来获取Windows系统的数据。 3. **存储和检索**:收集到的数据会被存储在一个持久化的数据库中,可以是SQLite、MySQL或PostgreSQL等。用户可以通过...

    计算机软件-商业源码-获取或更改计算机名_硬件与系统.zip

    总之,"获取或更改计算机名_硬件与系统"这个主题涵盖了操作系统接口的使用、硬件信息的读取、以及可能涉及的系统管理知识。在实际的软件开发中,理解和掌握这些技术可以帮助我们构建更加健壮和适应性强的应用程序。

Global site tag (gtag.js) - Google Analytics