# 获取网络信息
def netInfo():
"""
获取网络信息
:return:
"""
counter = psutil.net_io_counters()
netAddr = psutil.net_if_addrs()
netStat = psutil.net_if_stats()
connections = psutil.net_connections()
# 计算网络信息
def infoDetail(nets: list):
"""
计算网络信息
:param nets: list[snicaddr]
:return:
"""
# 计算指定网络信息
def item(net: psutil._common.snicaddr):
"""
计算指定网络信息
:param net: 指定网络
:return:
"""
return {
'协议': net.family.name,
'MAC': net.address,
'掩码': net.netmask,
'广播': net.broadcast,
'ptp': net.ptp
}
return [item(net) for net in nets]
# 计算网络信息
def statDetail(net: psutil._common.snicstats):
"""
计算网络信息
:param net: 指定网络
:return:
"""
return {
'isup': net.isup,
'双工': net.duplex,
'速率': net.speed,
'最大传输单位(字节)mtu(Maximum Transmission Unit)': net.mtu
}
# 计算一个连接详情
def connDetail(conn: psutil._common.sconn):
"""
计算一个连接详情
:param conn: 指定连接
:return:
"""
return {
'本地地址': conn.laddr[0],
'本地端口': conn.laddr[1],
'远程地址': conn.raddr[0] if 0 in conn.raddr else '',
'远程端口': conn.raddr[1] if 1 in conn.raddr else '',
'状态': conn.status,
'类型': conn.type,
'协议': conn.family.name,
'pid': conn.pid,
'fd': conn.fd
}
return {
'统计': {
'发字节': kmgt(counter.bytes_sent),
'收字节': kmgt(counter.bytes_recv),
'发包': kmgt(counter.packets_sent),
'收包': kmgt(counter.packets_recv),
'errin': counter.errin,
'errout': counter.errout,
'dropin': counter.dropin,
'dropout': counter.dropout
},
'网络地址': {k: infoDetail(netAddr[k]) for k in sorted(netAddr)},
'网络状态': {k: statDetail(netStat[k]) for k in sorted(netStat)},
'连接': [
connDetail(k)
for k in connections
]
}
* 以上 有些字段的含义没有弄明白,就用原来的英文表示了