psutil

Форк
0
/
ifconfig.py 
118 строк · 3.6 Кб
1
#!/usr/bin/env python3
2

3
# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved.
4
# Use of this source code is governed by a BSD-style license that can be
5
# found in the LICENSE file.
6

7
"""A clone of 'ifconfig' on UNIX.
8

9
$ python3 scripts/ifconfig.py
10
lo:
11
    stats          : speed=0MB, duplex=?, mtu=65536, up=yes
12
    incoming       : bytes=1.95M, pkts=22158, errs=0, drops=0
13
    outgoing       : bytes=1.95M, pkts=22158, errs=0, drops=0
14
    IPv4 address   : 127.0.0.1
15
         netmask   : 255.0.0.0
16
    IPv6 address   : ::1
17
         netmask   : ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
18
    MAC  address   : 00:00:00:00:00:00
19

20
docker0:
21
    stats          : speed=0MB, duplex=?, mtu=1500, up=yes
22
    incoming       : bytes=3.48M, pkts=65470, errs=0, drops=0
23
    outgoing       : bytes=164.06M, pkts=112993, errs=0, drops=0
24
    IPv4 address   : 172.17.0.1
25
         broadcast : 172.17.0.1
26
         netmask   : 255.255.0.0
27
    IPv6 address   : fe80::42:27ff:fe5e:799e%docker0
28
         netmask   : ffff:ffff:ffff:ffff::
29
    MAC  address   : 02:42:27:5e:79:9e
30
         broadcast : ff:ff:ff:ff:ff:ff
31

32
wlp3s0:
33
    stats          : speed=0MB, duplex=?, mtu=1500, up=yes
34
    incoming       : bytes=7.04G, pkts=5637208, errs=0, drops=0
35
    outgoing       : bytes=372.01M, pkts=3200026, errs=0, drops=0
36
    IPv4 address   : 10.0.0.2
37
         broadcast : 10.255.255.255
38
         netmask   : 255.0.0.0
39
    IPv6 address   : fe80::ecb3:1584:5d17:937%wlp3s0
40
         netmask   : ffff:ffff:ffff:ffff::
41
    MAC  address   : 48:45:20:59:a4:0c
42
         broadcast : ff:ff:ff:ff:ff:ff
43
"""
44

45
from __future__ import print_function
46

47
import socket
48

49
import psutil
50
from psutil._common import bytes2human
51

52

53
af_map = {
54
    socket.AF_INET: 'IPv4',
55
    socket.AF_INET6: 'IPv6',
56
    psutil.AF_LINK: 'MAC',
57
}
58

59
duplex_map = {
60
    psutil.NIC_DUPLEX_FULL: "full",
61
    psutil.NIC_DUPLEX_HALF: "half",
62
    psutil.NIC_DUPLEX_UNKNOWN: "?",
63
}
64

65

66
def main():
67
    stats = psutil.net_if_stats()
68
    io_counters = psutil.net_io_counters(pernic=True)
69
    for nic, addrs in psutil.net_if_addrs().items():
70
        print("%s:" % (nic))
71
        if nic in stats:
72
            st = stats[nic]
73
            print("    stats          : ", end='')
74
            print(
75
                "speed=%sMB, duplex=%s, mtu=%s, up=%s"
76
                % (
77
                    st.speed,
78
                    duplex_map[st.duplex],
79
                    st.mtu,
80
                    "yes" if st.isup else "no",
81
                )
82
            )
83
        if nic in io_counters:
84
            io = io_counters[nic]
85
            print("    incoming       : ", end='')
86
            print(
87
                "bytes=%s, pkts=%s, errs=%s, drops=%s"
88
                % (
89
                    bytes2human(io.bytes_recv),
90
                    io.packets_recv,
91
                    io.errin,
92
                    io.dropin,
93
                )
94
            )
95
            print("    outgoing       : ", end='')
96
            print(
97
                "bytes=%s, pkts=%s, errs=%s, drops=%s"
98
                % (
99
                    bytes2human(io.bytes_sent),
100
                    io.packets_sent,
101
                    io.errout,
102
                    io.dropout,
103
                )
104
            )
105
        for addr in addrs:
106
            print("    %-4s" % af_map.get(addr.family, addr.family), end="")
107
            print(" address   : %s" % addr.address)
108
            if addr.broadcast:
109
                print("         broadcast : %s" % addr.broadcast)
110
            if addr.netmask:
111
                print("         netmask   : %s" % addr.netmask)
112
            if addr.ptp:
113
                print("      p2p       : %s" % addr.ptp)
114
        print()
115

116

117
if __name__ == '__main__':
118
    main()
119

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.