一.简介
最近在统计系统中都部署了什么服务,但服务器太多,在没有标准化之前进行整理,还是写脚本收集方便一些。
当然还是需要人工去判断整理表格,为后面标准化做准备。脚本是python2.7的,默认的centos系列都可以使用。
二.代码
#!/usr/bin/python2.7
#coding=utf-8
#通过netstat -unltp命令收集监听端口,需要客户端安装net-tools
#获取当前运行的服务相关信息、PID号、端口号、服务名称、目录位置import json, commands, string
import socket, sysdeny_port = ["123", "22"]def get_port():
prostr = commands.getstatusoutput('netstat -unltp')
prostr = str(prostr)
prolist = prostr.split('\\n') #用两个\才行
del prolist[0]
del prolist[0]
prolist = prolist[::-1]
info_dict = {} for info in prolist:
port_info = info.split()
if len(port_info) >= 7:
tmp_port = port_info[3].split(':')
tmp_port = tmp_port.pop()
tmp_info = port_info[6].split('/')
tmp_pid = tmp_info[0] if tmp_port in deny_port:
continue if tmp_pid in info_dict.keys():
port_list = info_dict[tmp_pid]
port_list.append(tmp_port)
else:
info_dict[tmp_pid] = [tmp_port] return info_dict#根据字典循环去查询名称
def tmp_name(info_dict):
inq_bin = "ps -aux"
prostr = commands.getstatusoutput(inq_bin)
prostr = str(prostr)
prolist = prostr.split('\\n')
del prolist[0]
for i in prolist:
ps_info = i.split()
ps_pid = ps_info[2]
ps_name = ps_info[11:]
print("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")def get_name(info_dict):
#获取ps
inq_bin = "ps -aux"
prostr = commands.getstatusoutput(inq_bin)
prostr = str(prostr)
prolist = prostr.split('\\n')
del prolist[0] for k, v in info_dict.items():
print("PID号: " + k)
print("监听的端口: " + v)
for i in prolist:
ps_info = i.split()
ps_pid = ps_info[1]
if k == ps_pid:
ps_name = ""
for n in ps_info[10:]:
ps_name = ps_name + " " + n
print("运行用户: " + ps_info[0])
print("服务名称: " + ps_name) exe_dir = "ls -l /proc/" + k + "/exe"
exes = commands.getstatusoutput(exe_dir)
exes = str(exes)
exes_list = exes.split() cwd_dir = "ls -l /proc/" + k + "/cwd"
cwds = commands.getstatusoutput(cwd_dir)
cwds = str(cwds)
cwds_list = cwds.split() print("目录位置: " + exes_list[11] + " 或者 " + cwds_list[11])
print("+++++++++++++++++++++++++++++++++")info_dict = get_port()
get_name(info_dict)