# oui.txt is the oui file downloaded from 
# http://standards.ieee.org/regauth/oui/index.shtml
# arg1 points to a file containing standard MAC addresses

import re
import os
import sys

def loadoui(src="oui.txt"):
	ouiMap = {}
	for ln in open(src):
		mat = re.match(r"([\da-fA-F]{2})-([\da-fA-F]{2})-([\da-fA-F]{2})"
			r"\s+\(hex\)\s*(.*)", ln)
		if mat:
			ouiMap[mat.group(1).lower(), mat.group(2).lower(), 
				mat.group(3).lower()] = mat.group(4)
	return ouiMap

def resolveOne(mac, ouiMap):
	parts = [p.lower() for p in mac.split(":")]
	try:
		print ouiMap[tuple(parts[:3])]
	except KeyError:
		print "UNKNOWN"

def resolveAll(macs, ouiMap):
	for mac in macs:
		resolveOne(mac, ouiMap)

def resolveFromTcpdump(ouiMap):
	macsSeen = set()
	macPat = re.compile(":".join([r"[\da-f]{2}"]*6))
	for dumpLine in os.popen("sudo tcpdump -eq"):
		try:
			mac = dumpLine.split()[1]
			if macPat.match(mac):
				if not mac in macsSeen:
					resolveOne(mac, ouiMap)
					macsSeen.add(mac)
		except IndexError:  # probably a line with non-dump content
			pass

if __name__=="__main__":
	ouiMap = loadoui()
#	resolveOne(sys.argv[1], ouiMap)
#	resolveAll(sys.argv[1], ouiMap)
	resolveFromTcpdump(ouiMap)
