summaryrefslogtreecommitdiffstats
path: root/modules/people/src
diff options
context:
space:
mode:
authorkrebs <krebs@UTART>2011-05-22 01:42:36 +0200
committerkrebs <krebs@UTART>2011-05-22 01:42:36 +0200
commit951d398e20fdb778289e7dff2350594503dc300f (patch)
treea52b4a8bcd57f70def4ead7529ad4c9c66eab386 /modules/people/src
parent0ec6ff898460d767cf984d792949ba7344e0758b (diff)
updated people script,
removed bloat from people script collection
Diffstat (limited to 'modules/people/src')
-rwxr-xr-xmodules/people/src/arping.py37
-rwxr-xr-xmodules/people/src/arping_users.py48
-rw-r--r--modules/people/src/mac_names.lst1
-rwxr-xr-xmodules/people/src/main.py33
-rwxr-xr-xmodules/people/src/snmp_users.py122
5 files changed, 0 insertions, 241 deletions
diff --git a/modules/people/src/arping.py b/modules/people/src/arping.py
deleted file mode 100755
index eea176e0..00000000
--- a/modules/people/src/arping.py
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/python
-
-import logging
-log = logging.getLogger('arpingy')
-logging.disable(logging.WARNING)
-
-import os,sys
-try:
- if (os.geteuid() != 0):
- raise Exception('no root permissions')
- from scapy.all import * #might throws "no such module"
-
- def arpingy(iprange="10.42.1.0/24",iface='eth0'):
- log.debug("pinging "+ str(iprange))
- """Arping function takes IP Address or Network, returns nested mac/ip list"""
- try:
- conf.verb=1
- ans,unans=arping(iprange,iface=iface,timeout=1,retry=3)
-
- collection = []
- for snd, rcv in ans:
- result = rcv.sprintf(r"%ARP.psrc% %Ether.src%").split()
- log.debug(result)
- return result # take just the first arp reply
- except Exception as e:
- print ("something went wrong while arpinging " + str(e))
- return []
-
-except Exception as e:
- log.error("Cannot load arping functions!" + str(e))
- def arpingy(iprange='',iface=''):
- raise Exception ('arping not available')
-
-
-if __name__ =='__main__':
- logging.basicConfig(level=logging.DEBUG)
- arpingy(sys.argv[1],sys.argv[2])
diff --git a/modules/people/src/arping_users.py b/modules/people/src/arping_users.py
deleted file mode 100755
index d6f6826e..00000000
--- a/modules/people/src/arping_users.py
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/python
-import subprocess,re,logging
-
-from arping import arpingy
-from multiprocessing import Pool
-
-DEV='eth0'
-MAC_NAMES='mac_names.lst'
-data = []
-ret = {}
-exit (0)
-def get_own_addr():
- data = subprocess.Popen(['/sbin/ifconfig',DEV],
- stdout=subprocess.PIPE).communicate()[0].replace('\n','')
- return re.sub(r'.*HWaddr ([0-9A-Fa-f:]*).*inet addr:([0-9.]*).*' ,
- r'\1 \2',data).split()
-
-def load_names(MAC_NAMES):
- names = {}
- f = open(MAC_NAMES)
- for l in f:
- mac,name = l.split()
- names[mac] = name.replace('\n','')
- f.close()
- return names
-
-def arping_helper(dic):
- return arpingy(**dic)
-
-for first in range(3):
- for second in range(255):
- data.append({'iprange':'10.42.'+str(first)+'.'+str(second),'iface':DEV})
-
-names = load_names(MAC_NAMES)
-try:
- p = Pool(20)
- ret = filter(lambda x:x , p.map(arping_helper, data))
- myip,mymac = get_own_addr()
- ret.append([mymac,myip])
- p.terminate()
-except:
- print 'you fail'
-
-
-
-for p in ret:
- if p[1] in names:
- print names[p[1]]+ " is online"
diff --git a/modules/people/src/mac_names.lst b/modules/people/src/mac_names.lst
deleted file mode 100644
index dcd3c2b0..00000000
--- a/modules/people/src/mac_names.lst
+++ /dev/null
@@ -1 +0,0 @@
-00:40:63:c8:b5:a0 krebs
diff --git a/modules/people/src/main.py b/modules/people/src/main.py
deleted file mode 100755
index c70bffd4..00000000
--- a/modules/people/src/main.py
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env python2
-import sys,json,time
-from snmp_users import snmp_users
-import logging
-import genericore as gen
-MODULE_NAME='snmp_users'
-log = logging.getLogger(MODULE_NAME)
-PROTO_VERSION = 1
-DESCRIPTION = 'performes statistical analysis against mails from stream'
-
-
-# set up instances of needed modules
-conf = gen.Configurator(PROTO_VERSION,DESCRIPTION)
-amqp = gen.auto_amqp(MODULE_NAME)
-s = snmp_users(MODULE_NAME) # the magic mail parsing class
-
-conf.configure([amqp,s]) #set up parser and eval parsed stuff
-
-# start network connections
-amqp.create_connection()
-
-log.info('Starting up snmp_users')
-print ' Sending Messages in Intervals. To exit press CTRL+C'
-try:
- while True:
- log.info("collecting data from network")
- ret = s.collect()
- data = { 'type' : 'snmp', 'subtype' : 0, 'data' : ret}
- log.debug("writing data to queue : %s" % data)
- amqp.publish(json.dumps(data))
- time.sleep(s.repeat)
-except Exception as e:
- print "something happened :( " + str(e)
diff --git a/modules/people/src/snmp_users.py b/modules/people/src/snmp_users.py
deleted file mode 100755
index 871ed9dd..00000000
--- a/modules/people/src/snmp_users.py
+++ /dev/null
@@ -1,122 +0,0 @@
-#!/usr/bin/python2
-
-import logging, subprocess,re
-from multiprocessing import Pool
-from genericore import Configurable
-from arping import arpingy
-log = logging.getLogger('snmp_users')
-
-DEFAULT_CONFIG= {
- "snmp" : {
- "server" : "127.0.0.1",
- "community" : "community",
- "tree" : "1.3.6.1.2.1.3.1.1.2"
- },
- "arping" : {
- "active" : True,
- "dev" : "eth0"
- }
-}
-
-def arping_helper(dic):
- return arpingy(**dic)
-
-class snmp_users(Configurable):
- mac_list = {}
-
- def __init__(self,MODULE_NAME,config=None):
- self.NAME=MODULE_NAME
- newConf = { MODULE_NAME : DEFAULT_CONFIG }
- Configurable.__init__(self,newConf)
- self.load_conf(config)
-
- def call_external(self):
- """returns an array of lines produced by snmpwalk """
- conf = self.config[self.NAME]['snmp']
-
- out = subprocess.Popen(
- ['snmpwalk',
- '-v2c',
- '-c',conf['community'],
- conf['server'],
- conf['tree']],
- stdout=subprocess.PIPE).communicate()[0]
- return out.split('\n')
-
- def parse_output(self,output):
- """ parses output lines produced by snmpwalk """
- data = []
- for i in output:
- if i == '':
- continue
- data.append(re.sub(r'.*\.(\d+\.\d+\.\d+\.\d+) = Hex-STRING: ([ 0-9A-F]*) ', r'\1 : \2',i).split(' : '))
- data = [ [ip,':'.join(mac.split()).lower()] for ip,mac in data] #sanitize
-
- return data
-
- def update_results(self,new):
- """ Verifies ip and mac via ARP Scan
- in addition it adds the correct ip to the mac_list """
- macl = self.mac_list = {}
- for ip,mac in new: # fill the mac_list
- if not macl.get(mac,None):
- macl[mac] = []
- macl[mac].append(ip)
- return True
-
- def verify(self,snmp_data):
- """ verifies retrieved data where data is an array of arrays where
- [0] is the ip and [1] is the mac (space-delimited)"""
- arp_data = self.arping_parallel(snmp_data)
- self.update_results(arp_data)
-
- def get_own_addr(self):
- data = subprocess.Popen(['/sbin/ifconfig',self.config[self.NAME]['arping']['dev']],
- stdout=subprocess.PIPE).communicate()[0].replace('\n','')
- return re.sub(r'.*HWaddr ([0-9:A-F]*).*inet addr:([0-9.]*).*' ,r'\1 \2',data).split()
-
-
- def arping_parallel(self,data):
- conf = self.config[self.NAME]['arping']
- if conf['active']:
- tmp = [ {'iprange':dat[0],'iface':conf['dev']} for dat in data]
- try:
- p = Pool(10)
- ret = filter(lambda x:x , p.map(arping_helper, tmp))
-
- myip,mymac = self.get_own_addr() #append self to list
- ret.append([mymac,myip ] )
- p.terminate()
- return ret
- except Exception as e:
- log.warning("Something happened,falling back to original data: "+ str(e))
- return data
-
- def collect(self):
- output = self.call_external()
- data = self.parse_output(output)
- if not data:
- raise Exception('External tool had not returned any parsable output')
- log.debug('Got following output from snmpwalk program: ' +str(data))
- macs = self.verify(data)
- #self.print_results(self.mac_list)
- return self.mac_list
-
- def print_results(self,macs):
- log.debug('printing results:')
- print '\n'.join([ mac + " => %s" %
- str(ips) for mac,ips in macs.items() ])
- print '%d *unique* nodes in network' % len(macs)
-
- def populate_parser(self,parser):
- parser.add_argument('--repeat',type=int,dest='repeat',default=30,help='Seconds between Scans',metavar='SECS') #TODO add this to configuration
-
- def eval_parser(self,parsed):
- self.repeat = parsed.repeat
-
-if __name__ == "__main__":
- logging.basicConfig(level=logging.INFO)
- a = snmp_users()
- print a.get_own_addr()
- a.collect()
- a.print_results(a.mac_list)