summaryrefslogtreecommitdiffstats
path: root/census
diff options
context:
space:
mode:
authortv <tv@also>2011-05-29 15:47:21 +0200
committertv <tv@also>2011-05-29 15:47:21 +0200
commite0ec5d2e8560ae433ee677622b24ba82dbe7630b (patch)
treea1fcb14eeafc3df41427896d9b413087d24d71f1 /census
parentedaa1d7f7a0ed33c019fce185b8aff7563498b6e (diff)
lowered filesystem hierarchy--everything are modules
Diffstat (limited to 'census')
-rw-r--r--census/Makefile6
-rw-r--r--census/README.md13
-rw-r--r--census/TODO.md3
-rw-r--r--census/VERSION1
-rwxr-xr-xcensus/arping.py37
-rwxr-xr-xcensus/arping_users.py54
-rw-r--r--census/mac_names.lst1
7 files changed, 115 insertions, 0 deletions
diff --git a/census/Makefile b/census/Makefile
new file mode 100644
index 00000000..2c6c1c03
--- /dev/null
+++ b/census/Makefile
@@ -0,0 +1,6 @@
+.phony: all
+
+all: arping.py arping_users.py
+ echo "call python ./arping_users.py v"
+install:
+ apt-get install python-scapy
diff --git a/census/README.md b/census/README.md
new file mode 100644
index 00000000..e45d39c1
--- /dev/null
+++ b/census/README.md
@@ -0,0 +1,13 @@
+ARPING Users
+==========
+
+This is a simplified python script which checks the available subnet for computers online and returns a list of users which are online based on their mac-address
+
+
+arping_users.py:
+ call `python arping_users.py v` for verbose output -> print all discovered hosts
+
+SNMPWALK Command
+===============
+
+snmpwalk -c shammunity 10.42.0.1 1.3.6.1.2.1.3.1.1.2
diff --git a/census/TODO.md b/census/TODO.md
new file mode 100644
index 00000000..daacfd58
--- /dev/null
+++ b/census/TODO.md
@@ -0,0 +1,3 @@
+BUGS
+=====
+
diff --git a/census/VERSION b/census/VERSION
new file mode 100644
index 00000000..6c50e659
--- /dev/null
+++ b/census/VERSION
@@ -0,0 +1 @@
++++++++[>+++++++>+++++++<<-]>.>---.<-.
diff --git a/census/arping.py b/census/arping.py
new file mode 100755
index 00000000..1b51ab1b
--- /dev/null
+++ b/census/arping.py
@@ -0,0 +1,37 @@
+#!/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=0
+ 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/census/arping_users.py b/census/arping_users.py
new file mode 100755
index 00000000..c576e4f3
--- /dev/null
+++ b/census/arping_users.py
@@ -0,0 +1,54 @@
+#!/usr/bin/python
+import subprocess,re,logging,sys
+
+from arping import arpingy
+from multiprocessing import Pool
+DEV='eth0'
+MAC_NAMES='mac_names.lst'
+data = []
+ret = {}
+verb = False
+
+if len(sys.argv) > 1 and sys.argv[1] == 'v':
+ verb = True
+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(4):
+ 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 Exception as e:
+ print 'you fail '+str(e)
+
+
+
+for p in ret:
+ if verb:
+ print p[0] + " => " + p[1]
+ if p[1] in names:
+ print names[p[1]]+ " is online"
+
+
diff --git a/census/mac_names.lst b/census/mac_names.lst
new file mode 100644
index 00000000..dcd3c2b0
--- /dev/null
+++ b/census/mac_names.lst
@@ -0,0 +1 @@
+00:40:63:c8:b5:a0 krebs