psutil
IPy
dnspython
top
命令可以看到CPU、内存、进程等信息df -h
命令可以看到硬盘的容量w
命令查看当前登录用户watch cat /proc/net/dev
命令可以查看时时的网络情况cat /proc/cpuinfo i
命令可以看到Cpu相关的一些列信息1 ) 安装
pip3 install psutil
2 ) 使用psutil输出系统信息
进入python环境,API示例:
>>> import psutil
>>> psutil.cpu_count() # 查看CPU数量, CPU是8核16线程的CPU
16
>>> psutil.cpu_count(logical=False) # 查看物理核心Cpu数量,而非线程
8
>>> psutil.cpu_times() # 获取CPU使用时间
scputimes(user=9165.24, nice=0.0, system=116.69, idle=61836.14, iowait=1.84, ) #这里输出很多信息,不一一列举了, 数值单位为cpu的周期
>>> psutil.cpu_percent() # 获取CPU当前使用比例,单位是%,下面表示0.5%
0.8
>>> psutil.cpu_percent(percpu=True) # 每个cpu单独显示 这个统计有周期和频率的问题,再次运行结果会不一样,动态的
[0.1, 0.1, 0.3, ...] # 这里输出每个CPU核心的信息
>>> psutil.cpu_percent(percpu=True, interval=3) # interval=3 采样3秒内的数据
[0.1, 0.1, 0.2, ...]
>>> psutil.virtual_memory() # 查看内存的使用情况,也可以使用命令查看`free -m`
svmem(total=10002222, available=555555, ...) # 输出一系列信息 只做举例
>>> psutil.swap_memory() # 查看交换分区的使用情况
sswap(total=10222222, used=0, ...) # 输出一系列信息 只做举例
>>> psutil.disk_partitions()
[sdiskpart(device='/dev/sda1', mountpoint='/', ...)] # 输出一系列信息
>>> psutil.disk_usage('/') # 查看每一个分区可用的空间, 参数是分区
sdiskusage(total=199992222222, used=222222222, ...) # 输出一系列信息
>>> psutil.disk_io_counters() # 硬盘的io读写情况
sdiskio(read_count=8112, write_count=4222, ...) # 输出一系列信息
>>> psutil.net_io_counters() # 查看网络情况
snetio(bytes_sent=562222, bytes_recv=888888, ...) # 输出一系列信息
>>> psutil.net_io_counters(pernic=True) # 存在多块网卡, 列出每块网卡情况
{'ens33': snetio(bytes_sent=562222, bytes_recv=888888, ...)}
>>> psutil.pids() # 获取进程相关信息
[1, 2, 3, 5, ...] # 输出一系列信息
>>> p = psutil.Process(1) # 获取进程id的详细信息
>>> p.name() # 进程名称
'systemd'
>>> p.exe() # 进程的可执行文件
'/lib/systemd/systemd'
>>> p.cwd() # 进程的工作目录
'/'
>>> p.status() # 进程状态
'sleeping'
>>> p.create_time() # 进程创建时间
15222223222.86
>>> p.uids() # 查看进程是哪个用户创建的
puids(real=0, effective=0, saved=0)
>>> p.gids() # 查看进程属于哪个群组
pgids(real=0, effective=0, saved=0)
>>> p.cpu_times() # 获取进程所占用的cpu时间
pcputimes(user=1.02, system=3.92, ...) # 输出一系列信息
>>> p.memory_percent() # 获取进程的内存占用
0.6132332322323232322323
>>> p.io_counters() # 查看进程的io操作
pio(read_count=621130, write_count=67777, ...) # 输出一系列信息
>>> p.num_threads() # 查看进程创建了多少线程
1
如果是一些联网相关的进程,还能看到它的一些网络信息,示例:
ps -ef | grep ssh
# 下面输出一系列信息,在此处不列举了,举例我们查到了一个进程 13141
>>> p = psutil.Process(13141)
>>> p.name() # 打印进程名称
'sshd'
>>> p.connections() # 打印进程连接
[pconn(fd=3, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, laddr=addr(ip='192.168.55.66', port=22), raddr=addr(ip='192.168.55.67', port=5555, status='ESTABLISHED'))] # 这个进程打开了22端口,另一个ip地址67连接到了这个进程,可以分析可疑进程
还有一些其他常用的API
>>> psutil.boot_time() # 获取开机时间
1577664000000.0
>>> import datetime
>>> datatime.datetime.fromtimestamp(1577664000000).strftime("%Y-%m-%d %H:%M:%S")
'2019-12-30 00:00:00:00'
>>> psutil.users() # 获取登录用户
[suser(name='root', ...)]
1 ) 安装
pip3 install ipy
2 ) 具体应用
进入python环境
>>> import IPy
>>> IPy.IP("192.168.1.2").version() # 查看ip版本
4
>>> IPy.IP("::1").version()
6
>>> ips = IPy.IP('192.168.1.0/28') # 这是一个网段
>>> ips.len() # 网段内的所有ip地址的数量
16
>>> [ip for ip in ips] # 打印网段内的ip地址
[IP('192.168.1.0'), IP('192.168.1.1'), ...]
>>> ip = IPy.IP("192.168.88.1")
>>> ip.iptype() # 查看ip类型是公网ip还是私网ip
'PRIVATE'
>>> io = IPy.IP('8.8.8.8')
>>> ip.iptype()
'PUBLIC'
>>> ip.int() # 将ip地址转换为整数(十进制)
134744072
>>> ip.strHex() # 将ip地址转换为十六进制
'0x8080808'
>>> ip.strBin() # 将ip地址转换为二进制
'00001000000010000000100000001000'
# 根据ip和子网掩码生产网段
>>> IPy.IP("192.168.1.0").make_net('255.255.255.0')
IP('192.168.1.0/24')
# 或者使用另一种方式
>>> IPy.IP("192.168.1.0/255.255.255.248", make_net=True)
IP('192.168.1.0/29')
# 还有一种方式
>>> IPy.IP("192.168.1.0-192.168.1.255", make_net=True)
IP('192.168.1.0/24')
# 判断ip地址和网段是否包含在另一个网段中
>>> '192.168.8.1' in IPy.IP('192.168.8.0/24')
True
### 判断两个网段是否出现重复的情况
>>> IPy.IP("192.168.0.0/23").overlaps("192.168.1.0/24")
1 # 1表示存在
>>> IPy.IP("192.168.0.0/24").overlaps("192.168.1.0/24")
0 # 0表示不存在
1 ) 安装
pip3 install dnspython
2 ) 具体应用举例
进入python环境
>>> import dns.resolver
>>> res = dns.resolver.query("www.baidu.com", "A") # 查询百度的A记录
>>> [item.address for item in res]
['119.75.213.61', '119.75.216.20']
>>> res = dns.resolver.query("qq.com", "MX") # 查询腾讯的MX记录(邮件解析记录)
>>> [item for item in res]
[<DNS IN MX rdata: 10 mx3.qq.com.>, <DNS IN MX rdata: 20 mx2.qq.com>, <DNS IN MX rdata: 30 mx1.qq.com.>]
>>> res = dns.resolver.query("baidu.com", "NS") # 查询百度的NS记录, 注意查询NS记录要使用一级域名
>>> [item for item in res]
[<DNS IN NS rdata: dns.baidu.com.>, <DNS IN NS rdata: ns4.baidu.com.>, <DNS IN NS rdata: ns3.baidu.com.>, <DNS IN NS rdata: ns7.baidu.com.>, <DNS IN NS rdata: ns2.baidu.com.>]
通过这些信息我们可以对我们企业的域名进行监控,我们可以写一个python脚本,每隔10分钟对域名进行一个解析, 通过访问, 查看端口是否通畅, 服务器是否死机等