Python网络管理

来自CloudWiki
跳转至: 导航搜索

安装包

pip3 install psutil

监控网络信息

获得本机IP

>>> import socket
>>> hostname = socket.gethostname()
>>> hostname
'LAPTOP-28C3GCM7'
>>> socket.gethostbyname(hostname)
'192.168.1.104'

获取网络读写字节个数

In [10]:  psutil.net_io_counters()#获取网络读写字节的个数
Out[10]: snetio(bytes_sent=8445215479, bytes_recv=7761730094, packets_sent=5203357, packets_recv=10378093, errin=0, errout=0, dropin=0, dropout=0)
 

思考:从中能获得什么信息 ?

获取网络接口信息

>>> psutil.net_if_addrs()
{'本地连接* 1': [snicaddr(family=<AddressFamily.AF_LINK: -1>, address='E8-6F-38-26-0F-C9', netmask=None, broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET: 2>, address='169.254.77.128', netmask='255.255.0.0', broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET6: 23>, address='fe80::f05e:828a:d017:4d80', netmask=None, broadcast=None, ptp=None)],

获取网络接口状态

>>> psutil.net_if_stats()
{'蓝牙网络连接': snicstats(isup=False, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=3, mtu=1500), '以太网': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=100, mtu=1500), 'Loopback Pseudo-Interface 1': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=1073, mtu=1500), 'WLAN': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=300, mtu=1500), '本地连接* 1': snicstats(isup=False, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=0, mtu=1500), '本地连接* 2': snicstats(isup=False, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=0, mtu=1500)}
>>> s=psutil.net_if_stats()
>>> s['以太网'].isup
True

思考:编写程序,查看本机哪个网络接口是开启的 ?


获取当前网络连接信息

In [14]: psutil.net_connections()
Out[14]:
[sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, laddr=addr(ip='127.0.0.1', port=10000), raddr=(), status='LISTEN', pid=9532),
 sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, laddr=addr(ip='192.168.1.104', port=58020), raddr=addr(ip='206.189.32.61', port=443), status='ESTABLISHED', pid=10916),
 sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, laddr=addr(ip='192.168.1.104', port=50557), raddr=addr(ip='40.90.189.152', port=443), status='ESTABLISHED', pid=4676),
 sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, laddr=addr(ip='127.0.0.1', port=52856), raddr=addr(ip='127.0.0.1', port=52857), status='ESTABLISHED', pid=9228),
 sconn(fd=-1, family=<AddressFamily.AF_INET6: 23>, type=<SocketKind.SOCK_DGRAM: 2>, laddr=addr(ip='::', port=5353), raddr=(), status='NONE', pid=2324),
。。。