class MacAddresses: def __init__(self): self.__mac_lookup = MacLookup() self.__mac_lookup.load_vendors() self.__mac_addresses = self.__fetch_mac_addresses() def __call__(self): return self.__mac_addresses # MACアドレスの取得 def __fetch_mac_addresses(self): mac_addresses = {} for name, interface in ifcfg.interfaces().items(): address = interface['ether'] mac_addresses[name] = { 'address': address, 'vendor': self.__lookup_org_by_mac_address(address) if address is not None else None, } return mac_addresses # MACアドレスからベンダを照会する # mac_vendor_lookupが存在しないMACアドレスを投げると例外吐いて死にやがるのでこういう邪悪なコードになりました def __lookup_org_by_mac_address(self, mac_address): oui = MacAddresses.translate_oui(mac_address) return self.__mac_lookup.lookup( mac_address ) if oui in self.__mac_lookup.async_lookup.prefixes else None # MACアドレスからOUIを抽出して返す @staticmethod def translate_oui(mac_address): oui = mac_address.replace(':', '').replace('-', '').upper() try: int(oui, 16) except ValueError: raise InvalidMacAddressException( '{} contains unexpected character'.format(mac_address)) if len(oui) > 12: raise InvalidMacAddressException( '{} is not a valid MAC address (too long)'.format(mac_address)) if type(oui) == str: oui = oui.encode('utf8') return oui[:6]
from scapy.all import * # import local, modified version of mac_vendor_lookup from mac_vendor_lookup import MacLookup mac = MacLookup() mac.load_vendors() def find_mac(mac_address): return mac.lookup(mac_address) """ Show send/receive """ def PacketHandler(p): sn = p.addr2 rc = p.addr1 print(str(sn) + ' -> ' + str(rc)) print(find_mac(sn) + ' -> ' + find_mac(rc)) print("\n") sniff(iface="wlp3s0mon", prn=PacketHandler)
from datetime import datetime import matplotlib.pyplot as plt import pyshark import os import sys from mac_vendor_lookup import MacLookup import csv import numpy as np roundOffSecond = 10 mlu = MacLookup() mlu.load_vendors() # sources = [] tvs = {} # time versus source def add_data_to_dict(packet): source = packet.source[0:17] destination = packet.destination[0:17] # time = packet.time.split('.')[0] # time = myround(int(time),roundOffSecond) global time if source and destination: # global sources global tvs # sources.append(source) if time not in tvs: tvs[time] = [source]
from mac_vendor_lookup import MacLookup parser = argparse.ArgumentParser() parser.add_argument("--iface", help='Interface to capture data', required=True) parser.add_argument("--debug", help='Enable debug', required=False, action='store_true') parser.add_argument("--cont", help='load previous', required=False, action='store_true') args = parser.parse_args() macdb = MacLookup() macdb.load_vendors() run = True wigle_flag = False if Wigle.AUTH == '': wigle_flag = True def signal_handler(sig, frame): global run run = False print('Bye! ;)') sys.exit(0) signal.signal(signal.SIGINT, signal_handler)