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""" 8A clone of 'ifconfig' on UNIX. 9 10$ python scripts/ifconfig.py 11lo: 12 stats : speed=0MB, duplex=?, mtu=65536, up=yes 13 incoming : bytes=1.95M, pkts=22158, errs=0, drops=0 14 outgoing : bytes=1.95M, pkts=22158, errs=0, drops=0 15 IPv4 address : 127.0.0.1 16 netmask : 255.0.0.0 17 IPv6 address : ::1 18 netmask : ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff 19 MAC address : 00:00:00:00:00:00 20 21docker0: 22 stats : speed=0MB, duplex=?, mtu=1500, up=yes 23 incoming : bytes=3.48M, pkts=65470, errs=0, drops=0 24 outgoing : bytes=164.06M, pkts=112993, errs=0, drops=0 25 IPv4 address : 172.17.0.1 26 broadcast : 172.17.0.1 27 netmask : 255.255.0.0 28 IPv6 address : fe80::42:27ff:fe5e:799e%docker0 29 netmask : ffff:ffff:ffff:ffff:: 30 MAC address : 02:42:27:5e:79:9e 31 broadcast : ff:ff:ff:ff:ff:ff 32 33wlp3s0: 34 stats : speed=0MB, duplex=?, mtu=1500, up=yes 35 incoming : bytes=7.04G, pkts=5637208, errs=0, drops=0 36 outgoing : bytes=372.01M, pkts=3200026, errs=0, drops=0 37 IPv4 address : 10.0.0.2 38 broadcast : 10.255.255.255 39 netmask : 255.0.0.0 40 IPv6 address : fe80::ecb3:1584:5d17:937%wlp3s0 41 netmask : ffff:ffff:ffff:ffff:: 42 MAC address : 48:45:20:59:a4:0c 43 broadcast : ff:ff:ff:ff:ff:ff 44""" 45 46from __future__ import print_function 47import socket 48 49import psutil 50from psutil._common import bytes2human 51 52 53af_map = { 54 socket.AF_INET: 'IPv4', 55 socket.AF_INET6: 'IPv6', 56 psutil.AF_LINK: 'MAC', 57} 58 59duplex_map = { 60 psutil.NIC_DUPLEX_FULL: "full", 61 psutil.NIC_DUPLEX_HALF: "half", 62 psutil.NIC_DUPLEX_UNKNOWN: "?", 63} 64 65 66def 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("speed=%sMB, duplex=%s, mtu=%s, up=%s" % ( 75 st.speed, duplex_map[st.duplex], st.mtu, 76 "yes" if st.isup else "no")) 77 if nic in io_counters: 78 io = io_counters[nic] 79 print(" incoming : ", end='') 80 print("bytes=%s, pkts=%s, errs=%s, drops=%s" % ( 81 bytes2human(io.bytes_recv), io.packets_recv, io.errin, 82 io.dropin)) 83 print(" outgoing : ", end='') 84 print("bytes=%s, pkts=%s, errs=%s, drops=%s" % ( 85 bytes2human(io.bytes_sent), io.packets_sent, io.errout, 86 io.dropout)) 87 for addr in addrs: 88 print(" %-4s" % af_map.get(addr.family, addr.family), end="") 89 print(" address : %s" % addr.address) 90 if addr.broadcast: 91 print(" broadcast : %s" % addr.broadcast) 92 if addr.netmask: 93 print(" netmask : %s" % addr.netmask) 94 if addr.ptp: 95 print(" p2p : %s" % addr.ptp) 96 print("") 97 98 99if __name__ == '__main__': 100 main() 101