一、系统基础信息模块(cpu,内存,ip,dns)模块

一、系统基础信息模块(cpu,内存,ip,dns)模块


1、系统性能信息模块psutil

a、(cpu信息)

# yum -y install python-devel

# wget https://pypi.python.org/packages/source/p/psutil/psutil-2.0.0.tar.gz --no-check-certificate

# tar -zxvf psutil-2.0.0.tar.gz

# cd psutil-2.0.0.tar.gz

# python setup.py install

# python

>>> import psutil

>>> psutil.cpu_times()   # 使用cpu_times方法获取cpu完整信息,需要显示所有逻辑cpu信息指定变量percpu=True

>>> psutil.cpu_times(percpu=True)

>>> psutil.cpu_times().user  #获取单项数据信息,如用户user的CPU时间比

>>> psutil.cpu_count()       #获取CPU的逻辑个数,默认logical=True4

2

>>> psutil.cpu_count(logical=False)  #获取CPU的物理个数

1

b、(内存信息)

>>> psutil.virtual_memory()

>>> psutil.virtual_memory().total

1036869632L

>>> psutil.virtual_memory().free

177897472L

>>> psutil.swap_memory()

c、(磁盘信息)

>>> psutil.disk_partitions()   #获取磁盘的完整信息

>>> psutil.disk_usage(‘/‘)     #使用psutil.disk_usage方法获取分区(参数)的使用情况

>>> psutil.disk_io_counters()  #获取磁盘IO个数、读写信息

>>> psutil.disk_io_counters(perdisk=True) #"perdisk=True"参数获取单个分区IO个数、读写信息

>>> psutil.net_io_counters(pernic=True)    # pernic=True 输出每个网络接口的IO信息

>>> psutil.users()  #返回当前登陆系统用户信息

>>> import psutil, datetime

>>> psutil.boot_time()  #获取开机时间,以linux时间戳格式返回

1450153735.0

>>> datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y%m%d%H%M%S")  #转换成自然时间格式

‘20151215122855‘

2、系统进程管理方法

a、(进程信息)

>>> import psutil

>>> psutil.pids()   #列出所有进程PID

>>> psutil.Process(2156).name()  #实例化一个Process对象,参数为一进程PID,进程名

‘nginx‘

>>> psutil.Process(2156).exe()   # 进程bin路径

‘/usr/sbin/nginx‘

>>> psutil.Process(2156).cwd()  # 进程工作目录绝对路径

‘/‘

>>> psutil.Process(2156).status()  # 进程状态

‘sleeping‘

>>> psutil.Process(2156).create_time() #进程创建时间,时间戳格式

1450167098.7

>>> psutil.Process(2156).uids()  #进程uid信息

>>> psutil.Process(2156).gids()

>>> psutil.Process(2156).cpu_times()

>>> psutil.Process(2156).cpu_affinity()

>>> psutil.Process(2156).memory_percent()  #进程内存利用率

0.46100607564133966

>>> psutil.Process(2156).memory_info()

>>> psutil.Process(2156).io_counters()  #进程IO信息

>>> psutil.Process(2156).connections()

>>> psutil.Process(2156).num_threads() #进程开启的线程数

3、ip地址处理模块IPy

# wget https://pypi.python.org/packages/source/I/IPy/IPy-0.81.tar.gz --no-check-certificate

# tar -zxvf IPy-0.81.tar.gz

# cd IPy-0.81

# python setup.py install

通过指定网段输出该网段的Ip个数及所有ip地址清单

>>> from IPy import IP

>>> ip = IP(‘192.168.0.0/16‘)

>>> print ip.len()

>>> for x in ip:

>>>     print x

#反向解析地址格式

>>> ip = IP(‘192.168.1.20‘)

>>> ip .reverseName()

‘20.1.168.192.in-addr.arpa.‘

#根据ip与掩码计算出网段

>>> from IPy import IP

>>> print(IP(‘192.168.1.11‘).make_net(‘255.255.255.0‘))

192.168.1.0/24

>>> print(IP(‘192.168.1.11/255.255.255.0‘,make_net=True))

192.168.1.0/24

>>> print(IP(‘192.168.1.11/24‘,make_net=True))

192.168.1.0/24

>>> print(IP(‘192.168.1.0-192.168.1.255‘,make_net=True))

192.168.1.0/24

#通过strNormal方法指定不同wantprefixlen参数值以定制不同输出类型的网段

>>> IP(‘192.168.1.0/24‘).strNormal(0)   #wantprefixlen = 0  无返回

‘192.168.1.0‘

>>> IP(‘192.168.1.0/24‘).strNormal(1)   #wantprefixlen = 1  prefix格式

‘192.168.1.0/24‘

>>> IP(‘192.168.1.0/24‘).strNormal(2)   #wantprefixlen = 2  decimalnetmask格式

‘192.168.1.0/255.255.255.0‘

>>> IP(‘192.168.1.0/24‘).strNormal(3)   #wantprefixlen = 3  lastIP格式

‘192.168.1.0-192.168.1.255‘

#多网络比较/计算方法详解

>>> IP(‘10.0.0.0/24‘) < IP(‘12.0.0.0/24‘)   #数值型数据比较

True

>>> IP(‘10.0.0.0/24‘) in IP(‘12.0.0.0/24‘)  #网段包含关系

False

>>> IP("192.168.0.0/23").overlaps("192.168.1.0/24")  #网段是否存在重叠  1 表示存在重叠,0 表示不存在重叠

1

>>> IP("192.168.0.0/23").overlaps("192.168.2.0")

0

#!/usr/bin/env/ python

from IPy import IP

ip_s = raw_input(‘Please input an IP or net_range:‘)

ips = IP(ip_s)

if len(ips) > 1:   # 为一个网络地址

print (‘net:  %s‘ % ips.net())                 #网络地址

print (‘netmask:  %s‘ % ips.netmask())         #子网掩码

print (‘broadcast:  %s‘ % ips.broadcast())     #广播地址

print (‘reverse address:  %s‘ % ips.reverseNames()[0])   #反向地址解析

print (‘subnet:  %s‘ % len(ips))     #输出网络子网数

else:

print (‘reverse address:  %s‘ % ips.reverseNames()[0])

print(‘hexadecimal:  %s‘ % ips.strHex())    #输出十六进制地址

print(‘binary ip:  %s‘ % ips.strBin())      #输出二进制地址

print(‘iptype:  %s‘ % ips.iptype())         #输出地址类型,PRIVATE\PUBLIC\LOOPBACK

4、DNS处理模块

dnspython提供了一个DNS解析器类:resolver,使用它的query方法来实现域名的查询功能。query方法的定义如下:

query(self, qname, rdtype=1, rdclass=1, tcp=False, source=None, raise_on_no_answer=True, source_port=0)

其中,qname参数为查询的域名。rdtype参数用来指定RR资源的类型,常用的有以下几种:

A记录:将主机名转换成IP地址

MX记录:邮件交换记录,定义邮件服务器的域名

CNAME记录:指别名记录,实现域名间的映射

NS记录:标记区域的域名服务器及授权子域

PTR记录:反向解析,与A记录相反,将IP转换成成主机名

SOA记录:SOA记录,一个起始授权区的定义

# wget http://www.dnspython.org/kits/1.9.4/dnspython-1.9.4.tar.gz

# tar -zxvf dnspython-1.9.4.tar.gz

# cd dnspython-1.9.4

# python setup.py install

(1)A记录

#! /usr/bin/env python

import dns.resolver

domain = raw_input(‘Please input an domain:‘)

A = dns.resolver.query(domain,‘A‘)       #指定查询类型为A记录

for i in A.response.answer:

for j in i.items:

print j

(2)MX记录

#! /usr/bin/env python

import dns.resolver

domain = raw_input(‘Please input an domain:‘)

MX = dns.resolver.query(domain,‘MX‘)      #指定查询类型为MX记录

for i in MX:

print ‘MX preference = ‘, i.preference,‘mail exchanger = ‘, i.exchange

(3)NS记录

#! /usr/bin/env python

import dns.resolver

domain = raw_input(‘Please input an domain:‘)

NS = dns.resolver.query(domain,‘NS‘)       #指定查询类型为NS记录

for i in NS.response.answer:

for j in i.items:

print j

(4)CNAME记录

#! /usr/bin/env python

import dns.resolver

domain = raw_input(‘Please input an domain:‘)

CNAME = dns.resolver.query(domain,‘CNAME‘)       #指定查询类型为CNAME记录

for i in CNAME.response.answer:

for j in i.items:

print j

练习:


1、根据输入的Ip地址,跟子网掩码 计算出网络段

#!/usr/bin/env python

#_*_encoding:utf-8_*_

#Input your ip address and netmask to figure out your network .

#申明:此脚本为交互式,默认情况下请执行python network.py

from IPy import IP

input_IP = raw_input(‘请输入ip地址:‘)

list1 = input_IP.split(‘.‘)

if len(list1) != 4:

print "您输入的ip地址不合法,请重新输入!"

exit()

for i in list1:

if i.isdigit() == True and int(i) >=0 and int(i) <= 255:

pass

else:

print "您输入的ip地址不合法,请重新输入!"

exit()

input_Netmask = raw_input(‘请输入子网掩码:‘)

list2 = input_Netmask.split(‘.‘)

if len(list2) != 4:

print "您输入的子网掩码不合法,请重新输入!"

exit()

for i in list2:

if i.isdigit() == True and int(i) >=0 and int(i) <= 255:

pass

else:

print "您输入的子网掩码不合法,请重新输入!"

exit()

print "您所在的网段为:%s" % (IP(input_IP).make_net(input_Netmask))

2、dns域名解析后台服务器健康检查

import dns.resolver

import os

import httplib

iplist = []      #定义域名IP列表变量

appdomain = ‘www.google.com.hk‘    # 定义业务域名

def get_iplist(domain=""):       #域名解析函数,解析成功IP将被追加到iplist

try:

A = dns.resolver.query(domain, ‘A‘)  #解析A记录类型

except Exception,e:

print "dns resolver error:"+str(e)

return

for i in A.response.answer:

for j in i.items:

iplist.append(j)   #追加到Iplist

return True

def checkip(ip):

checkurl = ip+":80"

getcontent = ""

httplib.socket.setdefaulttimeout(5)   #定义http连接超时时间5秒

conn=httplib.HTTPConnection(checkurl) #创建http连接对象

try:

conn.request("GET","/",headers = {"Host": appdomain}) #发起URL请求,添加host主机头

r = conn.getresponse()

getcontent = r.read(15)   #获取URL页面前15个字符,以便做可用性校验

finally:

if getcontent == "<!doctype html>":

print ip+" [OK]"

else:

print ip+" [Error]"     #此处可放告警程序,可以是邮件,短信通知

if __name__=="__main__":

if get_iplist(appdomain) and len(iplist)>0:    #条件:域名解析正确且至少返回一个IP

for ip in iplist:

checkip(ip)

else:

print "dns resolver error"

时间: 2024-10-10 23:50:46

一、系统基础信息模块(cpu,内存,ip,dns)模块的相关文章

性能优化之基础资源cpu&amp;内存(JVM)

本章主要介绍计算机的一些基础资源以及操作系统处理后的一些基础资源. 主要包括 cpu 内存 磁盘 网络 线程 本章会介绍这些资源的一些原理,介绍如何查看资源的数量,使用情况,对性能和整体计算机执行的一些影响.本章很多内容都基于linux,不是特殊说明,就是针对linux的情况.可能在其它操作系统不一定适用. 另外还会对jvm之上的一些内容做特殊说明,因为大家很大的一些积累都在jvm之上,内部的系统基本也建立在jvm上. jvm 指令 jvm 内存使用 cpu cpu是计算机里最重要的资源,没有之

《Python自动化运维之路》 系统基础信息模块(一)

系统性能收集模块Psutil 目录: 系统性能信息模块psutil 系统性能信息模块psutil psutil能够轻松实现获取系统运行的进程和系统利用率包括(CPU,内存,磁盘 和网络)等.主要用于系统监控.对于系统维护来说是个不错的模块. 1.模块的安装 wget https://files.pythonhosted.org/packages/14/a2/8ac7dda36eac03950ec2668ab1b466314403031c83a95c5efc81d2acf163/psutil-5.

监控系统负载与CPU、内存、硬盘、登录用户数,超出警戒值则发邮件告警。

[email protected]:~$ cat warning.sh #!/bin/bash #监控系统负载与CPU.内存.硬盘.登录用户数,超出警戒值则发邮件告警.    前提安装mail服务  [email protected] #提取本服务器的IP地址信息 IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`    # 1.监控系统负载的变化情况

监测linux系统负载与CPU、内存、硬盘、用户数的shell脚本

本节主要内容: 利用Shell脚本来监控Linux系统的负载.CPU.内存.硬盘.用户登录数. 一.linux系统告警邮件脚本 # vim /scripts/sys-warning.sh #!/bin/bash #site: www.jquerycn.cn #监控系统负载与CPU.内存.硬盘.登录用户数,超出警戒值则发邮件告警. #提取本服务器的IP地址信息 IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":"

Windows系统CPU内存网络性能统计第二篇 CPU CPU整体使用率

分享一下我老师大神的人工智能教程吧.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net 本文配套程序下载地址为:http://download.csdn.net/detail/morewindows/5160810 转载请标明出处,原文地址:http://blog.csdn.net/morewindows/article/details/8678359 欢迎关注微博:http://weibo.com/MoreWindo

Windows系统CPU内存网络性能统计第四篇 CPU 多核CPU各核使用率C++

分享一下我老师大神的人工智能教程吧.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net 转载请标明出处,原文地址:http://blog.csdn.net/morewindows/article/details/8678396 欢迎关注微博:http://weibo.com/MoreWindows Windows系统CPU内存网络性能统计第四篇 CPU多核CPU各核使用率 C++ http://blog.csdn.ne

Windows系统CPU内存网络性能统计第一篇 内存

最近翻出以前做过的Windows系统性能统计程序,这个程序可以统计系统中的CPU使用情况,内存使用情况以及网络流量.现在将其整理一下(共有三篇),希望对大家有所帮助. 目录如下: 1.<Windows系统CPU内存网络性能统计第一篇 内存> 2.<Windows系统CPU内存网络性能统计第二篇 CPU> 3.<Windows系统CPU内存网络性能统计第三篇网络流量> 本篇将介绍统计系统内存使用情况,包括内存使用率.总物理内存大小.可用物理内存大小.总虚拟内存大小,可用虚

Windows 程序启动性能优化(先载入EXE,后载入DLL,只取有限的代码载入内存,将CPU的IP指向程序的入口点)

一.重定位链接时重定位:目标文件一般由多个节组成,编译器在编译每个目标文件时一般都是从0地址开始生成代码.当多个代码节合成一个代码段时,需要根据其在最终代码段中的位置做出调整.同时,链接器需要对已经解析的符号分配运行时地址.这个过程就是重定位. 加载时重定位:程序中可能调用了DLL,由于EXE是最先被加载的,所以一般都能加载到其想要的内存地址上:而DLL的加载一般在EXE之后,就需要对DLL中的地址进行重定位了. 二.程序的启动过程WIN32程序启动过程包括: (1)操作系统把程序加载到内存,并

详解为什么32位系统只能用4G内存.

本文转自:https://www.cnblogs.com/nvd11/archive/2013/04/02/2996784.html,感谢作者的干货 既然是详解, 就从最基础的讲起了. 1. Bit(位)              Bit计算机是计算机最小的存储单位,  大家都知道计算机实质上都是用二进制数0或者1来存储数据的,  所以Bit实际上可以看成存放1个二进制数字的1个位置.             也就是说bit只有2种值, 0 或者 1, 所以1个bit能存放1个布尔类型的值(bo