|
17 | 17 | from __future__ import unicode_literals, print_function |
18 | 18 |
|
19 | 19 | import ethtool |
| 20 | +import socket |
| 21 | +import struct |
20 | 22 | import sys |
21 | 23 | from optparse import OptionParser |
22 | 24 |
|
23 | 25 |
|
| 26 | +def bits2netmask(bits): |
| 27 | + mask = (1 << 32) - (1 << 32 >> bits) |
| 28 | + return socket.inet_ntoa(struct.pack(">L", mask)) |
| 29 | + |
| 30 | + |
24 | 31 | def flags2str(flags): |
25 | 32 | string = '' |
26 | 33 | if flags & ethtool.IFF_UP: |
@@ -60,24 +67,19 @@ def flags2str(flags): |
60 | 67 |
|
61 | 68 |
|
62 | 69 | def show_config(device): |
63 | | - try: |
64 | | - ipaddr = ethtool.get_ipaddr(device) |
65 | | - netmask = ethtool.get_netmask(device) |
66 | | - broadcast = ethtool.get_broadcast(device) |
67 | | - except (IOError, OSError): |
68 | | - ipaddr, netmask, broadcast = None, None, None |
69 | 70 | flags = ethtool.get_flags(device) |
70 | | - print('%s' % device) |
71 | | - if not (flags & ethtool.IFF_LOOPBACK): |
72 | | - print('\tHWaddr %s' % ethtool.get_hwaddr(device)) |
73 | | - if ipaddr is not None: |
74 | | - print('\tinet addr:%s' % ipaddr) |
75 | | - if broadcast is not None and \ |
76 | | - not (flags & (ethtool.IFF_LOOPBACK | ethtool.IFF_POINTOPOINT)): |
77 | | - print('\tBcast:%s' % broadcast) |
78 | | - if netmask is not None: |
79 | | - print('\tMask:%s' % netmask) |
| 71 | + |
80 | 72 | for info in ethtool.get_interfaces_info(device): |
| 73 | + print(device) |
| 74 | + if not (flags & ethtool.IFF_LOOPBACK): |
| 75 | + print('\tHWaddr %s' % ethtool.get_hwaddr(device)) |
| 76 | + |
| 77 | + for addr in info.get_ipv4_addresses(): |
| 78 | + print('\tinet addr:%s' % addr.address, end=" ") |
| 79 | + if not (flags & (ethtool.IFF_LOOPBACK | ethtool.IFF_POINTOPOINT)): |
| 80 | + print('Bcast:%s' % addr.broadcast, end=" ") |
| 81 | + print('Mask:%s' % bits2netmask(addr.netmask)) |
| 82 | + |
81 | 83 | for addr in info.get_ipv6_addresses(): |
82 | 84 | print('\tinet6 addr: %s/%s Scope: %s' |
83 | 85 | % (addr.address, |
|
0 commit comments