def packet_handler(pkt): strength = get_signal_strength(pkt) mac = get_station_mac(pkt) if is_new_entry(mac): if mac in devices: username = devices[mac]['username'] device_name = devices[mac]['devicename'] ignored = devices[mac]['ignored'] if not ignored: speak('Welcome {}'.format(username)) else: vendor_name = get_mac_vendor(mac) speak('Welcome guest') logger.info('{} {} "{}"'.format( mac, strength, device_name if mac in devices else vendor_name)) update_mac(mac, strength) logger.debug('{} {}'.format(mac, strength))
def main(): args = arg_parser.parse_args() config_file = args.config if config_file: try: with open(config_file) as fp: config.update(yaml.load(fp.read())) except: # Cannot read configuration file pass register_devices(config) if args.log_file: handler = RotatingFileHandler(args.log_file) else: handler = logging.StreamHandler() formatter = logging.Formatter('%(asctime)s [%(levelname)s] %(message)s') handler.setFormatter(formatter) logger.addHandler(handler) if args.verbose: logger.setLevel(logging.DEBUG) else: logger.setLevel(logging.INFO) channels = config.get('channels', range(1, 13+1)) hopper = threading.Thread(target=channel_hopper, args=(config['interface'], channels)) hopper.setDaemon(True) hopper.start() speak('Starting scanner') scapy.config.conf.iface = config['interface'] sniff(iface=config['interface'], prn=packet_handler, lfilter=packet_filter, filter='not subtype beacon', store=False)