需求:用 python 统计netstat 命令下的网络连接状态,并按数量排序
import os
IPSet = set([])
IPDict = {}
result = os.popen('netstat -unptal')
result.readline()
result.readline()
contents = result.readlines()
#显示当前网络状态
for content in contents:
print(content, end='')
print('-'*20)
# 提取所有对外的外部IP集合
for line in contents:
IPSet.add((line.split( )[4].rsplit(':', 1)[0]))
# 安装每个IP下的网络状态进行分类
for IP in IPSet:
stat = []
for line in contents:
if IP == line.split( )[4].rsplit(':', 1)[0]:
stat.append(line.split()[5])
IPDict.update({IP: stat})
#打印统计结果,安装一个IP,网络状态数量排序
while IPDict:
IP = max(IPDict, key=lambda x: len(IPDict[x]))
print(IP)
stats = set(IPDict[IP])
for stat in stats:
print(' '*12, stat, IPDict[IP].count(stat))
IPDict.pop(IP)
执行结果如下:
[root@localhost ~]# python3 net.py
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 869/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 987/master
tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 7928/sshd: root@pts
tcp 0 0 127.0.0.1:6011 0.0.0.0:* LISTEN 8088/sshd: root@pts
tcp 0 0 192.168.4.8:34454 192.168.4.8:22 ESTABLISHED 8413/ssh
tcp 0 0 192.168.4.8:22 192.168.4.6:51320 ESTABLISHED 8924/sshd: root@pts
tcp 0 0 192.168.4.8:22 192.168.4.6:51322 ESTABLISHED 8947/sshd: root@pts
tcp 0 0 192.168.4.8:22 192.168.4.6:51330 ESTABLISHED 9112/sshd: root@pts
tcp 0 0 192.168.4.8:22 192.168.4.6:51328 ESTABLISHED 9065/sshd: root@pts
tcp 0 0 192.168.4.8:22 192.168.4.2:65411 ESTABLISHED 8088/sshd: root@pts
tcp 0 0 192.168.4.8:22 192.168.4.8:34454 ESTABLISHED 8414/sshd: root@pts
tcp 0 0 192.168.4.8:22 192.168.4.2:51793 ESTABLISHED 8905/sshd: root@not
tcp 0 0 192.168.4.8:22 192.168.4.8:34458 ESTABLISHED 8973/sshd: root@pts
tcp 0 0 192.168.4.8:22 192.168.4.6:51308 ESTABLISHED 8359/sshd: root@pts
tcp 0 0 192.168.4.8:34458 192.168.4.8:22 ESTABLISHED 8972/ssh
tcp 0 0 192.168.4.8:22 192.168.4.2:65149 ESTABLISHED 7928/sshd: root@pts
tcp 0 0 192.168.4.8:22 192.168.4.5:46446 ESTABLISHED 8634/sshd: root@pts
tcp6 0 0 :::22 :::* LISTEN 869/sshd
tcp6 0 0 ::1:25 :::* LISTEN 987/master
tcp6 0 0 ::1:6010 :::* LISTEN 7928/sshd: root@pts
tcp6 0 0 ::1:6011 :::* LISTEN 8088/sshd: root@pts
--------------------
192.168.4.6
ESTABLISHED 5
0.0.0.0
LISTEN 4
::
LISTEN 4
192.168.4.8
ESTABLISHED 4
192.168.4.2
ESTABLISHED 3
192.168.4.5
ESTABLISHED 1